Managed Airflow(第 3 代) | Managed Airflow(第 2 代) | Managed Airflow(旧版第 1 代)
本页面介绍了 Airflow 界面和 DAG 界面的不同访问权限控制机制。除了 IAM 提供的访问权限控制之外,您还可以使用这些机制在环境的 Airflow 界面和 DAG 界面中分离用户。
Managed Airflow 中的 Airflow 界面访问权限控制概览
在 Managed Airflow 中,Airflow UI和DAG UI的访问权限以及这些界面中数据和操作的可见性在两个级别受到控制:
Managed Airflow 中的 Airflow 界面和 DAG 界面的访问权限由 IAM 控制。
如果账号没有可以 查看项目中的 Managed Airflow 环境的角色,则 Airflow 界面和 DAG 界面不可用。
IAM 在 Airflow 界面或 DAG 界面中不会提供任何其他精细的权限控制。
Apache Airflow 访问权限控制模型允许根据用户角色降低 Airflow 界面和 DAG 界面中的可见性。
Apache Airflow 访问权限控制是 Airflow 的一项功能,它拥有自己的用户、角色、权限模型,与 IAM 不同。
Apache Airflow 访问权限控制使用基于资源的权限。所有具有特定 Airflow 角色的 Airflow
用户都会获得此角色的权限。例如,具有 can delete on Connections 权限的 Airflow 用户可以在 Airflow 界面中的“连接”页面上删除连接。
您还可以为各个 DAG 分配 DAG 级权限。例如,只有具有特定 Airflow 角色的用户才能在 Airflow 界面中看到某个 DAG。在 Managed Airflow 中,您可以 根据 DAG 文件在环境 存储桶中的子文件夹自动分配 DAG 级权限。
准备工作
具有访问权限控制的 Airflow 界面适用于 Managed Airflow 版本 1.13.4 或更高版本,以及 Airflow 1.10.10 和更高版本。环境还必须运行 Python 3。
按文件夹注册角色功能在 Airflow 2 中的 Managed Airflow 1.18.12 和更高版本中,以及 Airflow 1 中的 Managed Airflow 1.13.4 和更高版本中提供。
启用 Airflow 界面访问权限控制
Airflow 2
具有访问权限控制的 Airflow 界面在 Airflow 2 中始终处于启用状态。
Airflow 1
如需启用具有访问权限控制的 Airflow 界面,请替换以下 Airflow 配置选项:
| 部分 | 键 | 值 |
|---|---|---|
webserver |
rbac |
True |
您可以为现有环境或在创建新环境时执行此操作。
使用这种配置时,您的环境将运行具有访问权限控制的 Airflow 界面,而不是经典版 Airflow 界面。
管理 Airflow 角色和访问权限控制设置
具有管理员角色(或等效角色)的用户可以在 Airflow 界面中查看和修改访问权限控制设置。
在 Airflow 界面中,您可以从安全性 菜单配置访问权限控制设置。如需详细了解 Airflow 访问权限控制 模型、可用权限和默认角色,请参阅 Airflow 界面访问权限控制文档。
Airflow 1 会将用户角色视为所有自定义角色的模板。Airflow 会不断将“用户角色”中的权限复制到所有自定义角色,all_dags 的权限除外。
Airflow 维护自己的用户列表。具有管理员角色(或等效角色)的用户可以查看已打开环境的 Airflow 界面并在 Airflow 中注册的用户列表。此列表还包括管理员手动预注册的用户,如以下部分所述。
在 Airflow 界面中注册用户
当新用户第一次打开 Managed Airflow 环境的 Airflow 界面时,系统会自动注册新用户。
注册时,系统会向用户授予 [webserver]rbac_user_registration_role Airflow
配置选项中指定的角色。您可以通过
使用其他值替换此Airflow 配置选项来控制新注册用户的角色。
如果未指定,则默认注册角色在 Airflow 2 和 3 环境中为 Op。
在提供 Airflow 1.10.* 的环境中,默认注册角色为 Admin。
如需为 Airflow 界面创建基本角色配置,建议执行以下步骤:
Airflow 2
环境管理员打开新创建的环境的 Airflow 界面。
为管理员账号授予
Admin角色。新账号的默认角色为Op。如需分配Admin角色,请运行带有 gcloud CLI 的以下 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 1
环境管理员打开新创建的环境的 Airflow 界面,他们会在界面中自动注册
Admin角色。将以下 Airflow 配置选项替换为新用户所需的角色。例如,替换为
User。部分 键 值 webserverrbac_user_registration_roleUser或其他非管理员角色管理员现在可以为新用户配置 Airflow 界面访问权限控制,包括向其他用户授予
Admin角色。
预注册用户
用户会自动注册由 Google 用户账号的数字 ID(而非 电子邮件地址)作为其用户名。您还可以通过添加用户记录并将用户名字段设置为用户的主邮箱,手动预注册用户并为其分配角色。如果用户的电子邮件地址与 Airflow 界面首次注册的用户记录日志一致,则该用户的用户名将被通过电子邮件地址(在用户首次登录时)识别的当前用户 ID 取代。Google 身份(电子邮件地址)和用户账号(用户 ID)之间的关系 不是固定的。无法预注册 Google 群组。
如需预注册用户,您可以使用 Airflow 界面或通过 Google Cloud CLI 运行 Airflow CLI 命令。
如需通过 Google Cloud CLI 预注册具有自定义角色的用户, 请运行以下 Airflow CLI 命令:
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
users create -- \
-r ROLE \
-e USER_EMAIL \
-u USER_EMAIL \
-f FIRST_NAME \
-l LAST_NAME \
--use-random-password # The password value is required, but is not used
替换以下内容:
ENVIRONMENT_NAME:环境的名称LOCATION:环境所在的区域ROLE:用户的 Airflow 角色,例如OpUSER_EMAIL:用户的电子邮件地址FIRST_NAME和LAST_NAME:用户的名字和姓氏
示例:
gcloud composer environments run example-environment \
--location us-central1 \
users create -- \
-r Op \
-e "example-user@example.com" \
-u "example-user@example.com" \
-f "Name" \
-l "Surname" \
--use-random-password
移除用户
从 Airflow 中删除用户不会撤消该用户的访问权限,因为他们在下次访问 Airflow 界面时会自动进行重新注册。如需
撤消对整个 Airflow 界面的访问权限,请从适用于项目的 允许政策中移除 composer.environments.get
权限。
您还可以将用户的角色更改为公开,这将保留用户注册,但移除 Airflow 界面的所有权限。
自动配置 DAG 级权限
按文件夹注册角色功能会自动为
每个子文件夹创建一个自定义 Airflow 角色,这些子文件夹
直接位于 /dags 文件夹内,并向此角色授予对所有
DAG 的 DAG 级访问权限,这些 DAG 的源文件存储在该相应的子文件夹中。这简化了自定义 Airflow 角色及其对 DAG 的访问权限的管理。
按文件夹注册角色的工作原理
按文件夹注册角色是一种自动配置角色及其 DAG 级权限的方式。因此,它可能会与其他授予 DAG 级权限的 Airflow 机制发生冲突:
为防止此类冲突,启用按文件夹注册角色也会更改这些机制的行为。
在 Airflow 1 中,启用按文件夹注册角色后,系统会停用使用这些机制的可能性。所有 DAG 级权限管理都仅通过按文件夹注册角色进行。
在 Airflow 2 和 3 中:
- 您可以通过 DAG 源代码中定义的
access_control属性 向角色授予 DAG 访问权限。 - 手动授予 DAG 权限(通过 Airflow 界面或 gcloud CLI)可能会导致冲突。例如,如果您 手动向按文件夹角色授予 DAG 级权限,则这些 权限可能会被移除或覆盖,当 DAG 处理器 同步 DAG 时。我们建议不要手动授予 DAG 权限。
- 角色具有通过按文件夹
注册角色注册的 DAG 访问权限和在
access_control属性中 定义的 DAG 访问权限的并集。
直接位于顶级 /dags 文件夹中的 DAG 不会自动分配给任何按文件夹角色。任何按文件夹角色都无法访问它们。其他角色(例如管理员、Op、用户或任何被授予权限的自定义角色)可以通过 Airflow 界面和 DAG 界面访问它们。
如果您将 DAG 上传到名称与内置 Airflow 角色和 Managed Airflow 创建的角色匹配的子文件夹,则对这些子文件夹中的
DAG 的权限仍会分配给这些角色。例如,将 DAG 上传到 /dags/Admin 文件夹会向管理员角色授予对此 DAG
的权限。内置 Airflow 角色包括管理员、Op、用户、Viewer 和公开。
启用按文件夹注册角色功能后,Managed
Airflow 会创建 UserNoDags。
Airflow 在 Airflow 调度器中处理 DAG 时执行按文件夹注册角色。如果您的环境中有超过 100 个 DAG,您可能会发现 DAG 解析时间有所增加。如果是这种情况,我们建议您为 Airflow 1 环境增加 [scheduler]max_threads 参数,或为 Airflow 2 和 3 增加 [scheduler]parsing_processes 参数。
自动将 DAG 分配给按文件夹角色
如需自动将 DAG 分配给按文件夹角色,请执行以下操作:
替换以下 Airflow 配置选项:
部分 键 值 webserverrbac_autoregister_per_folder_rolesTrue将新用户注册角色更改为无权访问任何 DAG 的角色。 这样,在新用户获得管理员为其账号分配的具有特定 DAG 权限的角色之前,他们无法访问任何 DAG。
UserNoDags 和 NoDags 是仅在启用按文件夹注册角色功能时由 Managed Airflow 创建的角色。它们与用户角色等效,但无权访问任何 DAG。UserNoDags 角色在 Airflow 2 和 3 中创建,NoDags 角色在 Airflow 1 中创建。
在 Airflow 2 和 3 中,替换以下 Airflow 配置选项:
部分 键 值 webserverrbac_user_registration_roleUserNoDags在 Airflow 1 中,替换以下 Airflow 配置 选项:
部分 键 值 webserverrbac_user_registration_roleNoDags确保用户已在 Airflow 中注册。
使用以下方法之一为用户分配角色:
- 让 Airflow 根据 DAG 子文件夹自动创建角色,然后将用户分配给这些角色。
- 为 DAG 子文件夹预先创建空角色,角色名称与子文件夹的名称匹配,然后将用户分配给这些角色。例如,
对于
/dags/CustomFolder文件夹,创建一个名为CustomFolder的角色。
将 DAG 上传到名称与分配给用户的角色匹配的子文件夹。 这些子文件夹必须位于环境存储桶中的
/dags文件夹内。Airflow 会向此类子文件夹中的 DAG 添加权限,以便只有具有相应角色的用户才能通过 Airflow 界面和 DAG 界面访问它们。
手动配置 DAG 级权限
您可以为自定义角色配置 DAG 级权限,以 指定哪个用户组可以看见哪些 DAG。
如需在 Airflow 界面中配置 DAG 级权限,请执行以下操作:
- 管理员创建用于对 DAG 进行分组的空角色。
- 管理员将用户分配给适当的角色。
- 管理员或用户将 DAG 分配给角色。
- 在 Airflow 界面中,用户只能看到分配给其群组的 DAG。
DAG 可以通过 DAG 属性或 Airflow 界面分配给角色。
在 Airflow 界面中将 DAG 分配给角色
管理员可以将所需的 DAG 级权限分配给 Airflow 界面中的相应角色。
DAG 界面不支持此操作。
将 DAG 分配给 DAG 属性中的角色
您可以在 DAG 上设置
access_control DAG 参数,指定
DAG 分配给的 DAG 分组角色。
Airflow 2
dag = DAG(
access_control={
'DagGroup': {'can_edit', 'can_read'},
},
...
)
Airflow 1
dag = DAG(
access_control={
'DagGroup': {'can_dag_edit', 'can_dag_read'},
},
...
)
将 Airflow 界面中的审核日志映射到用户
Airflow 界面中的审核日志会映射到 Google 用户账号的数字 ID。例如,如果用户暂停 DAG,则系统会将一个条目添加到日志中。
Airflow 2
在 Airflow 2 中,您可以在 Airflow 界面的浏览 > 审核日志 页面上查看审核日志。
Airflow 1
在 Airflow 1 中,您可以在 浏览 > 日志 页面上查看审核日志。
典型条目会在所有者 字段中列出数字 ID:accounts.google.com:NUMERIC_ID。您可以在
安全性 > 列出用户 页面上将数字 ID 映射到用户电子邮件地址。此页面适用于具有 Admin 角色的用户。
请注意, Google 身份(电子邮件地址)和用户账号(用户 ID) 之间的关系不是固定的。