仅计划的 CI 与策略门控
昂贵的 AgentCore 错误在计划中可见:会被替换的 memory(所有对话丢失)、会被替换的 gateway(每个客户端的新 URL)、授予全部权限的角色。Pull request 是阻止它们的最便宜的地方,而计划是应该检查的正确产物——它展示了实际会发生什么。
${CLAUDE_SKILL_DIR} 由技能运行时设置为此技能自身的目录。在下文所有命令中直接使用它;同级技能的脚本位于 ${CLAUDE_SKILL_DIR}/../<skill>/scripts/。
流程
-
计划工作流(只读):
python3 ${CLAUDE_SKILL_DIR}/scripts/gen_ci.py <project> --dry-run--tf-root用于要计划的堆栈(默认:能触及 AgentCore 资源的根目录),--role-var用于保存计划角色的 GitHub 变量(默认AWS_PLAN_ROLE_ARN),--region,--terraform。 -
报告 根目录、Terraform 或 Terragrunt、找到的固定版本(如果使用后备方案则报告
CI010)以及角色说明(CI011)。 -
选项: 写入工作流和供应商检查器(免费);先对现有已保存计划运行策略(免费)。使用
AskUserQuestion确认,然后写入。 -
在本地测试门控,对用户生成的计划:
python3 ${CLAUDE_SKILL_DIR}/scripts/policy_check.py agentcore.plan.json仅对已经过人工审核的替换使用
--allow-replace <address>。 -
验证 供应商的运行器能否从仓库根目录工作:
python3 ci/agentcore/run.py review .。
CI0xx 区间
| 编号 | 严重性 | 触发条件 |
|---|---|---|
CI001 | 错误 | 计划删除或替换 memory、gateway、凭据提供者、工作负载身份、Cognito 用户池或 DynamoDB 表 |
CI002 | 错误 | 计划的 IAM 策略允许 * 对 * |
CI003 | 错误 | gateway 计划使用 authorizer_type = "NONE" |
CI004 | 警告 | gateway 计划中未设置 supported_versions |
CI005 | 信息 | 计划没有变更 |
CI006 | 信息 | 计划创建的 AgentCore 资源(计费范围) |
CI010 | 信息 | 仓库中没有 SHA 固定的 Actions;使用后备固定版本 |
CI011 | 信息 | 计划作业的角色必须为只读 |
决策规则
- CI 计划;人类应用。 工作流没有 apply 作业,计划角色不应具有写入权限。
- 允许按地址进行。
--allow-replace指定一个资源;没有“全部允许”。 - 固定 Actions 到 SHA。 重用仓库的固定版本;后备方案是第一个用户的仓库在 2026-10-05 上携带的,并用标签标记。
- 供应商化,而非安装。
ci/agentcore/是纯 Python 3.10+;更新插件意味着重新运行gen_ci.py --force并审查差异。
参考资料
| 问题 | 文件 |
|---|---|
| 工作流步骤详解、角色、Terragrunt | plan-only-ci.md |
| 每个策略规则的原理以及如何允许经过审查的例外 | policy-gates.md |
脚本
| 命令 | 功能 | 退出码 |
|---|---|---|
scripts/gen_ci.py <project> [--tf-root D] [--role-var V] [--dry-run] [--force] [--json] | 生成工作流及 ci/agentcore/ | 0 已写入/已计划,1 无内容,2 参数错误 |
scripts/policy_check.py <plan.json> [--allow-replace ADDR ...] [--json] | 对已保存计划运行 CI0xx 门控 | 0 通过,1 策略错误,2 不是计划 |
完成检查清单
- 工作流已以写入计划的形式展示,并在写入前已确认。
- 工作流没有 apply 步骤,且计划角色被描述为只读。
- 对真实计划运行了
policy_check.py,或者告知用户如何运行。 - 从仓库根目录验证了供应商化的运行器可以工作。