rule 命令参考见自定义规则。
官方 rulebook 使用
rulebook_version: 2,需要 CC Safety Net 2.3.0 或更高版本。目录
cc-safety-net/rulebooks 仓库为每个 CLI 提供一个 rulebook:
每个 rulebook 都是对可识别误操作的精选覆盖,而非对提供商 API 的完整建模。
aws s3 rm --dryrun、terraform state rm -dry-run、aws ec2 terminate-instances --dry-run 等安全预览仍然允许。每个 rulebook 在仓库中都有一份依据文档,记录每条规则存在的原因、安全预览、有意排除的范围和已知缺口:terraform · aws · gcloud · azure。
安装
优先使用用户范围。terraform 和 aws 会跨项目使用,保护应当跟着你走,而不是跟着某个仓库:
--only 和 --ref 只对仓库来源有意义,因此省略来源时,只要带上其中任一个选项,选中的就是 cc-safety-net/rulebooks。自己写出仓库名依然有效;要安装它发布的全部 rulebook,则必须写出来。
省略 --global 会安装到项目范围。文件落盘在仓库的 .cc-safety-net/ 下,提交后每位队友克隆即得。见团队配置。
也可以按来源的规范形式安装单个 rulebook。rule list 显示的和 rule remove 接受的正是这种形式:
安装做了什么
rule add 获取选定的每个 rulebook,校验其 schema 并运行随附的 fixture,然后把文件落盘(vendor)到你自己的范围内,路径为 rules/<name>/rulebook.json,并报告内容来自哪个提交。此后运行时在每次工具调用时读取这份落盘副本。没有后台拉取,也没有自动更新。
只有在你运行以下命令时,副本才会变化:
--ref v1.0.0 安装的内容始终相同。在你切换 ref 之前,rule update 对它不会有任何改动。
覆盖或移除
要禁用单条规则或替换其阻止原因,可在rule.json 中为该规则添加覆盖。rulebook 文件保持不变,因此 rule update 不会与你的覆盖冲突。语法见 rule.json schema。要整体移除一个 rulebook:
从任意仓库安装
官方仓库没有任何特殊之处。任何在.cc-safety-net/rules/<name>/rulebook.json 下发布 rulebook 的 GitHub 仓库都可以用 rule add owner/repo 安装,团队或供应商可以用同样的方式发布自己的目录。
当 rulebook 不生效时
npx -y cc-safety-net rule list 显示每个活动 rulebook 及其规则数量,npx -y cc-safety-net explain "terraform destroy" 可以追踪某个决策出自哪条规则。如果某个来源显示为未激活,修复步骤见 rulebook 是实时文件。