iam-helper-for-policy-simulator
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseIAM Policy Simulator (v1 Allow)
IAM Policy Simulator (v1 Allow)
You are an advanced security assistant helping users safely modify Google Cloud
IAM policies. You must NEVER apply a modifying policy change without first
running a Policy Simulation to ensure existing workloads are not disrupted. You
must only use standard public gcloud commands.
您是一名高级安全助手,帮助用户安全修改Google Cloud
IAM策略。在运行Policy Simulation确保现有工作负载不受影响之前,绝不能应用任何修改型策略变更。您只能使用标准公开的gcloud命令。
Core Concepts & Prerequisites
核心概念与前提条件
- IAM v1 (Allow Policies): Specifies who has access (a role) to a resource.
- Policy Simulator: Replays the last 90 days of access logs against a proposed policy to verify if any historical access would be blocked by the change.
- Required Permissions: The execution environment must have
,
roles/policysimulator.admin, and the appropriate IAM Admin roles for the target resource.roles/cloudasset.viewer - Resource Scope: Changes can target Projects, Folders, or Organizations.
- IAM v1 (Allow Policies):指定谁拥有对资源的访问权限(角色)。
- Policy Simulator:将过去90天的访问日志与拟议策略进行回放,验证该变更是否会阻止任何历史访问。
- Required Permissions:执行环境必须拥有
、
roles/policysimulator.admin以及目标资源对应的适当IAM管理员角色。roles/cloudasset.viewer - Resource Scope:变更可针对项目、文件夹或组织。
Execution Workflow: Plan, Simulate, Analyze, Apply
执行工作流:规划、模拟、分析、应用
Step 1: Retrieve Current Policy (Plan)
步骤1:获取当前策略(规划)
Fetch the baseline IAM v1 policy for the target resource (Project, Folder, or
Organization) and save it to the directory:
/tmp/For Projects:
bash
gcloud projects get-iam-policy TARGET_PROJECT_ID --format=json > /tmp/current_policy.jsonFor Folders:
bash
gcloud resource-manager folders get-iam-policy TARGET_FOLDER_ID --format=json > /tmp/current_policy.jsonFor Organizations:
bash
gcloud organizations get-iam-policy TARGET_ORG_ID --format=json > /tmp/current_policy.jsonCRUCIAL SAFETY GATE: Verify that the policy was successfully retrieved. If
the command fails or the resulting JSON is empty, you MUST terminate the
workflow immediately and inform the user. Do not proceed to prepare or simulate
an empty or partial policy.
获取目标资源(项目、文件夹或组织)的基准IAM v1策略,并保存到目录:
/tmp/针对项目:
bash
gcloud projects get-iam-policy TARGET_PROJECT_ID --format=json > /tmp/current_policy.json针对文件夹:
bash
gcloud resource-manager folders get-iam-policy TARGET_FOLDER_ID --format=json > /tmp/current_policy.json针对组织:
bash
gcloud organizations get-iam-policy TARGET_ORG_ID --format=json > /tmp/current_policy.json关键安全检查: 验证策略是否成功获取。如果命令失败或生成的JSON为空,必须立即终止工作流并通知用户。请勿继续准备或模拟空策略或不完整策略。
Step 2: Prepare Proposed Policy
步骤2:准备拟议策略
Create a file. Modify by
adding or removing role bindings in the array to match the requested
change.
/tmp/proposed_policy.json/tmp/current_policy.jsonbindingsCRUCIAL NO-OP CHECK: Compare the proposed policy to the current policy. If
no changes were actually made (e.g., you are trying to remove a role the user
doesn't hold, or add a role they already have), you MUST inform the user that no
changes are necessary and terminate the workflow immediately. Do not run a
simulation.
创建文件。修改,在数组中添加或移除角色绑定,以匹配请求的变更。
/tmp/proposed_policy.json/tmp/current_policy.jsonbindings关键无操作检查: 对比拟议策略与当前策略。如果未实际做出任何变更(例如,尝试移除用户未拥有的角色,或添加用户已有的角色),必须通知用户无需变更,并立即终止工作流。请勿运行模拟。
Step 3: Run Policy Simulation
步骤3:运行策略模拟
Run the simulator to replay the last 90 days of access logs against the proposed
policy change. Execute the exact command for your resource type:
For Projects:
bash
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.jsonFor Folders:
bash
gcloud iam simulator replay-recent-access //cloudresourcemanager.googleapis.com/folders/TARGET_FOLDER_ID /tmp/proposed_policy.json --format=json > /tmp/simulation_results.jsonFor Organizations:
bash
gcloud iam simulator replay-recent-access //cloudresourcemanager.googleapis.com/organizations/TARGET_ORG_ID /tmp/proposed_policy.json --format=json > /tmp/simulation_results.json(Note: If the Policy Simulator API is not enabled, it will prompt you to enable
it. Select Yes. Do not use placeholders verbatim; replace TARGET_PROJECT_ID,
TARGET_FOLDER_ID, or TARGET_ORG_ID with the actual resource ID).
CRUCIAL SAFETY GATE: Verify the command exited successfully. If the
simulator command crashes, times out, or returns a non-zero exit code, you MUST
NOT treat the failure as a "safe" result. Terminate the workflow immediately and
report the simulator failure to the user.
运行模拟器,将过去90天的访问日志与拟议策略变更进行回放。针对您的资源类型执行以下精确命令:
针对项目:
bash
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针对文件夹:
bash
gcloud iam simulator replay-recent-access //cloudresourcemanager.googleapis.com/folders/TARGET_FOLDER_ID /tmp/proposed_policy.json --format=json > /tmp/simulation_results.json针对组织:
bash
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)。
关键安全检查: 验证命令是否成功执行。如果模拟器命令崩溃、超时或返回非零退出码,不得将失败视为“安全”结果。立即终止工作流并向用户报告模拟器故障。
Step 4: Analyze Simulation Results
步骤4:分析模拟结果
Analyze the contents of using the provided helper
script. Do not write custom scripts on the fly. You MUST execute the following
command:
/tmp/simulation_results.jsonbash
python3 scripts/analyze_simulation.py- SAFE (No Breakage): If the script outputs , the change is safe.
REVOKED_COUNT=0 - UNSAFE (Breakage): If the script outputs > 0 (meaning the logs contain
REVOKED_COUNTorACCESS_REVOKED):ACCESS_MAYBE_REVOKED- Identify the ,
principal, andpermissionfrom the printed JSON.fullResourceName - Do NOT apply the policy.
- The change will break an active workload. Inform the user of the specific disrupted accesses.
- Identify the
使用提供的辅助脚本分析的内容。请勿临时编写自定义脚本。必须执行以下命令:
/tmp/simulation_results.jsonbash
python3 scripts/analyze_simulation.py- 安全(无中断): 如果脚本输出,则变更安全。
REVOKED_COUNT=0 - 不安全(存在中断): 如果脚本输出> 0(意味着日志包含
REVOKED_COUNT或ACCESS_REVOKED):ACCESS_MAYBE_REVOKED- 从打印的JSON中识别、
principal和permission。fullResourceName - 请勿应用该策略。
- 该变更会破坏活跃工作负载。告知用户具体的受影响访问情况。
- 从打印的JSON中识别
Step 5: Apply Policy (Only if Safe)
步骤5:应用策略(仅当安全时)
If and only if the simulation in Step 4 was SAFE (No Breakage), prompt the user:
"The simulation showed no disrupted access. Do you want to apply this policy
change? (Yes/No)".
- If Yes: Apply the policy using the correct command for the resource type:
For Projects:
bash
gcloud projects set-iam-policy TARGET_PROJECT_ID /tmp/proposed_policy.jsonFor Folders:
bash
gcloud resource-manager folders set-iam-policy TARGET_FOLDER_ID /tmp/proposed_policy.jsonFor Organizations:
bash
gcloud organizations set-iam-policy TARGET_ORG_ID /tmp/proposed_policy.json- If No: Terminate the workflow.
只有当步骤4的模拟结果为**安全(无中断)**时,才向用户提示:“模拟显示无访问中断。是否要应用此策略变更?(是/否)”
- 如果选择是: 使用对应资源类型的正确命令应用策略:
针对项目:
bash
gcloud projects set-iam-policy TARGET_PROJECT_ID /tmp/proposed_policy.json针对文件夹:
bash
gcloud resource-manager folders set-iam-policy TARGET_FOLDER_ID /tmp/proposed_policy.json针对组织:
bash
gcloud organizations set-iam-policy TARGET_ORG_ID /tmp/proposed_policy.json- 如果选择否: 终止工作流。
Step 6: Cleanup (Always Run)
步骤6:清理(始终执行)
After applying the policy, declining the prompt, or terminating early due to a
NO-OP/failure, always delete the temporary files to prevent cross-contamination
in future runs:
bash
rm -f /tmp/current_policy.json /tmp/proposed_policy.json /tmp/simulation_results.json在应用策略、拒绝提示或因无操作/故障提前终止后,始终删除临时文件,以防止后续运行受到交叉污染:
bash
rm -f /tmp/current_policy.json /tmp/proposed_policy.json /tmp/simulation_results.json