VPC 网络中内部 HTTP 端点的角色和权限

本文档介绍如何授予 Identity and Access Management (IAM) 角色和权限,以支持使用 Eventarc 将事件从 Google Cloud 路由到 Virtual Private Cloud (VPC) 网络中的内部 HTTP 端点

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

    1. Eventarc Admin 角色可让您完全控制所有 Eventarc 资源,包括在创建触发器时为触发器指定服务账号。
    2. Service Account User 角色支持主账号模拟 (impersonate) 和使用服务账号。该服务账号与 Eventarc 触发器相关联,代表触发器的身份。
  2. 向触发器服务账号授予 Eventarc 触发器权限Eventarc Event Receiver 角色可让您的 Eventarc 触发器接收来自事件提供方的事件。如果您要从 Cloud Pub/Sub 路由直接事件,则无需授予该角色。

  3. 向 Google 服务代理授予权限

    1. 如果内部 HTTP 端点的 URI 使用可由 Cloud DNS 解析的服务的内部 DNS 名称,请授予 Cloud DNS Peer 角色。
    2. 如果您要为来自 Cloud Storage 的直接事件创建触发器,请授予 Pub/Sub Publisher 角色。
    3. 如果您在 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 触发器相关联。您也需要此角色才能在部署 Cloud Run 服务时充当运行时服务账号。如需了解详情,请参阅服务账号模拟

    您可以授予项目的角色,以允许主账号模拟 (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 替换为您在上一步中记下的服务账号的名称。

向 Google 服务代理授予权限

某些 Google Cloud 服务具有 Google 管理的服务账号,可允许服务访问您的资源。这些服务账号称为“服务代理”。如果 API 需要服务代理,则 Google 会在您激活并使用 API 后创建服务代理。

  1. 如果 VPC 网络中的内部 HTTP 端点的 URI 使用可由 Cloud DNS 解析的服务的内部 DNS 名称,为了使用 DNS 对等互连区域访问目标网络,请向 VPC 服务代理授予 VPC 宿主项目的 DNS Peer 角色 (roles/dns.peer):

    gcloud projects add-iam-policy-binding VPC_HOST_PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com \
        --role=roles/dns.peer

    替换以下内容:

    • VPC_HOST_PROJECT_ID:VPC 宿主项目的 Google Cloud 项目 ID。使用共享 VPC 时,您可以将一个或多个服务项目关联到宿主项目,从而允许多个项目中的资源连接到一个公用 VPC 网络。

      请注意,VPC 宿主项目也可以是 Eventarc 触发器项目,具体取决于您配置 VPC 网络的方式。

    • PROJECT_NUMBER:Eventarc 触发器项目的 Google Cloud 项目编号。您可以在 Google Cloud 控制台的欢迎页面上或者通过运行以下命令找到项目编号:

      gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  2. 如果您要为来自 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)'
  3. 如果您在 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

后续步骤