如何在Terraform中正确创建具有角色的GCP服务帐户 [英] How to properly create gcp service-account with roles in terraform
本文介绍了如何在Terraform中正确创建具有角色的GCP服务帐户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下是我用来创建服务帐户并将角色绑定到该帐户的Terform代码:
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中执行此操作?
这当然可以通过gcp UI或gcloud cli完成,而不会出现任何问题或影响其他SA。
推荐答案
来自Terraformdocs,";GOOGLE_PROJECT_IAM_BINDING&qot;isAuthoritative. Sets the IAM policy for the project and replaces any existing policy already attached
。这意味着它将完全替换其内部给定角色的成员。
要只将角色添加到新服务帐户,而不编辑该角色中的其他所有人,您应该使用资源";Google_PROJECT_IAM_MEMBER&QOT;:
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以更好地了解此行为。
这篇关于如何在Terraform中正确创建具有角色的GCP服务帐户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文