使用 Airflow 界面访问权限控制

Cloud Composer 1 |Cloud Composer 2 |Cloud Composer 3

本页面介绍了 Airflow 界面的各种访问权限控制机制。 和 DAG 界面。除了访问权限控制之外,您还可以使用这些机制 使用 IAM 提供的功能来分隔 您的环境的 Airflow 界面和 DAG 界面。

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

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

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

    如果某个账号没有在您的项目中查看 Cloud Composer 环境的角色,则无法使用 Airflow 界面和 DAG 界面。

    IAM 不会提供任何额外的精细控制 Airflow 界面或 DAG 界面中的权限控制。

  2. 借助 Apache Airflow 访问控制模型,您可以根据用户角色来缩小 Airflow 界面和 DAG 界面的可见范围。

    Apache Airflow 访问控制是 Airflow 的一项功能, 这些模型与自己的用户、角色和权限模型不同, IAM。

Apache Airflow 访问权限控制使用基于资源的权限。所有 Airflow 拥有特定 Airflow 角色的用户将获得此角色的权限。例如: 拥有具有 can delete on Connections 权限的角色的 Airflow 用户 可以在 Airflow 界面的“连接”页面上删除连接。

您还可以 各个 DAG 的 DAG 级权限。例如,您可以通过此功能实现以下目的:只有具有特定 Airflow 角色的用户才能在 Airflow 界面中看到特定 DAG。在 Cloud Composer 中,您可以 自动分配 DAG 级权限; (根据 DAG 文件在环境的 存储桶。

如果您希望通过 员工身份联合,第一个 在 IAM 中授予对您环境的访问权限,如 向外部身份授予 IAM 角色 部分。之后,您可以照常使用 Airflow 界面访问权限控制。 外部身份的 Airflow 用户改为使用其主账号标识符 电子邮件地址,并为其他用户填充不同的值 记录字段比 Google 账号多。

准备工作

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

拥有“管理员”角色(或同等角色)的用户可以查看和修改访问权限控制 Airflow 界面中的设置。

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

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

在 Airflow 界面中注册用户

新用户在打开 Cloud Composer 环境。

注册时,系统会向用户授予 [webserver]rbac_user_registration_role Airflow 配置选项中指定的角色。您可以 通过替换此 具有不同值的 Airflow 配置选项。

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

建议您按照以下步骤创建基本角色配置, Airflow 界面:

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

  2. 为管理员账号授予 Admin 角色。在具有 Airflow 2 的环境中,新账号的默认角色为 Op。要分配 Admin 角色,请运行以下命令 Airflow CLI 命令gcloud 共享:

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

    您需要将其中的:

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

预注册用户

用户会自动注册 Google 用户账号的数字 ID(而非 作为其用户名。您也可以手动预注册用户 然后添加名为“用户名”字段的用户记录,为他们分配角色 用户的主电子邮件地址。如果拥有电子邮件地址的用户 第一次将预注册用户记录登录匹配到 Airflow 界面; 其用户名会替换为当前的 User-ID(此时 )。关系 介于 Google 身份(电子邮件地址)和用户账号(用户 ID) 不是固定的无法预注册 Google 群组。

如需预注册用户,您可以使用 Airflow 界面或运行 Airflow CLI 命令 Google Cloud 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 角色,例如 Op
  • USER_EMAIL:用户的电子邮件地址
  • FIRST_NAMELAST_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。这个 可简化自定义 Airflow 角色及其对 DAG 的访问权限的管理。

文件夹角色注册的工作原理

基于文件夹的角色注册是配置 角色及其 DAG 级权限。因此,它可能会与授予 DAG 级权限的其他 Airflow 机制发生冲突:

为防止此类冲突,启用“按文件夹注册角色”功能还会更改这些机制的行为。

在 Airflow 2 中:

  • 您可以通过 access_control 属性向 DAG 授予角色访问权限 在 DAG 源代码中定义。
  • 通过 Airflow 界面或 gcloud CLI)可能会导致冲突。例如,如果您 手动将 DAG 级权限授予文件夹级角色,这些 执行特定任务时 同步 DAG。建议不要手动授予 DAG 权限。
  • 角色具有通过“按文件夹注册角色”注册并在 DAG 的 access_control 属性中定义的 DAG 访问权限联合。

直接位于顶层 /dags 文件夹中的 DAG 不会被自动分配给 任何文件夹级角色这些文件夹无法以任何文件夹级角色访问。其他 管理员、运维人员、用户等角色或任何已获权限的自定义角色 可以通过 Airflow 界面和 DAG 界面访问它们。

如果您将 DAG 上传到名称与内置 Airflow 角色匹配的子文件夹 Cloud Composer 创建的 DAG 和角色,以及对 但仍会将这些子文件夹分配给这些角色。例如,将 DAG 上传到 /dags/Admin 文件夹会向“管理员”角色授予对此 DAG 的权限。Airflow 内置角色包括“管理员”“操作员”“用户”“查看者”和“公开”。Cloud Composer 会在每个文件夹之后创建 NoDag 和 UserNoDag 角色注册功能已启用。

Airflow 在 Airflow 调度器中处理 DAG 时会执行按文件夹的角色注册。如果您的数据库中的 DAG 超过 100 个, 您可能会看到 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 子文件夹创建角色,然后将用户分配给这些角色。
    • 为 DAGs 子文件夹预先创建空角色,角色名称与 子文件夹的名称,然后将用户分配给这些角色。例如,为 /dags/CustomFolder 文件夹创建一个名为 CustomFolder 的角色。
  5. 将 DAG 上传到其名称与分配给用户的角色匹配的子文件夹。 这些子文件夹必须位于/dags 环境的存储桶中。在这种配置中,Airflow 会添加 子文件夹,这样只有拥有相应角色的用户才能访问它们 通过 Airflow 界面和 DAG 界面使用这些功能。

手动配置 DAG 级权限

您可以配置 DAG 级权限,可让自定义角色 指定对特定用户群组可见的 DAG。

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

  1. Admin 创建了空角色来对 DAG 进行分组。
  2. 管理员将用户分配到相应的角色。
  3. 管理员或用户为角色分配 DAG。
  4. 在 Airflow 界面中,用户只能看到分配给其所在群组的 DAG。

您可以通过 DAG 属性或 Airflow 界面。

在 Airflow 界面中为角色分配 DAG

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

DAG 界面不支持此操作。

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

您可以在 DAG 上设置 access_control DAG 参数,指定 DAG 将为其分配的 DAG 分组角色。

在早于 2.1.0 的 Airflow 2 版本中,管理员、DAG 开发者或 自动化流程必须运行 sync-perm Airflow 命令 应用新的访问权限控制设置。

在 Airflow 2.1.0 及更高版本中,运行此命令不再 因为调度器在解析 DAG。

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

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

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

您可以在以下位置的浏览 > 审核日志页面中查看审核日志: Airflow 界面

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

典型条目会在所有者字段中列出一个数字 ID: accounts.google.com:NUMERIC_ID。您可以将数字 ID 映射到 安全性 > 列出用户页面。此页面适用于 具有 Admin 角色的用户。

请注意, Google 身份(电子邮件地址)和用户账号(用户 ID) 不是固定的

后续步骤