本文說明如何授予 Identity and Access Management (IAM) 角色和權限,以便使用 Eventarc 將 Google Cloud 和其他來源的事件路由至 Cloud Run 服務。
授予主體專案層級權限,以便叫用 Eventarc API (例如 Eventarc 觸發條件建立者):
- Eventarc 管理員角色可讓您完整控管所有 Eventarc 資源,包括在建立觸發條件時指定服務帳戶。
- 「服務帳戶使用者」角色可讓主體模擬及使用服務帳戶。服務帳戶與 Eventarc 觸發條件相關聯,代表觸發條件的身分。
將 Eventarc 觸發條件權限授予觸發條件服務帳戶:Eventarc 事件接收者角色可讓 Eventarc 觸發條件接收來自事件供應商的事件。如果您是從 Cloud Pub/Sub 傳送直接事件,則不需要授予角色。
將 Cloud Run 服務權限授予觸發程序服務帳戶:Cloud Run 叫用者角色可讓 Eventarc 觸發程序呼叫目標 Cloud Run 服務。如果您要將事件傳送至經過驗證的 Cloud Run 服務,就必須這麼做。
-
- 如要為 Cloud Storage 的直接事件建立觸發條件,請授予 Pub/Sub 發布者角色。
- 如果您是在 2021 年 4 月 8 日當天或之前啟用 Cloud Pub/Sub 服務代理,請授予「服務帳戶權杖建立者」角色。
如要進一步瞭解如何授予 IAM 角色,請參閱「管理存取權」。您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。
授予專案層級權限
如果您是專案建立者,系統會授予您基本擁有者角色 (roles/owner)。根據預設,這個角色包含的權限,可讓您完整存取大多數Google Cloud 資源。否則,管理員必須在適當資源上,將必要角色授予適當的主體 (也稱為成員)。
舉例來說,主體可以是 Google 帳戶 (適用於一般使用者) 或服務帳戶 (適用於應用程式和運算工作負載)。每個主體都有專屬的 ID,通常是電子郵件地址。
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值完整清單,請參閱政策繫結參考資料。
服務帳戶使用者角色 (
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 CloudSERVICE_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 事件接收者角色 (
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 服務。
如果將事件轉送至已通過驗證的 Cloud Run 目標服務,請將 Cloud Run 服務的 Cloud Run Invoker 角色 (
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 服務名稱。您也可以選擇在 Google Cloud 專案中,對所有 Cloud Run 服務和工作授予角色。詳情請參閱「控管對專案中所有服務和作業的存取權」。
請注意,如果您為經過驗證的 Cloud Run 服務建立觸發條件,但未授予 Cloud Run Invoker 角色,系統仍會成功建立並啟用觸發條件。不過,觸發條件不會如預期運作,記錄中會顯示類似下列內容的訊息:
The request was not authenticated. Either allow unauthenticated
invocations or set the proper Authorization header.
授予服務代理權限
部分 Google Cloud 服務具有服務代理,可讓服務存取您的資源。如果 API 需要服務代理,Google 會在您啟用及使用 API 後建立服務代理。
如果您要為 Cloud Storage 的直接事件建立觸發條件,請將專案的 Pub/Sub 發布者角色 (
roles/pubsub.publisher) 授予 Cloud Storage 服務代理,以便支援將訊息發布至主題: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 控制台的「Welcome」(歡迎)頁面找到專案編號,也可以執行下列指令:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
如果您是在 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
後續步驟
瞭解使用服務帳戶的最佳做法。
瞭解如何說明觸發程序並驗證相關聯的服務帳戶。