本文說明如何授予 Identity and Access Management (IAM) 角色和權限,支援使用 Eventarc 將事件從 Google Cloud 路由至虛擬私有雲 (VPC) 網路中的內部 HTTP 端點。
授予主體專案層級的權限,以便叫用 Eventarc API (例如 Eventarc 觸發條件建立者):
- Eventarc 管理員角色可讓您完全控管所有 Eventarc 資源,包括在建立觸發程序時指定服務帳戶。
- 服務帳戶使用者角色可讓主體模擬及使用服務帳戶。服務帳戶與 Eventarc 觸發程序相關聯,代表觸發程序的 ID。
將 Eventarc 觸發條件權限授予觸發條件服務帳戶:Eventarc 事件接收者角色可讓 Eventarc 觸發條件接收來自事件供應商的事件。如果您是從 Cloud Pub/Sub 傳送直接事件,則不需要授予角色。
-
- 如果內部 HTTP 端點的 URI 使用可由 Cloud DNS 解析的服務內部 DNS 名稱,請授予「Cloud DNS 對等互連」角色。
- 如要為 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
替換為您在上一步記下的服務帳戶名稱。
授予服務代理人權限
部分 Google Cloud 服務具有服務代理程式,可讓服務存取您的資源。如果 API 需要服務代理人,Google 會在您啟用及使用 API 後建立服務代理人。
如果虛擬私有雲網路中內部 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)'
如要為 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)'
如果您是在 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
後續步驟
瞭解使用服務帳戶的最佳做法。
瞭解如何說明觸發程序並驗證相關聯的服務帳戶。