[英]Want to assign multiple Google cloud IAM roles to a service account via terraform
我想通过 terraform 将多个 IAM 角色分配给单个服务帐户。 我准备了一个 TF 文件来执行此操作,但它有一个错误。 使用单个角色可以成功分配,但使用多个 IAM 角色时会出错。
data "google_iam_policy" "auth1" {
binding {
role = "roles/cloudsql.admin"
members = [
"serviceAccount:${google_service_account.service_account_1.email}",
]
role = "roles/secretmanager.secretAccessor"
members = [
"serviceAccount:${google_service_account.service_account_1.email}",
]
role = "roles/datastore.owner"
members = [
"serviceAccount:${google_service_account.service_account_1.email}",
]
role = "roles/storage.admin"
members = [
"serviceAccount:${google_service_account.service_account_1.email}",
]
}
}
如何为单个服务帐户分配多个角色?
根据文档
每个文档配置必须有一个或多个绑定块,每个绑定块都接受以下 arguments: ....
你必须重复绑定,像这样
data "google_iam_policy" "auth1" {
binding {
role = "roles/cloudsql.admin"
members = [
"serviceAccount:${google_service_account.service_account_1.email}",
]
}
binding {
role = "roles/secretmanager.secretAccessor"
members = [
"serviceAccount:${google_service_account.service_account_1.email}",
]
}
binding {
role = "roles/datastore.owner"
members = [
"serviceAccount:${google_service_account.service_account_1.email}",
]
}
binding {
role = "roles/storage.admin"
members = [
"serviceAccount:${google_service_account.service_account_1.email}",
]
}
}
使用 gcloud 命令也是一样的,一次只能在 email 列表中添加 1 个角色。
我做了这样的事情
resource "google_project_iam_member" "member-role" {
for_each = toset([
"roles/cloudsql.admin",
"roles/secretmanager.secretAccessor",
"roles/datastore.owner",
"roles/storage.admin",
])
role = each.key
member = "serviceAccount:${google_service_account.service_account_1.email}"
project = my_project_id
}
我还不能评论或投票,所以这是另一个答案,但@intotecho 是对的。
我想说不要用 Terraform 创建策略,除非你真的知道你在做什么,在 GCP 中。 每个项目只允许一个策略,如果您应用该策略,则只有服务帐户可以访问,没有人。 :) 尽管我们不希望人类做人类的事情,但至少拥有对您拥有的 GCP 项目的查看权限是有帮助的。
特别是如果您使用 model ,那么有多个 Terraform 工作区在项目上执行 iam 操作。 如果您使用政策,它将类似于葡萄酒的酿造方式,这将是一场盛宴! 最近应用的策略将获胜(如果TF 正在使用的服务帐户包含在该策略中,否则它将自己锁定!)
人类有可能从文件夹或组织本身获得继承的查看者角色,但使用google_project_iam_member
分配多个角色是一种更好的方法,以及如何在 GCP 中使用 TF 完成 95% 的权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.