Kerberos¶
Airflow 对 Kerberos 提供了初始支持。这意味着 Airflow 可以为自身续订 Kerberos 票证并将其存储在票证缓存中。钩子和 DAG 可以使用票证对 kerberized 服务进行身份验证。
限制¶
请注意,目前并非所有钩子都已调整为使用此功能。此外,它不会将 Kerberos 集成到 Web 界面中,您目前必须依赖网络级别的安全性来确保您的服务保持安全。
尚未尝试和测试 Celery 集成。但是,如果您为每个主机生成一个 key tab 并在每个 worker 旁边启动一个票证续订器,则它很可能可以工作。
启用 Kerberos¶
Airflow¶
要启用 Kerberos,您需要生成一个(服务)key tab。
# in the kadmin.local or kadmin shell, create the airflow principal
kadmin: addprinc -randkey airflow/[email protected]
# 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) standard: airflow kerberos 命令将无限期运行。票证续订器进程每隔几秒钟持续运行,并在票证过期时刷新票证。b) one-time: airflow kerberos 将运行一次并退出。如果发生故障,则主任务将不会启动。
默认模式为 standard。
用法示例
对于 standard 模式
airflow kerberos
对于 one time 模式
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/[email protected]"}
将 principal 调整为您的设置。_HOST
部分将被服务器的完全限定域名替换。
您可以指定是否希望使用 DAG 所有者作为连接的用户,或者使用连接的登录部分中指定的用户。对于登录用户,请将以下内容指定为 extra
{ "use_beeline": true, "principal": "hive/[email protected]", "proxy_user": "login"}
对于 DAG 所有者,请使用
{ "use_beeline": true, "principal": "hive/[email protected]", "proxy_user": "owner"}
在您的 DAG 中初始化 HiveOperator 时,指定
run_as_owner=True
要使用 kerberos 身份验证,您必须安装带有 kerberos
extras 组的 Airflow
pip install 'apache-airflow[kerberos]'
您可以在 Kerberos 身份验证的 worker 中阅读有关 Kerberos 部署的一些生产方面的信息