Terraform:如何使用iam_policy而不将自己锁定在外

时间:2018-07-12 08:58:13

标签: google-cloud-platform terraform google-iam

我在使用iam_policy资源类型时遇到问题,而没有被terraform destroy锁定。这适用于资源类型,例如google_storage_bucket_iam_policygoogle_project_iam_policy

此示例适用于google_storage_bucket_iam_policy资源。假设我有一个所有者列表以及terraform用于授予roles/storage.admin角色的服务帐户。

resource "google_storage_bucket" "default" {
  name = "default"
  location = "EU"
}

resource "google_storage_bucket_iam_role"  "owners" {
  bucket = "default"
  binding {
    role = "roles/storage.admin"
    members = [
      "${var.owners}",
      "${var.serviceAccount}"
    ]
  }
}

资源创建的顺序是先存储桶,然后是策略。自然,destroy操作以相反的顺序处理资源-首先执行策略,然后进行存储。但是,删除策略后,该服务帐户没有足够的特权来删除存储桶。

也许可以为所有者使用google_storage_bucket_iam_member资源,但是这种方法看起来并不干净,因为它继承了以前在项目上定义的任何内容,这可能很混乱。

顺便说一句,相同的逻辑在项目级别上适用于资源google_project_iam_policy。预先感谢。

1 个答案:

答案 0 :(得分:1)

您可以创建一个显式依赖项,该依赖项将:

  1. 确保在存储桶之前创建IAM角色
  2. 确保在IAM角色之前销毁存储区

下面是添加了depends_on的示例:

resource "google_storage_bucket" "default" {
  name = "default"
  location = "EU"
  depends_on = ["google_storage_bucket_iam_role.owners"]
}

resource "google_storage_bucket_iam_role"  "owners" {
  bucket = "default"
  binding {
    role = "roles/storage.admin"
    members = [
      "${var.owners}",
      "${var.serviceAccount}"
    ]
  }
}