繁体   English   中英

想要通过 terraform 将多个 Google 云 IAM 角色分配给服务帐户

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM