我在使用iam_policy
资源类型时遇到问题,而没有被terraform destroy
锁定。这适用于资源类型,例如google_storage_bucket_iam_policy
和google_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
。预先感谢。
答案 0 :(得分:1)
您可以创建一个显式依赖项,该依赖项将:
下面是添加了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}"
]
}
}