支持跨项目服务账号

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

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

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

启用跨项目服务账号使用功能

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

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

    转到“组织政策”

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

    如需了解详情,请参阅允许跨项目关联服务账号

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

授予服务账号身份验证权限

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

  1. 向包含触发器的 Google Cloud 项目的 Eventarc 服务代理授予 Service Account Token Creator (roles/iam.serviceAccountTokenCreator) IAM 角色。这使服务代理能够管理服务账号的跨项目访问权限。服务代理是特定项目的给定 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:拥有服务账号的项目的 Google Cloud 项目 ID
    • 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:拥有服务账号的项目的 Google Cloud 项目 ID
    • 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. 使用跨项目服务账号创建触发器

后续步骤