虛擬私有雲網路中內部 HTTP 端點的角色和權限

本文說明如何授予 Identity and Access Management (IAM) 角色和權限,支援使用 Eventarc 將事件從 Google Cloud 路由至虛擬私有雲 (VPC) 網路中的內部 HTTP 端點

  1. 授予主體專案層級的權限,以便叫用 Eventarc API (例如 Eventarc 觸發條件建立者):

    1. Eventarc 管理員角色可讓您完全控管所有 Eventarc 資源,包括在建立觸發程序時指定服務帳戶。
    2. 服務帳戶使用者角色可讓主體模擬及使用服務帳戶。服務帳戶與 Eventarc 觸發程序相關聯,代表觸發程序的 ID。
  2. 將 Eventarc 觸發條件權限授予觸發條件服務帳戶Eventarc 事件接收者角色可讓 Eventarc 觸發條件接收來自事件供應商的事件。如果您是從 Cloud Pub/Sub 傳送直接事件,則不需要授予角色。

  3. 授予 Google 服務代理權限

    1. 如果內部 HTTP 端點的 URI 使用可由 Cloud DNS 解析的服務內部 DNS 名稱,請授予「Cloud DNS 對等互連」角色。
    2. 如要為 Cloud Storage 的直接事件建立觸發條件,請授予 Pub/Sub 發布者角色。
    3. 如果您是在 2021 年 4 月 8 日當天或之前啟用 Cloud Pub/Sub 服務代理,請授予「服務帳戶憑證建立者」角色。

如要進一步瞭解如何授予 IAM 角色,請參閱管理存取權。您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

授予專案層級的權限

如果您是專案建立者,系統會授予您基本擁有者角色 (roles/owner)。根據預設,這個角色包含完全存取大多數Google Cloud 資源所需的權限。否則,管理員必須在適當的資源上,將必要角色授予適當的主體 (也稱為成員)。

舉例來說,主體可以是 Google 帳戶 (用於使用者) 或服務帳戶 (用於應用程式和運算工作負載)。每個主體都有專屬的 ID,通常是電子郵件地址。

  1. Eventarc 管理員角色 (roles/eventarc.admin) 可讓您完整控管所有 Eventarc 資源。

    在專案中授予角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/eventarc.admin

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • PRINCIPAL:觸發條件建立者的 ID,通常具有以下形式:PRINCIPAL_TYPE:ID。例如:user:my-user@example.com。如需可能的 PRINCIPAL_TYPE 值完整清單,請參閱政策繫結參考資料
  2. 服務帳戶使用者角色 (roles/iam.serviceAccountUser) 可讓主體以服務帳戶身分執行作業。

    舉例來說,您需要這個角色,才能將使用者管理的服務帳戶與 Eventarc 觸發條件建立關聯。您也需要這項權限,才能在部署 Cloud Run 服務時,以執行階段服務帳戶的身分執行作業。詳情請參閱服務帳戶模擬

    您可以授予專案角色,允許主體模擬多個服務帳戶,也可以授予服務帳戶角色,允許主體僅模擬特定服務帳戶。

    在專案中授予角色:

    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:包含服務帳戶的專案 ID。 Google Cloud
    • 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 事件接收者角色 (roles/eventarc.eventReceiver) 授予與 Eventarc 觸發條件相關聯的服務帳戶,觸發條件才能接收事件提供者的事件。

    請注意,如果您是直接從 Cloud Pub/Sub 路由事件,則不需要授予 Eventarc 事件接收者角色。

    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 Cloud 服務具有服務代理程式,可讓服務存取您的資源。如果 API 需要服務代理人,Google 會在您啟用及使用 API 後建立服務代理人。

  1. 如果虛擬私有雲網路中內部 HTTP 端點的 URI 使用 Cloud DNS 可解析的服務內部 DNS 名稱,如要透過 DNS 對等互連區域存取目標網路,請在虛擬私有雲主機專案中,將 DNS 對等互連角色 (roles/dns.peer) 授予 Eventarc 服務代理程式:

    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:虛擬私有雲主專案的 Google Cloud 專案 ID。使用共用虛擬私有雲時,您可以將一或多個服務專案附加至主專案,讓多個專案的資源連線至同一個虛擬私有雲網路。

      請注意,視您設定 VPC 網路的方式而定,VPC 主專案也可能是 Eventarc 觸發條件專案。

    • PROJECT_NUMBER:Eventarc 觸發條件專案的 Google Cloud 專案編號。您可以在 Google Cloud 控制台的「歡迎」頁面找到專案編號,也可以執行下列指令:

      gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  2. 如要為 Cloud Storage 的直接事件建立觸發程序,以便將訊息發布至主題,請在專案中授予 Cloud Storage 服務代理 Pub/Sub 發布者角色 (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 服務代理,請將專案的服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator) 授予 Pub/Sub 服務代理,以支援已驗證的 Pub/Sub 推送要求。否則,系統會預設授予這個角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

後續步驟