Cloud Run 目標的角色和權限

本文說明如何授予 Identity and Access Management (IAM) 角色和權限,以支援使用 Eventarc 將 Google Cloud 和其他來源的事件路由至 Cloud Run 服務。

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

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

  3. 將 Cloud Run 服務權限授予觸發程序服務帳戶Cloud Run 叫用者角色可讓 Eventarc 觸發程序呼叫目標 Cloud Run 服務。如果您要將事件轉送至經過驗證的 Cloud Run 服務,就適用這項做法。

  4. 授予 Google 服務代理權限

    1. 如要為 Cloud Storage 的直接事件建立觸發條件,請授予 Pub/Sub 發布者角色。
    2. 如果您是在 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 替換為您在上一步記下的服務帳戶名稱。

授予 Cloud Run 服務權限

根據預設,所有 Cloud Run 服務都會以私密方式部署,也就是說,如果要求中未提供驗證憑證,就無法存取這些服務。如果專案設有網域限定共用組織政策,請使用經過驗證的 Cloud Run 目標服務,而非允許公開 (未經驗證) 存取的服務。

根據預設,只有專案擁有者、專案編輯者、Cloud Run 管理員和 Cloud Run 叫用者可以呼叫 Cloud Run 服務。

  1. 如果將事件路由至已驗證的 Cloud Run 目標服務,請在 Cloud Run 服務上,將 Cloud Run 叫用者角色 (run.invoker) 授予與 Eventarc 觸發條件相關聯的使用者管理服務帳戶:

    gcloud run services add-iam-policy-binding SERVICE_NAME \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/run.invoker

    SERVICE_NAME 替換為 Cloud Run 服務名稱。

  2. 您也可以選擇在 Google Cloud 專案中,將角色授予所有 Cloud Run 服務和工作。詳情請參閱「控管專案中所有服務和作業的存取權」。

請注意,如果您為經過驗證的 Cloud Run 服務建立觸發條件,但未授予 Cloud Run 叫用者角色,系統仍會成功建立並啟用觸發條件。不過,觸發程序不會如預期運作,記錄中會顯示類似下列內容的訊息:

The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.

授予服務代理人權限

部分 Google Cloud 服務具有服務代理程式,可讓服務存取您的資源。如果 API 需要服務代理人,Google 會在您啟用及使用 API 後建立服務代理人。

  1. 如要為 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)'
  2. 如果您是在 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

後續步驟