使用 Google 云中的服务帐户通过 Terraform 管理核心基础设施

Managing core infrastructure with terraform using service account in Google Cloud

我正在使用 Terraform v0.13.5.1 并希望管理核心基础设施,例如创建文件夹、文件夹上的 IAM 角色、组织策略、创建项目、创建服务帐户等。

问题: 我们无法在组织级别或文件夹级别创建服务帐户,那么如何使用服务帐户管理此基础设施?

谢谢

如您所说,无法在组织级别创建服务帐户。所以解决方案是,第一次创建一个项目并在该项目下创建一个服务帐户,以便 Terraform 从那时起使用。

您可以通过GCP控制台或gcloud命令行进行上述操作。或者甚至您可以使用 Terraform 执行此初始 运行 并以普通用户身份而不是服务帐户进行身份验证(即 运行 Terraform 与您的用户,前提是您有权创建项目、服务帐户并设置 org/folder 级政策等)。

可以为服务帐户赋予组织或文件夹级别的角色,即使它只是项目的一部分。为了拥有创建文件夹、组织策略、创建服务帐户等的权限,您可以通过引用 https://cloud.google.com/iam/docs/understanding-roles

向该服务帐户授予所需的权限

例如

  • 用于创建文件夹和管理 IAM 策略 - roles/resourcemanager.folderAdmin
  • 对于组织政策 - roles/orgpolicy.policyAdmin
  • 用于创建项目 - roles/resourcemanager.projectCreator 等..

服务帐户是为项目创建并由项目拥有的。您可以在任何项目中创建一个服务帐户,然后在任何 project/folder/organization 中使用该服务帐户,包括您不拥有或管理的项目。例如,如果我知道电子邮件地址,我可以将您的服务帐户添加到我的项目中。

创建服务帐户后,您可以在组织和文件夹级别将该服务帐户添加到 IAM,并分配适当的角色,例如文件夹管理员、组织管理员、项目创建者等。尝试使用最低权限作为这些权限在子级别继承:(Org->Folder(s)->Project(s)) or (Folder->Project(s)).

创建服务帐户并分配正确的角色后,您可以将 Terraform 配置为使用该服务帐户,或者将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为指向服务帐户 JSON 文件或通过在您的 *.tf 文件中指定 google 提供商 credentials