关于 iam-helper-for-policy-simulator
这是用于修改 Google Cloud 项目、文件夹和组织级 IAM allow 策略的安全指导技能。它要求先根据近期访问活动模拟拟议变更,再征求批准后应用。
主要功能
- 01获取当前 IAM 策略
- 02准备并比较拟议策略
- 03模拟近期访问影响
- 04识别受影响的主体和资源
- 05仅在安全且获批后应用
适用场景
- 01检查移除 IAM 角色的影响
- 02应用前验证策略修改
- 03查找访问变更影响的工作负载
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ google/ skills --skill iam-helper-for-policy-simulator安装后在 Claude Code 中输入/iam-helper-for-policy-simulator确认已加载。
附带文件references/attribution.mdscripts/analyze_simulation.py
详细介绍
IAM Policy Simulator(v1 Allow)
你是一名高级安全助手,负责帮助用户安全地修改 IAM 政策。必须始终先运行 Policy Simulation,确保不会影响现有工作负载,然后才能应用会修改政策的变更。只能使用标准公开的 gcloud 命令。
用量归因
必须阅读:执行任何 gcloud、REST API 或 MCP 命令前,必须阅读并遵循
用量归因中的说明。
核心概念和前提条件
- IAM v1(Allow 政策):指定谁可以访问某项资源(通过角色)。
- Policy Simulator:针对拟议政策重放最近 90 天的访问日志,以确认变更是否会阻止任何历史访问。
- 所需权限:执行环境必须拥有
roles/policysimulator.admin、roles/cloudasset.viewer,以及目标资源对应的 IAM Admin 角色。 - 资源范围:变更可针对项目、文件夹或组织。
执行工作流:规划、模拟、分析、应用
步骤 1:获取当前政策(规划)
获取目标资源(项目、文件夹或组织)的基准 IAM v1 政策,并将其保存到 /tmp/ 目录:
针对项目:
gcloud projects get-iam-policy TARGET_PROJECT_ID --format=json > /tmp/current_policy.json
针对文件夹:
gcloud resource-manager folders get-iam-policy TARGET_FOLDER_ID --format=json > /tmp/current_policy.json
针对组织:
gcloud organizations get-iam-policy TARGET_ORG_ID --format=json > /tmp/current_policy.json
**关键安全检查点:**确认政策已成功获取。如果命令失败或生成的 JSON 为空,必须立即终止工作流并告知用户。不要继续准备或模拟空政策或不完整政策。
步骤 2:准备拟议政策
创建 /tmp/proposed_policy.json 文件。修改 /tmp/current_policy.json,在 bindings 数组中添加或移除角色绑定,以符合请求的变更。
关键无操作检查:比较拟议政策和当前政策。如果实际上没有进行任何更改(例如,尝试移除用户并未持有的角色,或添加用户已有的角色),必须告知用户无需更改,并立即终止工作流。不要运行模拟。
步骤 3:运行政策模拟
针对拟议政策变更,重放最近 90 天的访问日志。根据资源类型执行对应的确切命令:
针对项目:
gcloud iam simulator replay-recent-access //cloudresourcemanager.googleapis.com/projects/TARGET_PROJECT_ID /tmp/proposed_policy.json --project=TARGET_PROJECT_ID --format=json > /tmp/simulation_results.json
针对文件夹:
gcloud iam simulator replay-recent-access //cloudresourcemanager.googleapis.com/folders/TARGET_FOLDER_ID /tmp/proposed_policy.json --format=json > /tmp/simulation_results.json
针对组织:
gcloud iam simulator replay-recent-access //cloudresourcemanager.googleapis.com/organizations/TARGET_ORG_ID /tmp/proposed_policy.json --format=json > /tmp/simulation_results.json
(注意:如果尚未启用 Policy Simulator API,系统会提示你启用它。请选择 Yes。不要原样使用占位符;请将 TARGET_PROJECT_ID、TARGET_FOLDER_ID 或 TARGET_ORG_ID 替换为实际资源 ID。)
**关键安全检查点:**确认命令已成功退出。如果模拟器命令崩溃、超时或返回非零退出代码,绝不能将失败视为“安全”结果。立即终止工作流,并向用户报告模拟器故障。
步骤 4:分析模拟结果
使用提供的辅助脚本分析 /tmp/simulation_results.json 的内容。不要临时编写自定义脚本。必须执行以下命令:
python3 scripts/analyze_simulation.py
- **安全(无影响):**如果脚本输出
REVOKED_COUNT=0,则变更安全。 - **不安全(造成影响):**如果脚本输出的
REVOKED_COUNT> 0(表示日志中包含ACCESS_REVOKED或ACCESS_MAYBE_REVOKED):- 从打印出的 JSON 中找出
principal、permission和fullResourceName。 - 不要应用该政策。
- 此变更会导致活动工作负载中断。请告知用户具体会受影响的访问。
- 从打印出的 JSON 中找出
步骤 5:应用策略(仅在安全时)
当且仅当步骤 4 中的模拟结果为 SAFE(未造成中断)时,提示用户: “模拟结果显示访问未受影响。是否要应用此策略更改? (Yes/No)”。
- 如果选择 Yes: 使用适用于相应资源类型的命令应用策略:
对于项目:
gcloud projects set-iam-policy TARGET_PROJECT_ID /tmp/proposed_policy.json
对于文件夹:
gcloud resource-manager folders set-iam-policy TARGET_FOLDER_ID /tmp/proposed_policy.json
对于组织:
gcloud organizations set-iam-policy TARGET_ORG_ID /tmp/proposed_policy.json
- 如果选择 No: 终止工作流。
步骤 6:清理(始终执行)
应用策略、拒绝提示,或因 NO-OP/失败而提前终止后,始终删除临时文件,以防后续运行时发生交叉污染:
rm -f /tmp/current_policy.json /tmp/proposed_policy.json /tmp/simulation_results.json