如要使用 Infrastructure Manager 建立、更新或刪除部署作業,您必須使用服務帳戶。Infra Manager 會以這個服務帳戶的身分執行 Terraform。
您不需要服務帳戶,即可查看 Infra Manager 部署作業相關資訊。
本頁面說明如何設定服務帳戶,以便您透過 Infrastructure Manager 部署資源。
事前準備
- 啟用 Infra Manager 服務。
- 建立服務帳戶或找出要與 Infra Manager 搭配使用的現有服務帳戶。
將存取權授予服務帳戶
如要使用 Infrastructure Manager 建立、更新或刪除部署作業,個別使用者必須具備服務帳戶存取權。
將服務帳戶的 服務帳戶使用者 (roles/iam.serviceAccountUser) IAM 角色授予使用者。
授予 Infra Manager 權限
如要使用 Infra Manager,服務帳戶必須具備 Infra Manager 代理人 (roles/config.agent) 角色。這樣一來,Infra Manager 就會獲得建立、更新和刪除資源的權限:
   gcloud projects add-iam-policy-binding INFRA_MANAGER_PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
      --role="roles/config.agent"
取代:
- INFRA_MANAGER_PROJECT_ID:您要建立部署作業的專案 ID。 
- SERVICE_ACCOUNT_EMAIL:服務帳戶的電子郵件地址。 
如要進一步瞭解如何授予服務帳戶權限,請參閱「管理服務帳戶的存取權」。
授予儲存空間值區的讀取權限
您可以使用儲存空間值區,儲存 Infra Manager 部署的 Terraform 設定。
如果您使用儲存空間值區來設定,且這個儲存空間值區位於執行 Infra Manager 的專案以外,則您必須確保用來呼叫 Infra Manager 的服務帳戶具有該值區的讀取權限。如要進一步瞭解 Cloud Storage 權限,請參閱「Cloud Storage 的 IAM 權限」。
如果儲存體值區與 Infra Manager 位於同一個專案中,且您已將 roles/config.agent 授予服務帳戶,則系統已啟用對該值區的讀取權限。
如要進一步瞭解如何將設定上傳至儲存體值區,請參閱「上傳 Terraform 設定」。
授予設定中定義資源的權限
如要建立及管理 Terraform 設定中定義的 Google Cloud 資源,服務帳戶需要這些資源的專屬權限。
- 您要部署的 Terraform 設定中定義的 Google Cloud 資源專屬權限。舉例來說,建立 Compute Engine VM 執行個體的權限為 - compute.instances.create。
- 您要更新的部署作業在 Terraform 設定中定義的 Google Cloud 資源專屬權限。 - 舉例來說,假設您的部署作業會佈建 Compute Engine VM,然後您使用不含 Compute Engine VM 的設定更新部署作業。在這種情況下,當您更新修訂版本時,服務帳戶需要: - 新設定中定義的資源權限。 
- 要刪除的資源權限,例如本例中的 Compute Engine VM。 
 
如要瞭解如何在 Terraform 設定中找出資源所需的權限,請參閱「選擇預先定義的角色」。
如要進一步瞭解如何授予服務帳戶權限,請參閱「管理服務帳戶的存取權」。
跨多個專案授予存取權
如果指定的服務帳戶位於不同的專案中,而該專案與執行 Infra Manager 服務的專案不同,就需要其他權限。
如要授予這些額外權限,請按照下列步驟操作:
- 請確認服務帳戶在執行 Infra Manager 的專案中具備 Infra Manager 代理人 ( - roles/config.agent) 角色。如需授予權限的操作說明,請參閱「授予 Infra Manager 權限」。
- 在含有服務帳戶的專案中,請確認系統不會強制執行 - iam.disableCrossProjectServiceAccountUsage機構政策限制。這項限制會在預設情況下強制執行。- 如要停用這項機構政策限制,請執行: - gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage --project=SERVICE_ACCOUNT_PROJECT_ID- 將 SERVICE_ACCOUNT_PROJECT_ID 替換為包含服務帳戶的專案 ID。 
- 在含有服務帳戶的專案中,為您要建立部署作業的專案的 Infra Manager 服務代理人授予 - roles/iam.serviceAccountUser角色:- gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member="serviceAccount:service-INFRA_MANAGER_PROJECT_NUMBER@gcp-sa-config.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"- 取代: - SERVICE_ACCOUNT_PROJECT_ID:包含服務帳戶的專案 ID。
- INFRA_MANAGER_PROJECT_NUMBER:您要建立部署作業的專案編號。這會形成服務代理的電子郵件 ID:
service-INFRA_MANAGER_PROJECT_NUMBER@gcp-sa-config.iam.gserviceaccount.com
 
- 在您建立部署作業的專案中,將「Service Account Token Creator ( - roles/iam.serviceAccountTokenCreator)」角色授予 Cloud Build 服務代理。如要讓基礎架構管理工具使用 Cloud Build 執行 Terraform,專案中含有服務帳戶的 Cloud Build 服務代理需要額外權限,才能跨專案設定:- gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member="serviceAccount:service-INFRA_MANAGER_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountTokenCreator"