mcpField
I
iam-helper-for-policy-simulator

iam-helper-for-policy-simulator

github.com/google安全21.6k4.0k 次安装今天更新
代码仓库

关于 iam-helper-for-policy-simulator

这是用于修改 Google Cloud 项目、文件夹和组织级 IAM allow 策略的安全指导技能。它要求先根据近期访问活动模拟拟议变更,再征求批准后应用。

主要功能

  1. 01获取当前 IAM 策略
  2. 02准备并比较拟议策略
  3. 03模拟近期访问影响
  4. 04识别受影响的主体和资源
  5. 05仅在安全且获批后应用

适用场景

  1. 01检查移除 IAM 角色的影响
  2. 02应用前验证策略修改
  3. 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。
    • 不要应用该政策。
    • 此变更会导致活动工作负载中断。请告知用户具体会受影响的访问。
步骤 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

评论

支持 Markdown