tas*_*sha 7 service-accounts google-cloud-platform terraform terraform-provider-gcp
这是我用来创建服务帐户并为其绑定角色的 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]
}
Run Code Online (Sandbox Code Playgroud)
上面的代码效果很好......除了它datastore.owner
从之前分配给该角色的项目中的任何其他服务帐户中删除了。我们有一个多个团队使用的单个项目,并且有不同团队管理的服务帐户。我的 terraform 代码只有我们团队的服务帐户,我们最终可能会破坏其他团队的服务帐户。
有没有另一种方法可以在 terraform 中做到这一点?
这当然可以通过 GCP UI 或 gcloud cli 完成,而不会出现任何问题或影响其他 SA。
小智 14
从 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}"
}
Run Code Online (Sandbox Code Playgroud)
示例中的额外更改:使用服务帐户资源email
生成属性删除显式depends_on
. 你并不需要depends_on
,如果你不喜欢这样,你避免错误的配置错误。
Terraform 可以通过使用来自另一个资源的变量来推断依赖关系。查看此处的文档以更好地了解此行为。
这是 Terraform 的常见问题。要么你全力以赴,要么什么也不做。如果你介于两者之间,可能会发生意想不到的事情!
如果你想使用terraform,你必须将现有的导入到tfstate中。这里是 bindind 的文档,当然,您必须在 Terraform 文件中添加所有帐户。如果没有,绑定将被删除,但这一次,您将在tf plan
.
归档时间: |
|
查看次数: |
4821 次 |
最近记录: |