gpt4 book ai didi

google-cloud-platform - 如何在 terraform 中正确创建具有角色的 gcp 服务帐户

转载 作者:行者123 更新时间:2023-12-03 18:20:50 26 4
gpt4 key购买 nike

这是我用来创建服务帐户并将角色绑定(bind)到它的 terraform 代码:

resource "google_service_account" "sa-name" {
account_id = "sa-name"
display_name = "SA"
}

resource "google_project_iam_binding" "firestore_owner_binding" {
role = "roles/datastore.owner"
members = [
"serviceAccount:sa-name@${var.project}.iam.gserviceaccount.com",
]
depends_on = [google_service_account.sa-name]
}

上面的代码效果很好......除了它删除了 datastore.owner来自该角色之前分配到的项目中的任何其他服务帐户。我们有许多团队使用的单个项目,并且有由不同团队管理的服务帐户。我的 terraform 代码只有我们团队的服务帐户,我们最终可能会破坏其他团队的服务帐户。

在 terraform 中还有其他方法可以做到这一点吗?

这当然可以通过 GCP UI 或 gcloud cli 完成,不会出现任何问题或影响其他 SA。

最佳答案

来自 terraform docs , “google_project_iam_binding”是 Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached .这意味着它完全替换了其中给定角色的成员。
要将角色添加到新服务帐户,而不从该角色编辑其他所有人,您应该使用资源“google_project_iam_member”:

resource "google_service_account" "sa-name" {
account_id = "sa-name"
display_name = "SA"
}

resource "google_project_iam_member" "firestore_owner_binding" {
project = <your_gcp_project_id_here>
role = "roles/datastore.owner"
member = "serviceAccount:${google_service_account.sa-name.email}"
}
示例中的额外更改:服务帐户资源的使用 email生成的属性以删除显式 depends_on .您不需要 depends_on如果你这样做,你可以避免错误配置的错误。
Terraform 可以通过使用来自另一个资源的变量来推断依赖关系。查看 the docs here更好地理解这种行为。

关于google-cloud-platform - 如何在 terraform 中正确创建具有角色的 gcp 服务帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61003081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com