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 部署的一些生產方面的資訊