2. OPA基础概念:策略即代码、Rego语言简介、OPA与Kubernetes集成
2.1 策略即代码(Policy as Code)
传统策略管理依赖静态配置文件、人工审批或硬编码逻辑,难以审计、测试和版本控制。策略即代码将安全与合规规则以声明式代码的形式编写、存储和执行,使策略具备与应用程序代码同等的生命周期管理能力。
核心价值:
- 版本化:策略文件可纳入 Git 等版本控制系统,支持变更追溯与回滚。
- 可测试:通过单元测试验证策略逻辑,避免人工误判。
- 自动化执行:策略在请求到达时实时评估,无需人工介入。
- 一致性:同一套策略可跨环境(开发、测试、生产)复用。
OPA(Open Policy Agent)是策略即代码理念的标杆实现,它将策略决策从业务逻辑中解耦,提供统一的策略评估引擎。
2.2 Rego语言简介
Rego 是 OPA 原生的声明式查询语言,专为策略定义和评估设计。Rego 基于 Datalog(逻辑编程语言)扩展,支持复杂的数据结构查询、规则组合和否定推理。
2.2.1 Rego 核心语法
| 概念 | 语法示例 | 说明 |
|---|---|---|
| 规则(Rule) | allow { input.role == "admin" } |
条件为真时规则成立 |
| 默认值 | default allow = false |
未匹配时返回默认值 |
| 迭代(Iteration) | some user; users[user] |
遍历集合或对象 |
| 否定(Negation) | not blocked_users[user] |
检查条件不成立 |
| 聚合(Aggregation) | count(users) > 10 |
内置函数支持计数、求和等 |
2.2.2 完整策略示例
package example.logs
# 默认拒绝所有请求
default allow = false
# 允许管理员读取所有日志
allow {
input.role == "admin"
input.action == "read"
}
# 允许审计员读取非敏感日志
allow {
input.role == "auditor"
input.action == "read"
not input.log.contains("secret")
}
# 拒绝已废弃的组件访问
deny["deprecated_component"] {
input.component == "log-collector-v1"
}
提示:Rego 规则是无副作用的——它只做决策,不修改数据。所有输入通过
input 对象传入,输出通过规则名(如 allow、deny)返回。
2.3 OPA与Kubernetes集成
OPA 通过 Admission Webhook 机制与 Kubernetes 深度集成,在资源创建、更新或删除时拦截请求并执行策略评估。集成架构如下图所示:
2.3.1 集成配置步骤
- 部署 OPA:在 Kubernetes 集群中安装 OPA,通常作为 Deployment 运行,并暴露 HTTPS 服务。
- 配置 ValidatingWebhookConfiguration:定义哪些资源(如 Pod、Service)需要触发策略评估。
- 编写 Rego 策略:将策略文件挂载到 OPA 容器中(通过 ConfigMap 或 Bundle API)。
- 测试验证:创建测试资源确认策略生效。
2.3.2 典型策略场景
| 场景 | 策略目标 | Rego 关键逻辑 |
|---|---|---|
| 镜像来源限制 | 只允许使用私有仓库镜像 | input.spec.containers[_].image 必须以 registry.example.com/ 开头 |
| 资源配额强制 | 所有容器必须设置 CPU/内存限制 | input.spec.containers[_].resources.limits 不能为空 |
| 标签合规 | 必须包含 team 和 env 标签 |
input.metadata.labels.team 和 input.metadata.labels.env 存在 |
| 网络策略绑定 | 所有 Pod 必须关联 NetworkPolicy | 检查 data.networkpolicies 中是否存在匹配的规则 |
注意:OPA 默认采用“白名单”模式——未显式允许的请求将被拒绝。生产环境中务必先配置
default allow = false 并逐步开放权限,避免误拦截。
2.4 本章小结
- 策略即代码将安全规则转化为可版本化、可测试的代码资产。
- Rego 是 OPA 的声明式策略语言,支持规则、迭代、否定和聚合等高级特性。
- OPA + Kubernetes 通过 Admission Webhook 实现资源创建时的实时策略评估,是云原生安全准入控制的标准方案。