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 中的两个级别进行控制:
对 Cloud Composer 中的 Airflow 界面和 DAG 界面的访问权限由 IAM 控制。
用户有权访问 Airflow 界面后,IAM 不会在 Airflow 界面或 DAG 界面中提供任何其他精细的权限控件。
Apache Airflow 访问权限控制模型提供了一个额外的层,用于控制 Airflow 界面和 DAG 界面中的各个页面和 DAG 中的可见性和访问权限。
准备工作
- Cloud Composer 2.0.16 及更高版本提供按文件夹分配的角色。
通过访问权限控制启用 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 界面创建基本角色配置,建议执行以下步骤:
环境管理员可打开新创建的环境的 Airflow 界面。
为管理员帐号授予
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
替换为用户帐号的电子邮件地址。
管理员现在可以为新用户配置访问权限控制,包括向其他用户授予
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,请执行以下操作:
替换以下 Airflow 配置选项:
部分 键 值 webserver
rbac_autoregister_per_folder_roles
True
将新用户注册角色更改为无权访问任何 DAG 的角色。这样,在管理员为用户帐号分配了对特定 DAG 具有权限的角色之前,新用户无权访问任何 DAG。
UserNoDags 是由 Cloud Composer 创建的角色。它相当于用户角色,但无权访问任何 DAG。
替换以下 Airflow 配置选项:
部分 键 值 webserver
rbac_user_registration_role
UserNoDags
确保用户已在 Airflow 中注册。
使用以下方法之一为用户分配角色:
- 让 Airflow 根据 DAG 子文件夹自动创建角色,然后为用户分配这些角色。
- 为 DAG 子文件夹预先创建空角色(角色名称与子文件夹的名称匹配),然后为用户分配这些角色。例如,对于
/dags/CustomFolder
文件夹,请创建一个名为CustomFolder
的角色。
将 DAG 上传到子文件夹,名称与分配给用户的角色匹配。这些子文件夹必须位于环境存储分区中的
/dags
文件夹内。Airflow 向此类子文件夹中的 DAG 添加权限,以便只有具有相应角色的用户才能通过 Airflow 界面和 DAG 界面访问这些权限。
手动配置 DAG 级权限
您可以为自定义角色配置 DAG 级权限,以指定特定用户群组可以看到哪些 DAG。
如需在 Airflow 界面中配置 DAG 级权限,请执行以下操作:
- 管理员创建空角色,以对 DAG 进行分组。
- 管理员为用户分配适当的角色。
- 管理员或用户可为角色分配 DAG。
- 在 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 界面中的浏览>审核日志页面上查看审核日志。

典型的条目会在 Owner 字段中列出数字 ID:accounts.google.com:NUMERIC_ID
。您可以将数字 ID 映射到安全 > 列出用户页面上的用户电子邮件。具有 Admin
角色的用户可以使用此页面。
请注意,Google 身份(电子邮件地址)与用户帐号(用户 ID)之间的关系是固定的。