【发布时间】:2021-01-26 17:03:23
【问题描述】:
我在 GCP 中的一个组织下有多个项目。我有一个服务帐户,在一个项目上设置了特定范围(用于自动化)。我想将相同的服务帐户作为成员添加到所有其他项目,我手动完成直到现在。
有什么方法可以自动执行此操作,例如每当创建项目时,都应将服务帐户及其范围添加为其成员?
【问题讨论】:
标签: google-cloud-platform automation google-iam terraform-provider-gcp
我在 GCP 中的一个组织下有多个项目。我有一个服务帐户,在一个项目上设置了特定范围(用于自动化)。我想将相同的服务帐户作为成员添加到所有其他项目,我手动完成直到现在。
有什么方法可以自动执行此操作,例如每当创建项目时,都应将服务帐户及其范围添加为其成员?
【问题讨论】:
标签: google-cloud-platform automation google-iam terraform-provider-gcp
如果您使用 Terraform 创建项目,想法将保持不变。就像在 GCP 中创建项目一样,它背后有一个等效的 gcloud 命令和一个 REST API。 gcloud 命令具体为gcloud projects add-iam-policy-binding:
gcloud projects add-iam-policy-binding example-project-id-1 \
--member='serviceAccount:test123@example.domain.com' \
--role='roles/editor'
Here's 可以使用的 Terraform 示例:
resource "google_project_iam_binding" "project" {
project = "your-project-id"
role = "roles/editor"
members = [
"serviceAccount:test123@example.domain.com",
]
}
main.tf 文件或任何您想调用
Terraform 配置文件。test123@example.domain.com 替换为您的服务帐户,
roles/editor 和你想给它的角色和
your-project-id 与您的项目 ID。terraform apply Terraform 配置文件在同一目录中
在。我认为您甚至可以为此使用 Ansible。或者,如果您真的想创建一个 Bash 脚本。
【讨论】:
这是资源层次结构的目的。创建服务帐号(在项目中,服务帐号只能存在于项目中),然后在组织或文件夹级别授予;有你想要的权限
但请注意,所有子资源的权限都是相同的,并且您无法拒绝这些权限(至少目前是这样!)。见IAM Policy Inheritance
【讨论】: