如需使用 Infrastructure Manager 创建、更新或删除部署,您必须使用服务账号。Infra Manager 使用此服务账号的身份执行 Terraform。
您无需服务账号即可查看有关 Infra Manager 部署的信息。
本页面介绍了如何配置服务账号,以便您可以使用 Infrastructure Manager 部署资源。
准备工作
- 启用 Infra Manager 服务。
- 创建服务账号或确定要与 Infra Manager 搭配使用的现有服务账号。
向服务账号授予访问权限
如需使用 Infrastructure 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 授予权限。可选:如果您使用 Developer Connect 部署 Terraform 配置,请向服务账号授予
roles/iam.serviceAccountTokenCreator角色。在具有服务账号的项目中,确保未强制执行
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 部署基础架构。
- 更新部署。
- 查看部署的状态。