Kerberos

Airflow 具有對 Kerberos 的初步支援。這表示 Airflow 可以為自己更新 Kerberos 票證,並將其儲存在票證快取中。Hook 和 DAG 可以使用票證向 Kerberos 化服務進行驗證。

限制

請注意,目前並非所有 Hook 都已調整為使用此功能。此外,它沒有將 Kerberos 整合到 Web 介面中,目前您將必須依靠網路層級安全性來確保您的服務保持安全。

Celery 整合尚未嘗試和測試。但是,如果您為每個主機產生一個金鑰表,並在每個 worker 旁邊啟動一個票證更新器,則很可能可以運作。

啟用 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) 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 hook 已更新為利用 Kerberos 驗證。為了讓您的 DAG 可以使用它,只需更新連線詳細資訊,例如

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

根據您的設定調整 principal。 _HOST 部分將被伺服器的完整網域名稱取代。

您可以指定是否要使用 DAG 擁有者作為連線的使用者,還是使用連線的登入部分中指定的使用者。對於登入使用者,請指定以下額外資訊

{ "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 驗證的 worker 中閱讀有關 Kerberos 部署的一些生產方面的資訊

此條目是否有幫助?