更新日期:2026-07-15
适用范围:允许 AI 编程 Agent 创建分支、提交代码、触发 CI 或提出合并请求的团队。本文不把“Agent 能通过测试”视为“变更可以直接进入生产”。
结论:把 Agent 当作低权限协作者,而不是自动化管理员
AI 编程 Agent 可以缩短样板代码、测试补全和文档维护的时间,但它同时把提示词、依赖、代码托管令牌、CI 密钥和部署权限连到同一条供应链。安全上线的目标不是让 Agent 永不犯错,而是让它的每次高影响操作都具备:可追溯输入、最小权限、独立验证和可执行回滚。
OWASP 对 CI/CD 风险的项目强调了凭据暴露、依赖与流水线配置等攻击面;可参考 OWASP Top 10 CI/CD Security Risks。对 Agent 而言,提示注入或仓库内恶意文本也应视作不可信输入:它可以提供事实,不能自行获得写入、发布或扩大权限的授权。
四道合闸比一次“自动通过”更可靠
| 阶段 | 必须产生的证据 | 失败时的动作 |
|---|---|---|
| 计划 | 任务范围、受影响目录、禁止触碰项 | 超出范围即停止 |
| 变更 | 清晰 diff、依赖变动、测试命令 | 仅创建分支/PR |
| 验证 | 单测、静态检查、秘密扫描、人工审阅 | 阻断合并 |
| 发布 | 版本号、审批记录、回滚点、监控阈值 | 自动或人工回退 |
Agent 不应持有可直接推送主分支或生产部署的长期 token。将它限制在临时分支、短期凭据和明确的 repository scope 中;CI 使用独立身份验证发布,并按环境拆分权限。
最小权限的可检查配置
- 默认令牌只读;只有创建 PR 的工作流获得最小的
pull-requests: write或等价权限。 - 生产部署密钥不暴露给来自 fork、外部贡献或非受保护分支的 workflow。
- 将依赖安装、构建、测试与部署分成不同 job;部署 job 要求受保护环境审批。
- 固定第三方 action/依赖的版本或不可变提交,记录升级原因与校验结果。
- 在日志中遮蔽 token、连接串和用户数据;对 Agent 的工具输出做同样处理。
不要因为 Agent 生成的代码“看起来合理”就跳过 diff 审阅。尤其是权限、网络请求、序列化、shell 调用和 CI 配置改动,应要求人工确认。
可复现的 PR 证据包
每个 Agent PR 至少附带以下内容,缺一项则不得自动合并:
- 任务原始目标与允许修改范围
- git diff --stat 和关键文件 diff
- 运行过的测试命令、版本、退出码
- 未执行测试及原因
- 新增依赖、网络访问、权限变化
- 回滚方式:revert 提交、feature flag 或上一制品版本
测试环境应与生产隔离,不使用生产 token、真实客户数据或可写的生产资源。对代码生成任务,可在临时仓库运行最小测试;对基础设施变更,应先使用 dry-run、计划文件或沙箱账号。将结果作为 PR 附件,而不是让 Agent 在对话中口头声明“已测试”。
回滚演练不能等故障发生才设计
发布前定义触发器,例如错误率、权限拒绝量、队列积压、异常费用或安全告警超过阈值。每个触发器要有负责人和动作:暂停 workflow、撤销短期凭据、关闭 feature flag、回滚制品、保全日志。至少按季度做一次从报警到回滚的演练,并记录平均恢复时间和遗漏步骤。
中转与工具调用的边界
如果 Agent 还会调用模型或外部工具,top-api.cc 这类接入层应把模型 API 密钥与代码托管凭据分开管理;记录调用来源、租户、模型路由和预算,而不把可复用密钥写入提示词或构建日志。将模型调用失败、超预算和异常工具权限当作合闸条件的一部分。
限制
本文提供的是工程检查框架,不能替代组织的代码所有者规则、合规要求、渗透测试或事故响应流程。不同 CI 平台的权限名称和保护机制不同,应以所用平台的官方文档与实际配置为准。
参考资料
把依赖和工作流文件当作高风险变更
Agent 修改 package-lock、容器基础镜像、GitHub Actions workflow、部署脚本或权限清单时,审阅门槛应高于普通业务代码。PR 描述要列出新增下载源、镜像 tag、action 版本、网络出口和所需 secret;若这些信息无法自动提取,就要求 Agent 明确说明“未检查”的部分。对 lockfile 的大面积变化,先确认是工具版本升级、依赖重解还是异常注入。
建议为工作流设置两类测试:一类在无 secret 的隔离环境验证语法和构建;另一类只在受保护分支、受审批环境中验证部署前置条件。任何来自 issue、PR 描述、网页抓取或仓库文档的自然语言都可能影响 Agent 的下一步工具调用,因此将其当作不可信输入,不允许它改变 token scope、关闭检查或直接触发生产发布。
复盘时按“变更发现时间、阻断位置、权限是否足够小、回滚是否完成”四项记录。即使最终没有事故,这些近失事件也能暴露合闸缺口,并为下一次 prompt、代码所有者规则和 CI 策略提供真实改进依据。
指标不是装饰
把 Agent PR 的阻断次数、人工修改比例、回滚次数和权限异常按月统计。若某类任务持续需要人工修正,优先收紧提示范围、补充测试夹具或移除不必要的写权限,而不是提高自动合并比例。
每次策略调整后,选择一条代表性任务重新演练从创建分支、审阅、测试到回滚的完整路径,并保留批准人与实际执行时间。
Leave a Reply