Kerberos

Airflow 初步支持 Kerberos。这意味着 Airflow 可以为自己续订 Kerberos 票证并将其存储在票证缓存中。钩子和 DAG 可以利用票证来对 kerberized 服务进行身份验证。

局限性

请注意,目前并非所有钩子都已调整为使用此功能。此外,它不会将 Kerberos 集成到 Web 界面中,现在您必须依靠网络级安全性来确保您的服务保持安全。

尚未尝试和测试 Celery 集成。但是,如果您为每个主机生成一个密钥选项卡并在每个工作进程旁边启动一个票证更新程序,则它很可能会起作用。

启用 Kerberos

Airflow

要启用 Kerberos,您需要生成一个(服务)密钥选项卡。

# 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。

示例用法

对于标准模式

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/[email protected]"}

根据你的设置调整主体。服务器的完全限定域名将替换 _HOST 部分。

你可以指定是否希望将 DAG 所有者用作连接的用户,还是将连接登录部分中指定的用户用作连接的用户。对于登录用户,请将以下内容指定为额外内容

{ "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 额外组安装 Airflow

pip install 'apache-airflow[kerberos]'

你可以在 经过 Kerberos 身份验证的使用者 中了解 Kerberos 部署的一些生产方面

此条目有帮助吗?