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

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 的公開介面。
您可能想要編寫自訂授權管理器的一些原因包括
不存在適合您特定使用案例的授權管理器,例如用於使用者管理的特定工具或服務。
您想使用利用您首選雲端供應商的身份提供者的授權管理器。
您有一個僅供您或您的組織使用的私有使用者管理工具。
建議覆寫以進行最佳化的可選方法¶
以下方法不是覆寫功能性 Airflow 授權管理器所必需的。但是,建議覆寫這些方法以使您的授權管理器更快(並且可能成本更低)
batch_is_authorized_dag
:is_authorized_dag
的批次版本。如果未覆寫,它將為每個項目呼叫is_authorized_dag
。batch_is_authorized_connection
:is_authorized_connection
的批次版本。如果未覆寫,它將為每個項目呼叫is_authorized_connection
。batch_is_authorized_pool
:is_authorized_pool
的批次版本。如果未覆寫,它將為每個項目呼叫is_authorized_pool
。batch_is_authorized_variable
:is_authorized_variable
的批次版本。如果未覆寫,它將為每個項目呼叫is_authorized_variable
。get_permitted_dag_ids
:傳回使用者有權限存取的 DAG ID 列表。如果未覆寫,它將為環境中可用的每個 DAG 呼叫is_authorized_dag
。filter_permitted_menu_items
:傳回使用者有權限存取的選單項目。如果未覆寫,它將為每個選單項目在AirflowSecurityManagerV2
中呼叫has_access
。
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 參考 中。端點可用於管理資源,例如使用者、群組、角色(如果有)由您的授權管理器處理。端點僅針對目前配置的授權管理器提供。