如需使用 Infrastructure Manager 创建、更新或删除部署,您必须使用服务账号。Infra Manager 使用此服务账号的身份执行 Terraform。
您无需服务账号即可查看 Infra Manager 部署的相关信息。
本页介绍了如何配置服务账号,以便您可以使用 Infrastructure Manager 部署资源。
准备工作
- 启用 Infra Manager 服务。
- 创建服务账号或指定要与 Infra Manager 搭配使用的现有服务账号。
向服务账号授予访问权限
如需使用基础架构管理器创建、更新或删除部署,个人用户需要有权访问服务账号。
向用户授予服务账号的 Service Account User (roles/iam.serviceAccountUser) IAM 角色。
为 Infra Manager 授予权限
如需使用 Infra Manager,服务账号需要拥有 Infra Manager Agent (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 虚拟机实例的权限为 - compute.instances.create。
- 对您要更新的部署的 Terraform 配置中定义的资源的特定权限。 Google Cloud - 例如,假设您的部署预配了 Compute Engine 虚拟机,然后您使用不包含 Compute Engine 虚拟机的配置更新了部署。在这种情况下,当您更新修订版时,服务账号需要: - 对新配置中定义的资源的权限。 
- 要删除的资源的权限,例如本例中的 Compute Engine 虚拟机。 
 
如需有关确定 Terraform 配置中资源所需权限的帮助,请参阅选择预定义角色。
如需详细了解如何向服务账号授予权限,请参阅管理对服务账号的访问权限。
跨多个项目授予访问权限
如果给定服务账号所在的项目不同于运行 Infra Manager 服务的项目,则需要额外的权限。
如需授予这些额外权限,请执行以下操作:
- 确保该服务账号在运行 Infra Manager 的项目中具有 Infra Manager Agent ( - 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
 
- 向您要创建部署的项目中的 Cloud Build 服务代理授予 Service Account Token Creator ( - roles/iam.serviceAccountTokenCreator) 角色。如需允许 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"
后续步骤
- 了解 IAM。
- 详细了解如何将 Terraform 与 Google Cloud搭配使用。
- 使用 Infra Manager 部署基础架构。
- 更新部署。
- 查看部署的状态。