如要使用 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"