使用 Airflow 界面访问权限控制

Cloud Composer 1 | Cloud Composer 2

本页面介绍了 Cloud Composer 中的 Airflow 界面访问权限控制(也称为基于 Airflow 角色的访问权限控制,即 Airflow RBAC)。此功能提供了一种额外的机制,用于在环境的 Airflow 界面和 DAG 界面中区分用户。

Cloud Composer 中的 Airflow 界面访问权限控制概览

Cloud Composer 支持社区版本的 Airflow 界面访问权限控制。此功能可以根据用户角色降低 Airflow 界面DAG 界面中的 DAG 可见性。

Airflow 界面DAG 界面的访问权限,以及在这些界面中数据和操作的可见性,在 Cloud Composer 中的两个级别进行控制:

  1. 对 Cloud Composer 中的 Airflow 界面和 DAG 界面的访问权限由 IAM 控制。

    用户有权访问 Airflow 界面后,IAM 不会在 Airflow 界面或 DAG 界面中提供任何其他精细的权限控件。

  2. Apache Airflow 访问权限控制模型提供了一个额外的层,用于控制 Airflow 界面和 DAG 界面中的各个页面和 DAG 中的可见性和访问权限。

准备工作

通过访问权限控制启用 Airflow 界面

在 Cloud Composer 2 中,带有访问权限控制的 Airflow 界面始终处于启用状态。

管理 Airflow 角色和访问权限控制设置

拥有 Admin 角色(或等效角色)的用户可以在 Airflow 界面中查看和修改访问权限控制设置。

在 Airflow 界面中,您可以从安全性菜单中配置访问权限控制设置。如需详细了解 Airflow 访问权限控制模型、可用权限和默认角色,请参阅 Airflow 界面访问权限控制文档

Airflow 拥有自己的用户列表。拥有管理员角色(或等效角色)的用户可以查看已打开环境的 Airflow 界面并在 Airflow 中注册的用户列表。该列表还包含管理员手动预注册的用户,如下一部分中所述。

在 Airflow 界面中注册用户

新用户会在首次打开 Cloud Composer 环境的 Airflow 界面时自动注册。

注册时,系统会为用户授予 [webserver]rbac_user_registration_role Airflow 配置选项中指定的角色。您可以使用其他值替换此 Airflow 配置选项,以控制新注册用户的角色。

如果未指定,则默认注册角色为使用 Airflow 2 的环境中的 Op

如需为 Airflow 界面创建基本角色配置,建议执行以下步骤:

  1. 环境管理员可打开新创建的环境的 Airflow 界面。

  2. 为管理员帐号授予 Admin 角色。在具有 Airflow 2 的环境中,新帐号的默认角色为 Op。如需分配 Admin 角色,请使用 gcloud 运行以下 Airflow CLI 命令

      gcloud composer environments run ENVIRONMENT_NAME \
        --location LOCATION \
        users add-role -- -e USER_EMAIL -r Admin
    

    替换:

    • ENVIRONMENT_NAME 替换为环境的名称。
    • LOCATION 替换为环境所在的区域。
    • USER_EMAIL 替换为用户帐号的电子邮件地址。
  3. 管理员现在可以为新用户配置访问权限控制,包括向其他用户授予 Admin 角色。

移除用户

从 Airflow 中删除用户并不会撤消该用户的访问权限,因为这些用户会在下次访问 Airflow 界面时自动重新注册。如需撤消对整个 Airflow 界面的访问权限,请从项目的允许政策中移除 composer.environments.get 权限。

您还可以将用户的角色更改为公开,这样会使用户保持注册状态,但移除 Airflow 界面的所有权限。

自动配置 DAG 级权限

按文件夹的角色注册功能会自动在 /dags 文件夹内为每个子文件夹创建一个自定义 Airflow 角色,并将此角色的 DAG 级访问权限授予其源文件存储在相应子文件夹中的所有 DAG。这简化了自定义 Airflow 角色及其对 DAG 的访问。

各文件夹角色注册的运作方式

按文件夹授予的角色注册是一种自动配置角色及其 DAG 级权限的方式。因此,这可能会导致与授予 DAG 级别权限的其他 Airflow 机制发生冲突:

为防止发生此类冲突,启用按文件夹授予的角色注册也会更改这些机制的行为。

在 Airflow 2 中:

  • 您可以通过 DAG 源代码中定义的 access_control 属性向 DAG 授予角色的访问权限。
  • 手动授予 DAG 权限(通过 Airflow 界面或 gcloud CLI)可能会导致冲突。例如,如果您手动根据文件夹授予 DAG 级别的权限,则在 DAG 处理器同步 DAG 时,这些权限可能会被移除或覆盖。我们建议不要手动授予 DAG 权限。
  • 角色拥有通过按文件夹的角色注册注册的 DAG 访问权限,并在该 DAG 的 access_control 属性中定义。

