GCP-terraform删除了所有策略,我该如何还原

时间:2020-09-16 00:40:30

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

我按照地形跑。我在使用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可以从这种情况中自动恢复。出于某种原因,过了一会儿,我能够再次从控制台编辑存储桶...

2 个答案:

答案 0 :(得分:1)

如果您拥有项目 IAM 管理员或其他使您能够编辑 IAM 权限的角色,您可以在您的 terraform destroy 资源上运行 google_storage_bucket_iam_policy.policy,这应该会将权限恢复为从项目继承的权限IAM 权限。这意味着如果您拥有 Storage Admin 权限,您应该能够再次修改存储桶权限。

答案 1 :(得分:0)

您不能还原所做的更改并恢复对相关存储分区的访问权限。

[google_storage_bucket_iam_policy][1]是权威性的(如@Prashant所述),意味着首先删除该对象的所有策略,然后创建您定义的策略。

如果您的定义中没有适当的访问权限,并且您被锁定,那么唯一的解决方案就是删除存储桶。