我按照地形跑。我在使用google_storage_bucket_iam_policy
而不是google_storage_bucket_iam_binding
时犯了一个错误,因此它没有添加新策略,而是替换了所有现有策略。
data "google_iam_policy" "deploy-script-admin-policy" {
binding {
role = "roles/storage.objectAdmin"
members = [
"serviceAccount:${google_service_account.deploy-script.email}",
]
}
}
# deploy script can read/write to a bucket
resource "google_storage_bucket_iam_policy" "policy" {
bucket = "my-bucket"
policy_data = data.google_iam_policy.deploy-script-admin-policy.policy_data
}
现在我无法运行Terraform计划,因为我无法使用自己的存储桶。我收到类似<my email> does not have storage.buckets.get access to the Google Cloud Storage bucket., forbidden
的错误消息。
我去了GCP控制台,试图删除或更新此存储桶的权限,但是由于存储桶权限不允许它,所以它也不起作用(我拥有所有者和storage.admin角色)。
如何从这种情况中恢复?如果那是唯一的选择,我不介意删除存储分区。
编辑: 我不知道发生了什么,但也许GCP可以从这种情况中自动恢复。出于某种原因,过了一会儿,我能够再次从控制台编辑存储桶...
答案 0 :(得分:1)
如果您拥有项目 IAM 管理员或其他使您能够编辑 IAM 权限的角色,您可以在您的 terraform destroy
资源上运行 google_storage_bucket_iam_policy.policy
,这应该会将权限恢复为从项目继承的权限IAM 权限。这意味着如果您拥有 Storage Admin 权限,您应该能够再次修改存储桶权限。
答案 1 :(得分:0)
您不能还原所做的更改并恢复对相关存储分区的访问权限。
[google_storage_bucket_iam_policy][1]
是权威性的(如@Prashant所述),意味着首先删除该对象的所有策略,然后创建您定义的策略。
如果您的定义中没有适当的访问权限,并且您被锁定,那么唯一的解决方案就是删除存储桶。