直接位于顶级 /dags 文件夹中的 DAG 不会自动分配给每个文件夹的任何角色。不能通过任何文件夹级角色访问。其他角色(例如 Admin、Op、User 或已被授予权限的自定义角色)可以通过 Airflow 界面和 DAG 界面访问它们。

如果子文件夹的名称与内置 Airflow 角色(Admin、Op、User、Viewer、Public)或 NoDags 和 UserNoDags 角色匹配,则这些子文件夹中的权限仍分配给这些子文件夹中的 DAG。例如,将 DAG 上传到 /dags/Admin 文件夹会将此 DAG 的权限授予 Admin 角色。

Airflow 在 Airflow 调度器中处理 DAG 时,会按文件夹执行角色注册。如果您的环境中有超过 100 个 DAG,您可能会发现 DAG 解析时间有所增加。 如果是这种情况,我们建议您为调度程序使用更多的内存和 CPU。您还可以增加 [scheduler]parsing_processes Airflow 配置选项的值。

按文件夹自动分配 DAG 角色

如需按文件夹自动为各个角色分配 DAG,请执行以下操作:

  1. 替换以下 Airflow 配置选项:

    部分
    webserver rbac_autoregister_per_folder_roles True
  2. 将新用户注册角色更改为无权访问任何 DAG 的角色。这样,在管理员为用户帐号分配了对特定 DAG 具有权限的角色之前,新用户无权访问任何 DAG。

    UserNoDags 是由 Cloud Composer 创建的角色。它相当于用户角色,但无权访问任何 DAG。

    替换以下 Airflow 配置选项:

    部分
    webserver rbac_user_registration_role UserNoDags

  3. 确保用户已在 Airflow 中注册

  4. 使用以下方法之一为用户分配角色:

    • 让 Airflow 根据 DAG 子文件夹自动创建角色,然后为用户分配这些角色。
    • 为 DAG 子文件夹预先创建空角色(角色名称与子文件夹的名称匹配),然后为用户分配这些角色。例如,对于 /dags/CustomFolder 文件夹,请创建一个名为 CustomFolder 的角色。
  5. 将 DAG 上传到子文件夹,名称与分配给用户的角色匹配。这些子文件夹必须位于环境存储分区中的 /dags 文件夹内。Airflow 向此类子文件夹中的 DAG 添加权限,以便只有具有相应角色的用户才能通过 Airflow 界面和 DAG 界面访问这些权限。

手动配置 DAG 级权限

您可以为自定义角色配置 DAG 级权限,以指定特定用户群组可以看到哪些 DAG。

如需在 Airflow 界面中配置 DAG 级权限,请执行以下操作:

  1. 管理员创建空角色,以对 DAG 进行分组。
  2. 管理员为用户分配适当的角色。
  3. 管理员或用户可为角色分配 DAG。
  4. 在 Airflow 界面中,用户只能查看分配给其群组的 DAG。

您可以通过 DAG 属性或通过 Airflow 界面为 DAG 分配角色。

在 Airflow 界面中为 DAG 分配角色

管理员可以将必需的 DAG 级别权限分配给 Airflow 界面中的相应角色。

DAG 界面不支持此操作。

将 DAG 分配给 DAG 属性中的角色

您可以在 DAG 上设置 access_control DAG 参数,指定该 DAG 分配到的 DAG 分组角色:

dag = DAG(
  access_control={
    'DagGroup': {'can_edit', 'can_read'},
  },
  ...
  )

在低于 2.1.0 的 Airflow 版本中,Admin、DAG 开发者或自动化进程必须运行 sync_perm Airflow 命令才能应用新的访问权限控制设置。

在 Airflow 2.1.0 及更高版本中,不再需要此命令,因为调度程序会在解析 DAG 时应用 DAG 级权限。

将 Airflow 界面中的审核日志映射到用户

Airflow 界面中的审核日志映射到 Google 用户帐号的数字 ID。例如,如果用户暂停某个 DAG,则系统会在日志中添加一个条目。

您可以在 Airflow 界面中的浏览>审核日志页面上查看审核日志。

Airflow 2 中“审核日志”页面上的一个条目
图 1:Airflow 2 中的“审核日志”页面上的条目

典型的条目会在 Owner 字段中列出数字 ID:accounts.google.com:NUMERIC_ID。您可以将数字 ID 映射到安全 > 列出用户页面上的用户电子邮件。具有 Admin 角色的用户可以使用此页面。

请注意,Google 身份(电子邮件地址)与用户帐号(用户 ID)之间的关系是固定的。

后续步骤