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 警告并没有真正缓解当前的措辞。
???? ???? |
![](https://i.stack.imgur.com/udkEq.png) |
但它确实提供了部分答案。 (您需要组织访问权限或拥有组织访问权限的人的支持)。
解决严重的项目 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](https://i.stack.imgur.com/bT8wM.jpg) |
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