← 中文资源

简体中文版本

策略即代码:可测试、可版本化的护栏

策略即代码把安全与合规规则写成可版本化、可测试的产物,在流水线和准入环节自动执行,而不是停留在 wiki 里。

阅读英文原文

规则也是产物

策略即代码把组织意图变成文件:哪些区域可以存放数据、每个工作负载必须带哪些标签、哪些存储类型不能公开。规则进入仓库后便有了历史、评审和测试。重点不是语法,而是规则能针对真实输入执行并给出确定结论。

什么该写进代码

把客观且可检查的规则编码:命名、必需元数据、加密设置、网络暴露、镜像来源。需要大量背景判断的例外,应留在带有效期的评审流程里。一条需要一整段解释才能适用的规则,通常是设计决策而不是护栏。

先测试再强制

每条策略都需要测试夹具:应当通过的资源和应当失败的资源。没有夹具,一个拼写错误就可能静默放行一切,或者在关键时刻拦住合法发布。先以审计模式上线,统计违规数量,修正策略或工作负载,然后再切换为强制模式。

deny[msg] {
  input.kind == "Deployment"
  not input.metadata.labels.owner
  msg := "Deployment must declare an owner label"
}

执行点

准入控制会在创建时拦截不合规资源。CI 能更早发现问题,但可以被绕过。云原生策略引擎持续评估存量资源,这是发现漂移的唯一方式。成熟的做法是让多个执行点共用同一份规则源,写一次、处处评估。

与人工评审的对比

人工评审依赖评审者的记忆和空闲时间,也不会留下检查记录。策略即代码更快、更一致、可审计,但它同样字面化:写得糟糕的规则会大规模拦住正常工作。把策略当软件对待,为它配测试、负责人和回滚方案,否则护栏本身就会变成故障源。