身份验证管理器

身份验证(用于身份验证/授权)管理器是 Airflow 中用于处理用户身份验证和用户授权的组件。它们具有通用的 API,并且是“可插拔的”,这意味着您可以根据安装需要更换身份验证管理器。

../_images/diagram_auth_manager_airflow_architecture.png

Airflow 一次只能配置一个身份验证管理器;这由 [core] 部分中的 auth_manager 选项在 配置文件 中设置。

注意

有关 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

身份验证管理器可以通过实现 get_cli_commands 方法来提供 CLI 命令,这些命令将包含在 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

身份验证管理器可以通过实现 get_api_endpoints 方法来提供 REST API 端点,这些端点将包含在 REST API 参考 中。这些端点可用于管理由身份验证管理器处理的资源,例如用户、组、角色(如果有)。端点仅针对当前配置的身份验证管理器提供。

后续步骤

创建了实现 BaseAuthManager 接口的新身份验证管理器类后,可以通过将 core.auth_manager 配置值设置为身份验证管理器的模块路径,来配置 Airflow 以使用它

[core]
auth_manager = my_company.auth_managers.MyCustomAuthManager

注意

有关 Airflow 配置的更多信息,请参阅 设置配置选项,有关在 Airflow 中管理 Python 模块的更多信息,请参阅 模块管理

此条目对您有帮助吗?