本文档介绍如何授予 Identity and Access Management (IAM) 角色和权限,以支持使用 Eventarc 将事件从 Google Cloud 和其他来源路由到目标工作流。
向调用 Eventarc API 的主账号授予项目范围权限(例如,Eventarc 触发器创建者):
- Eventarc Admin 角色可让您完全控制所有 Eventarc 资源,包括在创建触发器时为触发器指定服务账号。
- Service Account User 角色支持主账号模拟 (impersonate) 和使用服务账号。该服务账号与 Eventarc 触发器相关联,代表触发器的身份。
-
- Eventarc Event Receiver 角色让 Eventarc 触发器可接收来自事件提供程序的事件。如果您要从 Cloud Pub/Sub 路由直接事件,则无需授予该角色。
- Workflows Invoker 角色让 Eventarc 触发器可启动工作流执行。
-
- 如果您要为来自 Cloud Storage 的直接事件创建触发器,请授予 Pub/Sub Publisher 角色。
- 如果您在 2021 年 4 月 8 日或之前启用了 Cloud Pub/Sub 服务代理,请授予 Service Account Token Creator 角色。
如需详细了解如何授予 IAM 角色,请参阅管理访问权限。您也可以通过自定义角色或其他预定义角色来获取所需的权限。
授予项目范围的权限
如果您是项目创建者,则您会被授予基本 Owner 角色 (roles/owner
)。默认情况下,此角色可提供完全访问大多数 Google Cloud 资源所需的权限。否则,必需的角色必须由相应资源的管理员授予适当的主账号(也称为成员)。
例如,主账号可以是 Google 账号(针对最终用户)或服务账号(针对应用和计算工作负载)。每个主账号都有自己的标识符,标识符通常是电子邮件地址。
Eventarc Admin 角色 (
roles/eventarc.admin
) 可让您完全控制所有 Eventarc 资源。授予对项目的角色:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=roles/eventarc.admin
替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目 ID。PRINCIPAL
:触发器创建者的标识符,通常其格式如下:PRINCIPAL_TYPE:ID
。例如user:my-user@example.com
。如需查看可能的PRINCIPAL_TYPE
值的完整列表,请参阅政策绑定参考文档。
Service Account User 角色 (
roles/iam.serviceAccountUser
) 让主账号能够以服务账号身份运行操作。创建 Eventarc 触发器时或部署工作流时,您需要此角色,以便将用户管理的服务账号与触发器或工作流相关联,并代表其身份。如需了解详情,请参阅服务账号身份验证角色。
您可以授予项目的角色,以允许主账号模拟 (impersonate) 多个服务账号;也可以向服务账号授予角色,以仅允许主账号模拟特定的服务账号。
授予对项目的角色:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=roles/iam.serviceAccountUser
或者,向服务账号授予角色:
gcloud iam service-accounts add-iam-policy-binding \ projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member=PRINCIPAL \ --role=roles/iam.serviceAccountUser
替换以下内容:
SERVICE_ACCOUNT_PROJECT_ID
:包含服务账号的 Google Cloud 项目 ID。SERVICE_ACCOUNT_NAME
:服务账号的名称。
授予 Eventarc 触发器权限
每个 Eventarc 触发器在创建时都会与一个 IAM 服务账号相关联。您可以指定用户管理的服务账号,供触发器作为其默认身份。如果您在创建触发器期间未指定服务账号,则触发器将使用 Compute Engine 默认服务账号作为其身份。
我们建议您创建自己的用户管理的服务账号,以便在管理触发器时获得更大的控制力和灵活性。
创建服务账号并记下其名称:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
替换以下内容:
SERVICE_ACCOUNT_NAME
:服务账号的名称。此名称显示在用于标识服务账号的电子邮件地址中。DESCRIPTION
:服务账号的可选说明DISPLAY_NAME
:要在 Google Cloud 控制台中显示的服务账号名称
将项目的 Eventarc Event Receiver 角色 (
roles/eventarc.eventReceiver
) 授予给与您的 Eventarc 触发器关联的服务账号,以便其可以接收来自事件提供程序的事件。请注意,如果您要从 Cloud Pub/Sub 路由直接事件,则无需授予 Eventarc Event Receiver 角色。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
将
SERVICE_ACCOUNT_NAME
替换为您在上一步中记下的服务账号的名称。将项目的 Workflows Invoker 角色 (
roles/workflows.invoker
) 授予给与您的 Eventarc 触发器关联的服务账号,以便其可以启动工作流执行。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/workflows.invoker
将
SERVICE_ACCOUNT_NAME
替换为您之前记下的服务账号的名称。
向 Google 服务代理授予权限
某些 Google Cloud 服务具有服务代理,让服务可以访问您的资源。如果 API 需要服务代理,则 Google 会在您激活并使用 API 后创建服务代理。
如果您要为来自 Cloud Storage 的直接事件创建触发器,以支持向主题发布消息,请向 Cloud Storage 服务代理授予项目的 Pub/Sub Publisher 角色 (
roles/pubsub.publisher
):gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
将
PROJECT_NUMBER
替换为您的 Google Cloud 项目编号。您可以在 Google Cloud 控制台的欢迎页面上或者通过运行以下命令找到项目编号:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
如果您在 2021 年 4 月 8 日或之前启用了 Cloud Pub/Sub 服务代理,为了支持经过身份验证的 Pub/Sub 推送请求,请向 Pub/Sub 服务代理授予项目的 Service Account Token Creator 角色 (
roles/iam.serviceAccountTokenCreator
)。否则,系统会默认授予此角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
后续步骤
了解使用服务账号的最佳实践。
了解如何描述触发器并验证其关联的服务账号。