排障与安全50 条

剧本仓库的访问控制

剧本仓库的访问控制应按生产操作权限来设计:私有可见、主干受保护、变更需评审、提交前拦截凭据,流水线部署凭据按环境最小化并定期轮换,同时保留完整的仓库操作审计记录。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‌​‌‌‌‌​​‌​‌‌​​​‌​​‌‌​‌‌‌‌​‌‌​‌‌‌‌​‌‌​‌​‌‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌‌​​​​​‌‌​‌‌‌‌​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌​​​​‌​‌‌​​​‌‌​‌‌​​​‌‌​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌​‌‌​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

剧本仓库等于生产环境的操作权限

剧本仓库里放的是「对生产做什么」的指令,能改仓库的人实质上就握有对生产环境的操作能力,因此它的访问控制标准应接近代码仓库与发布系统的上限,而不能按普通文档库对待。要点集中在三处:谁能读、谁能合入、以及仓库里绝不允许出现的敏感内容。前两者靠可见性与分支保护约束,后者靠提交前检查与扫描拦在门外。

基本信息

适用对象剧本与自动化代码所在的版本库及其集成的流水线
核心控制点可见性、分支保护、合入审批、提交检查、集成凭据范围
禁止内容口令、私钥、令牌与真实环境密钥文件
审计要求保留谁在何时改动哪个剧本的记录
权限要求仓库管理权限应按角色授予,避免人人可改

访问控制要点

  • 仓库私有化:即使不含明文凭据,剧本本身也暴露网络拓扑与账号命名规律
  • 保护主干:禁止直接推送,所有变更经合并请求并经至少一人评审
  • 指定评审责任人:按目录约定审批人,避免无人负责的自动合入
  • 提交前拦截:用钩子与扫描检查是否夹带私钥、令牌与真实密钥文件
  • 集成凭据最小化:流水线用的部署凭据只对需要部署的环境生效,且定期轮换
  • 保留审计记录:仓库操作日志与发布记录一并留存,用于判断某次变更是谁引入的

提交前检查示例

提交前检查示例
git diff --cached --name-only | grep -E '\.(pem|key|p12)$' && echo '疑似凭据文件,禁止提交'  # 文件名粗筛
git diff --cached | grep -nE '(password|secret|token)\s*[:=]' | head  # 内容粗筛
git log --oneline -20                # 复核最近合入记录是否都经过评审
git log --diff-filter=A --name-only --pretty=format: | sort -u | grep -iE 'vault|id_rsa'  # 历史中新增过的可疑文件

角色与权限对照

角色仓库权限典型风险
普通运维只读与提交合并请求无,符合最小权限
剧本维护者可评审与合入合入内容需负责任
流水线账号只读取代码并部署凭据权限过宽会波及全部环境
仓库管理员可改保护规则滥用会绕过所有评审
仓库保护规则要包含「谁能修改保护规则」这一项:如果多数人有权调整分支保护,前面的评审要求都只是建议。规则变更本身也应当是稀有且被记录的事件。
把真实凭据提交进仓库后再删除,历史记录中依然可以取回。正确处置是立即作废并更换该凭据,必要时重写历史;只删文件不换凭据等于什么都没做。

易错点

  • 仓库公开但内容不含口令:剧本暴露拓扑与命令细节,本身已是高价值侦查资料
  • 允许直接推送主干:绕过评审意味着任何人都能向生产推送变更
  • 保护规则可被轻易修改:规则形同虚设,评审要求被随手关闭
  • 流水线凭据覆盖全部环境:一次流水线失守即可影响所有环境,应分环境隔离
  • 提交过凭据只删文件:历史仍在,凭据仍可用,必须立即作废并更换

数据来源与参考

  • Git 官方文档:分支保护与钩子机制
  • OpenSSF 供应链安全指南:仓库与提交安全
  • NIST SP 800-53:配置管理与变更控制

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/playbook-repository-access-control.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‌​‌‌‌‌​​‌​‌‌​​​‌​​‌‌​‌‌‌‌​‌‌​‌‌‌‌​‌‌​‌​‌‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌‌​​​​​‌‌​‌‌‌‌​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌​​​​‌​‌‌​​​‌‌​‌‌​​​‌‌​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌​‌‌​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​