每个 Eventarc 触发器在创建时都会与一个 Identity and Access Management (IAM) 服务帐号相关联。触发器将该服务账号用作其默认身份。
默认情况下,您无法在一个 Google Cloud 项目中创建 IAM 服务帐号并将其关联到另一个项目中的资源。但是,您可能已将组织的服务账号集中在不同的项目中,这使得服务账号更易于管理。本文档概述了将一个项目中的服务帐号关联到另一个项目中的 Eventarc 触发器所需的步骤。
如果您没有执行这些步骤的权限,请让管理员完成这些步骤。
启用跨项目服务帐号使用情况
在服务帐号项目中完成以下步骤。
在 Google Cloud 控制台中,前往 组织政策 页面。
如果强制执行停用跨项目服务账号使用情况 政策,您必须将其停用。
如需了解详情,请参阅 启用跨项目关联的服务账号。
创建服务账号并记下其名称。
授予服务帐号身份验证的权限
主账号可以通过几种不同的方式使用服务账号进行身份验证。 每种身份验证类型都要求主账号拥有服务帐号的特定 IAM 权限。如需了解详情,请参阅 服务帐号身份验证角色。
向包含触发器的项目的 Eventarc 服务代理授予 Service Account Token Creator (
roles/iam.serviceAccountTokenCreator) IAM 角色。 Google Cloud 这允许服务代理管理服务帐号的跨项目访问权限。服务代理是 特定项目的给定 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:拥有服务帐号的项目的项目 ID Google CloudEVENTARC_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:拥有服务帐号的项目的项目 ID Google CloudPRINCIPAL:触发器创建者的标识符,格式为user|group|serviceAccount:email或domain:domain。例如:user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain: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 项目 IDSERVICE_ACCOUNT_NAME是服务帐号的名称
授予支持事件路由的权限
在创建 Eventarc 触发器之前,您必须授予其他 IAM 权限,以支持使用 Eventarc 路由事件。
根据 Eventarc 触发器必须访问哪些资源才能完成其工作,以及事件提供方和目标,授予适当的权限。如需了解详情,请参阅所有角色和权限。