GCP - terraform 删除了所有政策,我该如何恢复

2023-12-14

我跟随地形运行。我使用时犯了一个错误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 plan,因为我无法访问自己的存储桶。我收到错误消息,例如<my email> does not have storage.buckets.get access to the Google Cloud Storage bucket., forbidden.

我转到 GCP 控制台并尝试删除或更新此存储桶的权限,但它也不起作用,因为存储桶权限不允许(我拥有所有者和 storage.admin 角色)。

我怎样才能从这种情况中恢复过来?如果这是唯一的选择,我不介意删除存储桶。

EDIT: 我不知道发生了什么,但也许 GCP 有某种方法可以从这种情况中自动恢复。由于某种原因,一段时间后我能够再次从控制台编辑存储桶......


undo, revert, or 回滚, an 被覆盖, changed, or deleted项目 IAM 政策

首先,是的,您基本上可以“恢复”或“撤消”GCP IAM 项目政策更新。我在下面提供方法。但是,这是一个棘手的情况,所以我建议任何人在这里采取谨慎的态度,首先了解发生了什么。

现在,您错误地或认为完全或部分覆盖项目的 IAM 策略就可以了 - 在我看来,这似乎只有通过自动化基础设施即代码 (Iac) 管道配置的意外才有可能 - 即使用 Terraform 或类似的。

这是如何发生的

IaC 工具将使用的底层 GCP API 方法是projects.setIamPolicy。即使 Terraform 也记录了大量警告,并且明确仅将 API 的防护视为 GCP 的责任 - 最终保留了 terraform 固执己见的配置方法any没有细微差别的资源(在我看来,这是一个艰难的主张,与自动化 IaC 的状态和整体能力相悖)。

projects.setIamPolicy有很多记录在案的限制here。除了这些限制之外,IAM 条件不能与所有者等基本角色一起使用。违反这些限制将导致 API 返回 400 错误代码,因此如果您在此资源中遇到错误,请查看这些代码。

不幸的是,世界上大多数人可能会使用不受这些约束约束的服务帐户以自动化方式启用 Terraform 配置,因此,如果 terraform 可以配置任何资源(例如完整的 GCP 项目 IAM 策略),那么这些约束并不重要:

google_project_iam_policy: Authoritative。为项目设置 IAM 策略并替换任何已附加的现有策略。

I think Authoritative只是文档标签。然而,terraform 资源命名约定并不明确,许多工程师可能会假设他们的“简单而狭隘的 IaC 政策更新不会伤害苍蝇。”

大红色 Terraform 警告并没有真正缓解当前的措辞。

???? ????

但它确实提供了部分答案。 (您需要组织访问权限或拥有组织访问权限的人的支持)。

解决严重的项目 IAM 政策错误

1. 重新建立访问权限

Get an organization管理员要么执行后续步骤,要么在项目上重新添加 SR 云工程师,并提供owner在项目中的角色。我不建议向任何项目成员授予组织权限来解决项目问题。

2.审核情况

惊人的云服务:GCP 资产库存这也给你一个伟大的查看资产历史记录的方式

有一个选项卡可以选择 IAM 策略,最上面列出的策略应该是项目的策略IAM POLICY。单击该按钮,然后在右侧面板中选择您想要的CHANGE HISTORY tab.

现在,找到更改(您应该知道原因,但在此视图中找到实际的断点,以便您可以掌握预览元数据/policy-json。

just an example screen, yours will look different which much of a change diff style
enter image description here
3. 复制重大更改之前的 json

即您的项目的先前/稳定状态

4. 复制最新的 IAM 策略 jsonetag

基本上是当前/不良状态的哈希值。

5. 使用 GCP API 进行恢复(确保您有权访问项目中重新创建/重新建立的用户)

首先,将先前/良好状态 json 编辑为适用的格式(您将删除祖先标签和其他一些标签,保留关键模式方面.

# the basic schema you need to preserve with copied json
# paste previous_policy json in new json (local, cloud shell, etc)
------------------------------------------------------------------
{
  "auditConfig":[...]
  "bindings": [...],
  "etag": "..." #<--- copy this from the current bad state,
}

使用 set-iam-policy 命令

## Update the new policy
# know what the command does
gcloud projects set-iam-policy --command 

# fire away
gcloud projects set-iam-policy MyBrokenProjectName previous_policy.json
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GCP - terraform 删除了所有政策,我该如何恢复 的相关文章

随机推荐