每个 Eventarc 触发器在创建时都会与一个 Identity and Access Management (IAM) 服务账号相关联。触发器将该服务账号用作其默认身份。
默认情况下,您无法在一个Google Cloud 项目中创建 IAM 服务账号并将其附加到其他项目中的资源上。但是,您可能已将组织的服务账号集中在不同的项目中,这使得服务账号更易于管理。本文档概述了支持将一个项目中的服务账号关联到另一个项目中的 Eventarc 触发器所需的步骤。
如果您没有执行这些步骤的权限,请让管理员完成这些步骤。
启用跨项目服务账号使用情况
在服务账号项目中完成以下步骤。
- 在 Google Cloud 控制台中,转到组织政策页面。 
- 如果强制执行停用跨项目服务账号使用情况政策,您必须停用该政策。 - 如需了解详情,请参阅允许跨项目关联服务账号。 
- 创建服务账号并记下其名称。 
授予服务账号身份验证权限
主账号可以通过几种不同的方式使用服务账号进行身份验证。每种身份验证类型都要求主账号拥有服务账号的特定 IAM 权限。如需了解详情,请参阅服务账号身份验证角色。
- 向包含触发器的 Google Cloud 项目的 Eventarc 服务代理授予 Service Account Token Creator ( - roles/iam.serviceAccountTokenCreator) IAM 角色。这允许服务代理管理服务账号的跨项目访问权限。服务代理是特定项目的给定 Google Cloud 服务的身份。如需了解详情,请参阅服务代理。- 控制台- 在 Google Cloud 控制台中,打开服务账号页面。 
- 选择拥有关联到 Eventarc 触发器的服务账号的项目。 
- 点击您之前创建的服务账号的电子邮件地址。 
- 点击具有访问权限的主账号标签页。 
- 点击 授予访问权限。 
- 在新的主账号字段中,输入 Eventarc 服务代理的电子邮件地址: - service-EVENTARC_PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com - 将 - EVENTARC_PROJECT_NUMBER替换为包含触发器的项目的Google Cloud 项目编号。
- 点击添加其他角色。 
- 在选择角色列表中,过滤出 Service Account Token Creator,然后选择该角色。 
- 点击保存。 
 - 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编号
 
- 将 Service Account User ( - roles/iam.serviceAccountUser) IAM 角色授予创建触发器的所有主账号,例如包含触发器的 Google Cloud 项目的 Eventarc 服务代理。此预定义角色可提供将服务账号关联到资源所需的- iam.serviceAccounts.actAs权限。- 控制台- 授予项目的角色,以允许主账号模拟多个服务账号: - 在 Google Cloud 控制台中,前往 IAM 页面。 
- 选择拥有服务账号的项目。 
- 点击 授予访问权限。 
- 在新的主账号字段中,输入主账号的电子邮件地址。 
- 在选择角色列表中,过滤出 Service Account User,然后选择该角色。 
- 点击保存。 
 - 或者,授予服务账号的角色,以允许主账号仅模拟特定服务账号: - 在 Google Cloud 控制台中,打开服务账号页面。 
- 选择拥有服务账号的项目。 
- 点击您之前创建的服务账号的电子邮件地址。 
- 点击权限标签页。 
- 在有权访问此服务账号的主账号部分中,点击 授予访问权限。 
- 在新的主账号字段中,输入主账号的电子邮件地址。 
- 点击添加其他角色。 
- 在选择角色列表中,过滤出 Service Account User,然后选择该角色。 
- 点击保存。 
 - 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:email或- domain: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 路由事件。