支持跨项目服务账号

每个 Eventarc 触发器在创建时都会与一个 Identity and Access Management (IAM) 服务帐号相关联。触发器将该服务账号用作其默认身份。

默认情况下,您无法在一个 Google Cloud 项目中创建 IAM 服务帐号并将其关联到另一个项目中的资源。但是,您可能已将组织的服务账号集中在不同的项目中,这使得服务账号更易于管理。本文档概述了将一个项目中的服务帐号关联到另一个项目中的 Eventarc 触发器所需的步骤。

如果您没有执行这些步骤的权限,请让管理员完成这些步骤。

启用跨项目服务帐号使用情况

在服务帐号项目中完成以下步骤。

  1. 在 Google Cloud 控制台中,前往 组织政策 页面。

    前往“组织政策”

  2. 如果强制执行停用跨项目服务账号使用情况 政策,您必须将其停用

    如需了解详情,请参阅 启用跨项目关联的服务账号

  3. 创建服务账号并记下其名称。

授予服务帐号身份验证的权限

主账号可以通过几种不同的方式使用服务账号进行身份验证。 每种身份验证类型都要求主账号拥有服务帐号的特定 IAM 权限。如需了解详情,请参阅 服务帐号身份验证角色

  1. 向包含触发器的项目的 Eventarc 服务代理授予 Service Account Token Creator (roles/iam.serviceAccountTokenCreator) IAM 角色。 Google Cloud 这允许服务代理管理服务帐号的跨项目访问权限。服务代理是 特定项目的给定 Google Cloud 服务的身份。 如需了解详情,请参阅 服务代理

    控制台

    1. 在 Google Cloud 控制台中,前往服务账号页面。

      前往“服务账号”

    2. 选择拥有关联到 Eventarc 触发器的服务账号的项目。

    3. 点击您之前创建的服务帐号的电子邮件地址。

    4. 点击具有访问权限的主账号 标签页。

    5. 点击 授予访问权限

    6. 新的主账号 字段中,输入 Eventarc 服务代理的电子邮件地址:

      service-EVENTARC_PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com

      EVENTARC_PROJECT_NUMBER 替换为包含触发器的项目的项目编号。Google Cloud

    7. 点击添加其他角色

    8. 选择角色 列表中,过滤出 Service Account Token Creator ,然后选择该角色。

    9. 点击保存

    gcloud

    运行 gcloud iam service-accounts add-iam-policy-binding 命令:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member='serviceAccount:service-EVENTARC_PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com' \
        --role='roles/iam.serviceAccountTokenCreator'

    替换以下内容:

    • SERVICE_ACCOUNT_NAME:您的服务账号的名称
    • SERVICE_ACCOUNT_PROJECT_ID:拥有服务帐号的项目的项目 ID Google Cloud
    • EVENTARC_PROJECT_NUMBER:包含触发器的项目的 Google Cloud 项目编号
  2. Service Account User (roles/iam.serviceAccountUser) IAM 角色授予创建触发器的所有正文,例如包含触发器的 Google Cloud 项目的 Eventarc 服务代理。此预定义角色包含 iam.serviceAccounts.actAs 权限,将服务帐号关联到资源需要此权限。

    控制台

    授予项目的角色,以允许正文模拟多个服务账号:

    1. 在 Google Cloud 控制台中,前往 IAM 页面。

      前往 IAM

    2. 选择拥有服务账号的项目。

    3. 点击 授予访问权限

    4. 新的主账号 字段中,输入主账号的电子邮件地址。

    5. 选择角色列表中,过滤出 Service Account User,然后选择该角色。

    6. 点击保存

    或者,授予服务帐号的角色,以允许正文仅模拟特定服务帐号:

    1. 在 Google Cloud 控制台中,前往服务账号页面。

      前往“服务账号”

    2. 选择拥有服务账号的项目。

    3. 点击您之前创建的服务帐号的电子邮件地址。

    4. 点击权限标签页。

    5. 有权访问此服务账号的主账号部分中,点击 授予访问权限

    6. 新的主账号 字段中,输入主账号的电子邮件地址。

    7. 点击添加其他角色

    8. 选择角色 列表中,过滤出 Service Account User ,然后选择该角色。

    9. 点击保存

    gcloud

    运行 gcloud projects add-iam-policy-binding 命令并 授予项目的角色,以允许正文模拟 多个服务账号:

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    或者,运行 gcloud iam service-accounts add-iam-policy-binding 命令并授予服务账号的角色,以允许主账号仅模拟特定服务账号:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    替换以下内容:

    • SERVICE_ACCOUNT_PROJECT_ID:拥有服务帐号的项目的项目 ID Google Cloud
    • PRINCIPAL:触发器创建者的标识符,格式为 user|group|serviceAccount:emaildomain:domain。例如:
      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
    • SERVICE_ACCOUNT_RESOURCE_NAME:服务帐号的完整资源名称。例如:

      projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

      其中:

      • SERVICE_ACCOUNT_PROJECT_ID 是拥有服务帐号的 Google Cloud 项目 ID
      • SERVICE_ACCOUNT_NAME 是服务帐号的名称

授予支持事件路由的权限

在创建 Eventarc 触发器之前,您必须授予其他 IAM 权限,以支持使用 Eventarc 路由事件。

  1. 根据 Eventarc 触发器必须访问哪些资源才能完成其工作,以及事件提供方和目标,授予适当的权限。如需了解详情,请参阅所有角色和权限

  2. 使用跨项目服务帐号创建触发器

后续步骤