設定服務帳戶

如要使用 Infrastructure Manager 建立、更新或刪除部署作業,您必須使用服務帳戶。Infra Manager 會以這個服務帳戶的身分執行 Terraform。

您不需要服務帳戶,就能查看 Infra Manager 部署作業的相關資訊。

本頁說明如何設定服務帳戶,以便使用 Infrastructure Manager 部署資源。

事前準備

  1. 啟用 Infra Manager 服務。
  2. 建立服務帳戶,或找出要與 Infra Manager 搭配使用的現有服務帳戶。

將存取權授予服務帳戶

如要使用 Infrastructure Manager 建立、更新或刪除部署作業,個別使用者必須有權存取服務帳戶。

將服務帳戶的服務帳戶使用者 (roles/iam.serviceAccountUser) 身分與存取權管理角色授予使用者。

授予 Infra Manager 權限

如要使用 Infra Manager,服務帳戶須具備 Infra Manager 代理程式 (roles/config.agent) 角色。取得這個角色的使用者可以建立、更新及刪除資源:

   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 的 Cloud 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 服務的專案不同,則需要其他權限。

如要授予這些額外權限,請按照下列步驟操作:

  1. 確認服務帳戶在執行 Infra Manager 的專案中,具備「Infra Manager 代理程式 (roles/config.agent) 角色」。如需授予權限的操作說明,請參閱「授予 Infra Manager 權限」。

  2. 選用:如果您使用 Developer Connect 部署 Terraform 設定,請將 roles/iam.serviceAccountTokenCreator 角色授予服務帳戶。

  3. 在擁有服務帳戶的專案中,請確保系統不會強制執行iam.disableCrossProjectServiceAccountUsage機構政策限制。這項限制預設為強制執行。

    如要停用這項組織政策限制,請執行下列指令:

       gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage
           --project=SERVICE_ACCOUNT_PROJECT_ID
    

    SERVICE_ACCOUNT_PROJECT_ID 替換為包含服務帳戶的專案 ID。

  4. 在服務帳戶所屬專案中,將 roles/iam.serviceAccountUser 角色授予您要建立部署作業的專案 Infra Manager 服務代理人:

    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
  5. 在您要建立部署作業的專案中,將服務帳戶權杖建立者 (roles/iam.serviceAccountTokenCreator) 角色授予 Cloud Build 服務代理。如要允許 Infra Manager 使用 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"
    

後續步驟