Workflows 目标的角色和权限

本文档介绍如何授予 Identity and Access Management (IAM) 角色和权限,以支持使用 Eventarc 将事件从 Google Cloud 和其他来源路由到目标工作流。

  1. 向调用 Eventarc API 的主账号授予项目范围权限(例如,Eventarc 触发器创建者):

    1. Eventarc Admin 角色可让您完全控制所有 Eventarc 资源,包括在创建触发器时为触发器指定服务账号。
    2. Service Account User 角色支持主账号模拟 (impersonate) 和使用服务账号。该服务账号与 Eventarc 触发器相关联,代表触发器的身份。
  2. 向触发器服务账号授予 Eventarc 触发器权限

    1. Eventarc Event Receiver 角色让 Eventarc 触发器可接收来自事件提供程序的事件。如果您要从 Cloud Pub/Sub 路由直接事件,则无需授予该角色。
    2. Workflows Invoker 角色让 Eventarc 触发器可启动工作流执行。
  3. 向 Google 服务代理授予权限

    1. 如果您要为来自 Cloud Storage 的直接事件创建触发器,请授予 Pub/Sub Publisher 角色。
    2. 如果您在 2021 年 4 月 8 日或之前启用了 Cloud Pub/Sub 服务代理,请授予 Service Account Token Creator 角色。

如需详细了解如何授予 IAM 角色,请参阅管理访问权限。您也可以通过自定义角色或其他预定义角色来获取所需的权限。

授予项目范围的权限

如果您是项目创建者,则您会被授予基本 Owner 角色 (roles/owner)。默认情况下,此角色可提供完全访问大多数 Google Cloud 资源所需的权限。否则,必需的角色必须由相应资源的管理员授予适当的主账号(也称为成员)。

例如,主账号可以是 Google 账号(针对最终用户)或服务账号(针对应用和计算工作负载)。每个主账号都有自己的标识符,标识符通常是电子邮件地址。

  1. 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 值的完整列表,请参阅政策绑定参考文档
  2. 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 默认服务账号作为其身份。

我们建议您创建自己的用户管理的服务账号,以便在管理触发器时获得更大的控制力和灵活性。

  1. 创建服务账号并记下其名称:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"

    替换以下内容:

    • SERVICE_ACCOUNT_NAME:服务账号的名称。此名称显示在用于标识服务账号的电子邮件地址中。
    • DESCRIPTION:服务账号的可选说明
    • DISPLAY_NAME:要在 Google Cloud 控制台中显示的服务账号名称
  2. 将项目的 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 替换为您在上一步中记下的服务账号的名称。

  3. 将项目的 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 后创建服务代理。

  1. 如果您要为来自 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)'
  2. 如果您在 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

后续步骤