Kerberos¶
Airflow 初步支持 Kerberos。这意味着 Airflow 可以自行续订 Kerberos 票据并将其存储在票据缓存中。钩子和 DAG 可以利用这些票据对启用 Kerberos 的服务进行身份验证。
限制¶
请注意,目前并非所有钩子都已调整为使用此功能。 此外,它没有将Kerberos集成到网络界面中,您目前需要依赖网络 级别的安全性来确保您的服务保持安全。
Celery集成尚未经过充分尝试和测试。不过,如果为每个主机生成密钥表并在每个工作节点旁启动票据续订器,它很可能会正常工作。
启用Kerberos认证¶
Airflow¶
要启用Kerberos,您需要生成一个(服务)密钥表。
# in the kadmin.local or kadmin shell, create the airflow principal
kadmin: addprinc -randkey airflow/fully.qualified.domain.name@YOUR-REALM.COM
# Create the airflow keytab file that will contain the airflow principal
kadmin: xst -norandkey -k airflow.keytab airflow/fully.qualified.domain.name
现在将此文件存储在airflow用户可以读取的位置(chmod 600)。然后将以下内容添加到您的airflow.cfg中
[core]
security = kerberos
[kerberos]
keytab = /etc/airflow/airflow.keytab
reinit_frequency = 3600
principal = airflow
如果您在基于Docker容器的环境中使用Airflow,
可以在Dockerfile中设置以下环境变量,而无需修改airflow.cfg
ENV AIRFLOW__CORE__SECURITY kerberos
ENV AIRFLOW__KERBEROS__KEYTAB /etc/airflow/airflow.keytab
ENV AIRFLOW__KERBEROS__INCLUDE_IP False
如果您需要对Kerberos票据进行更细粒度的配置,以下选项及其默认值可供使用:
[kerberos]
# Location of your ccache file once kinit has been performed
ccache = /tmp/airflow_krb5_ccache
# principal gets augmented with fqdn
principal = airflow
reinit_frequency = 3600
kinit_path = kinit
keytab = airflow.keytab
# Allow kerberos token to be flag forwardable or not
forwardable = True
# Allow to include or remove local IP from kerberos token.
# This is particularly useful if you use Airflow inside a VM NATted behind host system IP.
include_ip = True
请注意,Kerberos票据是通过kinit生成的,默认会使用您本地的krb5.conf文件。
启动票证续订器
# run ticket renewer
airflow kerberos
为了支持在标准或一次性模式下使用kerberos的更高级部署模型,您可以在运行airflow kerberos时通过使用--one-time标志来指定模式。
a) 标准模式: airflow kerberos 命令将持续运行。票据续订进程每隔几秒就会持续运行,并在票据过期时进行刷新。 b) 单次模式: airflow kerberos 将运行一次后退出。如果失败,主任务不会启动。
默认模式是标准模式。
示例用法:
对于标准模式:
airflow kerberos
对于一次性模式:
airflow kerberos --one-time
Hadoop¶
如需使用模拟身份功能,需在Hadoop配置的core-site.xml文件中启用此设置。
<property>
<name>hadoop.proxyuser.airflow.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.airflow.users</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.airflow.hosts</name>
<value>*</value>
</property>
当然,如果您需要加强安全性,请将星号替换为更合适的字符。
使用Kerberos认证¶
Hive钩子已更新以支持Kerberos认证。要让您的DAG使用此功能,只需更新连接详细信息,例如:
{ "use_beeline": true, "principal": "hive/_HOST@EXAMPLE.COM"}
根据您的设置调整主体。_HOST部分将被替换为服务器的完全限定域名。
您可以指定是否希望使用DAG所有者作为连接的用户,或者使用连接登录部分中指定的用户。对于登录用户,请在extra中指定以下内容:
{ "use_beeline": true, "principal": "hive/_HOST@EXAMPLE.COM", "proxy_user": "login"}
供DAG所有者使用:
{ "use_beeline": true, "principal": "hive/_HOST@EXAMPLE.COM", "proxy_user": "owner"}
在您的DAG中,初始化HiveOperator时指定:
run_as_owner=True
要使用Kerberos认证,你必须安装带有kerberos额外组件组的Airflow:
pip install 'apache-airflow[kerberos]'
您可以阅读关于Kerberos部署的一些生产环境注意事项,请参考Kerberos认证的工作节点