Kerberos

Airflow 已初步支持 Kerberos。这意味着 Airflow 能够为自身续订 Kerberos 票据并将其存储在票据缓存中。Hook 和 DAG 可以利用该票据对 Kerberized 服务进行身份验证。

限制

请注意,目前并非所有 Hook 均已调整以使用此功能。此外,它尚未将 Kerberos 集成到 Web 界面中,您仍需依赖网络层安全来确保服务的安全。

Celery 集成尚未经过尝试和测试。不过,如果为每台主机生成 keytab 并在每个 worker 旁启动票据续订器,通常可以工作。

启用 Kerberos

Airflow

要启用 Kerberos,您需要生成一个(服务)keytab。

# 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

如果要使用冒充(impersonation),需要在 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 Hook 已更新以利用 Kerberos 认证。要让您的 DAG 使用它,只需按例如以下方式更新连接详情:

{ "use_beeline": true, "principal": "hive/_HOST@EXAMPLE.COM"}

根据您的设置调整 principal。_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 extras 组来安装 Airflow。

pip install 'apache-airflow[kerberos]'

您可以在 Kerberos 认证的工作节点 中阅读有关 Kerberos 部署的一些生产细节。

此条目是否有帮助?