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