认证管理器

认证(用于身份验证/授权)管理器是 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

认证管理器可以通过实现 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 模块的更多信息,请参阅 模块管理

此条目是否有帮助?