API 驗證

API 的驗證與 Web 驗證分開處理。預設是檢查使用者工作階段

[api]
auth_backends = airflow.api.auth.backend.session

版本 1.10.11 變更:在 Airflow <1.10.11 中,預設設定是允許所有 API 請求無需驗證,但如果 Webserver 可公開存取,這會造成安全風險。

版本 2.3.0 變更:在 Airflow <2.3.0 中,此設定為 auth_backend 且僅允許一個值。在 2.3.0 中,它已變更為支援依序嘗試多個後端。

如果您想檢查目前設定了哪些驗證後端,您可以使用 airflow config get-value api auth_backends 命令,如下例所示。

$ airflow config get-value api auth_backends
airflow.providers.fab.auth_manager.api.auth.backend.basic_auth

Kerberos 驗證

目前 API 支援 Kerberos 驗證,包括實驗性和穩定版本。

若要啟用 Kerberos 驗證,請在設定中設定以下內容

[api]
auth_backends = airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth

[kerberos]
keytab = <KEYTAB>

airflow Kerberos 服務設定為 airflow/fully.qualified.domainname@REALM。請確保此主体存在於 Kerberos 資料庫和 keytab 檔案中

您必須確保使用 Kerberos 完整使用者名稱/領域來命名您的使用者,才能使其運作。這表示您的使用者名稱應為 user_name@REALM

kinit user_name@REALM
ENDPOINT_URL="https://127.0.0.1:8080/"
curl -X GET  \
    --negotiate \  # enables Negotiate (SPNEGO) authentication
    --service airflow \  # matches the `airflow` service name in the `airflow/fully.qualified.domainname@REALM` principal
    --user : \
    "${ENDPOINT_URL}/api/v1/pools"

注意

請記住,穩定的 API 受驗證和存取控制保護。這表示您的使用者需要具有具備必要關聯權限的角色,否則您將收到 403 回應。

基本驗證

目前 API 支援基本使用者名稱密碼驗證。這適用於透過 LDAP 登入或在 Airflow Metadata DB 中使用密碼建立的使用者。

若要啟用基本驗證,請在設定中設定以下內容

[api]
auth_backends = airflow.providers.fab.auth_manager.api.auth.backend.basic_auth

使用者名稱和密碼需要經過 base64 編碼,並透過 Authorization HTTP 標頭以以下格式傳送

Authorization: Basic Base64(username:password)

以下是您可以使用的範例 curl 命令來驗證設定

ENDPOINT_URL="https://127.0.0.1:8080/"
curl -X GET  \
    --user "username:password" \
    "${ENDPOINT_URL}/api/v1/pools"

請注意,即使 Airflow webserver 可能使用其他驗證方法,您仍然可以啟用此設定以允許透過使用者名稱密碼憑證進行 API 存取。在此設定下,只有透過 LDAP 或 airflow users create 命令建立的使用者才能通過 API 驗證。

自行開發 API 驗證

每個驗證後端都定義為一個新的 Python 模組。它必須有 2 個已定義的方法

  • init_app(app: Flask) - 建立 flask 應用程式時調用的函數,允許您新增一個新的視圖。

  • requires_authentication(fn: Callable) - 一個裝飾器,允許在視圖函數之前、之後或代替視圖函數執行任意程式碼。

並且可能具有以下其中之一,以支援 CLI 的遠端模式 使用的 API 用戶端授權

  • 函數 create_client_session() -> requests.Session

  • 屬性 CLIENT_AUTH: tuple[str, str] | requests.auth.AuthBase | None

在編寫完您的後端模組後,在 [api] 區段的 airflow.cfg 中的 auth_backends 鍵中提供完整模組名稱。

您的驗證後端的其他選項可以在 airflow.cfg 中設定為新選項。

此條目是否有幫助?