授權管理器

授權(用於身份驗證/授權)管理器是 Airflow 中處理使用者身份驗證和使用者授權的組件。它們具有通用的 API 並且是「可插拔的」,這意味著您可以根據您的安裝需求更換授權管理器。

../_images/diagram_auth_manager_airflow_architecture.png

Airflow 一次只能配置一個授權管理器;這是通過 auth_manager 選項在 [core] 部分的 設定檔 中設定的。

注意

有關 Airflow 配置的更多資訊,請參閱設定配置選項

如果您想檢查目前設定的授權管理器,您可以使用 airflow config get-value core auth_manager 命令

$ airflow config get-value core auth_manager
airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager

為什麼要使用可插拔的授權管理器?

Airflow 被許多不同的使用者以許多不同的配置方式使用。有些 Airflow 環境可能只有一個使用者使用,有些可能被數千個使用者使用。只有一個(或極少數)使用者的 Airflow 環境不需要與數千個使用者使用的環境相同的使用者管理。

這就是為什麼整個使用者管理(使用者身份驗證和使用者授權)被打包在一個稱為授權管理器的組件中。這樣可以輕鬆地隨插即用適合您特定需求的授權管理器。

預設情況下,Airflow 附帶 Flask AppBuilder (FAB) 授權管理器

注意

切換到不同的授權管理器是一項繁重的操作,應該這樣看待。它將影響環境的使用者。登入和登出體驗很可能會改變並打擾他們,如果沒有事先告知。此外,所有目前的使用者和權限都必須從先前的授權管理器複製到下一個。

編寫您自己的授權管理器

所有 Airflow 授權管理器都實現了一個通用介面,以便它們是可插拔的,並且任何授權管理器都可以存取 Airflow 內的所有功能和整合。此介面在 Airflow 中用於執行所有使用者身份驗證和使用者授權相關操作。

公開介面是 BaseAuthManager。您可以查看程式碼以獲取最詳細和最新的介面,但下面概述了一些重要的重點。

注意

有關 Airflow 公開介面的更多資訊,請參閱 Airflow 的公開介面

您可能想要編寫自訂授權管理器的一些原因包括

  • 不存在適合您特定使用案例的授權管理器,例如用於使用者管理的特定工具或服務。

  • 您想使用利用您首選雲端供應商的身份提供者的授權管理器。

  • 您有一個僅供您或您的組織使用的私有使用者管理工具。

CLI

授權管理器可以提供 CLI 命令,這些命令將通過實現 get_cli_commands 方法包含在 airflow 命令列工具中。這些命令可用於設定所需的資源。命令僅針對目前配置的授權管理器提供。從授權管理器實現 CLI 命令提供的虛擬程式碼範例可以在下面看到

@staticmethod
def get_cli_commands() -> list[CLICommand]:
    sub_commands = [
        ActionCommand(
            name="command_name",
            help="Description of what this specific command does",
            func=lazy_load_command("path.to.python.function.for.command"),
            args=(),
        ),
    ]

    return [
        GroupCommand(
            name="my_cool_auth_manager",
            help="Description of what this group of commands do",
            subcommands=sub_commands,
        ),
    ]

注意

目前,Airflow 命令命名空間沒有嚴格的規則。開發人員可以自行決定為其 CLI 命令使用足夠獨特的名稱,以避免與其他 Airflow 組件發生衝突。

注意

在建立新的授權管理器或更新任何現有的授權管理器時,請務必不要在模組層級匯入或執行任何昂貴的操作/程式碼。授權管理器類別在多個地方匯入,如果它們匯入速度很慢,這將對您的 Airflow 環境的效能產生負面影響,尤其是對於 CLI 命令。

Rest API

授權管理器可以提供 Rest API 端點,這些端點將通過實現 get_api_endpoints 方法包含在 REST API 參考 中。端點可用於管理資源,例如使用者、群組、角色(如果有)由您的授權管理器處理。端點僅針對目前配置的授權管理器提供。

下一步

一旦您建立了一個新的授權管理器類別,實現了 BaseAuthManager 介面,您可以通過將 core.auth_manager 配置值設定為您的授權管理器的模組路徑來配置 Airflow 以使用它

[core]
auth_manager = my_company.auth_managers.MyCustomAuthManager

注意

有關 Airflow 配置的更多資訊,請參閱 設定配置選項,有關在 Airflow 中管理 Python 模組的更多資訊,請參閱 模組管理

這個條目有幫助嗎?