Kyverno安全水位高风险变更准入治理 - 第1节
1.1 安全基线水位定义
在云原生环境中,安全基线水位是指集群为满足组织合规与风险容忍度而必须达到的最低安全配置标准。它并非“最佳实践”或“理想状态”,而是一条明确的、可度量的最低准入红线——低于此水位的工作负载变更将被拒绝。
| 维度 | 基线水位示例 | 违反后果 |
|---|---|---|
| 容器特权 | privileged: false |
Pod 被拒绝创建 |
| 宿主机命名空间 | 禁止 hostPID / hostNetwork |
变更被拦截 |
| 只读根文件系统 | readOnlyRootFilesystem: true |
审计告警或拒绝 |
| Seccomp 配置 | RuntimeDefault 或 Localhost |
降级至警告 |
基线 ≠ 强化:基线水位只覆盖“必须做”的项,不包含“推荐做”的增强控制。例如禁止特权容器是基线,而强制 AppArmor Profile 则属于强化水位。
1.2 高风险变更概念
高风险变更是指那些一旦通过准入控制进入集群,就极有可能导致权限逃逸、数据泄露或服务中断的配置修改。这类变更通常具有以下特征之一:
- 权限提升:如将
securityContext.capabilities.add设置为ALL,或允许privileged: true。 - 安全机制绕过:如设置
hostPID: true或禁用 Seccomp。 - 敏感挂载:将宿主机
/var/run/docker.sock或/proc挂载到容器内。 - 资源滥用:未设置
resources.limits或resources.requests,导致节点资源被耗尽。
关键认知:高风险变更不一定是“恶意”的——开发人员可能因调试便利而临时提权,但这类变更必须被基线水位拦截或标记。
1.3 Kyverno 在云原生安全中的角色
Kyverno 是专为 Kubernetes 设计的策略引擎,以 Kubernetes 原生方式(CRD + Admission Webhook)实现准入控制。它在安全基线水位管理中的核心角色包括:
- 策略即代码:将安全基线编写为
ClusterPolicy资源,纳入 GitOps 流程。 - 实时准入拦截:在资源创建或更新时,根据基线规则自动拒绝高风险变更。
- 审计与报告:支持
audit模式,在不阻断变更的前提下记录违规。 - 策略分层:可定义“基线水位”与“强化水位”两套策略集,按环境(dev/staging/prod)动态切换。
Kyverno 与 OPA/Gatekeeper 的定位差异:Kyverno 不需要学习 Rego 语言,策略直接使用 YAML 声明式定义,降低安全团队与平台团队的协作门槛。
1.4 Kyverno 策略覆盖模型
Kyverno 通过三种策略动作覆盖安全基线水位:
| 策略动作 | 说明 | 基线水位典型场景 |
|---|---|---|
| validate | 验证资源是否符合规则,不符合则拒绝或审计 | 检查 privileged 是否为 false |
| mutate | 自动修改资源以符合基线要求 | 自动添加 readOnlyRootFilesystem: true |
| generate | 根据基线自动生成补充资源 | 为未指定 Seccomp 的 Pod 生成默认 Profile |
推荐实践:基线水位策略优先使用
validate 模式(拒绝模式),确保高风险变更无法绕过;强化水位策略可使用 audit 模式先行观察。
1.5 基线水位策略示例
以下是一个 Kyverno ClusterPolicy 示例,用于拦截特权容器——这是安全基线水位中最基础的规则之一:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: disallow-privileged-containers
spec:
validationFailureAction: Enforce
rules:
- name: check-privileged
match:
any:
- resources:
kinds:
- Pod
validate:
message: "特权容器已违反安全基线水位,禁止创建。"
pattern:
spec:
containers:
- securityContext:
privileged: false
注意:
validationFailureAction: Enforce 表示拒绝模式;若改为 Audit,则仅记录违规而不阻断——适用于基线水位上线前的灰度验证阶段。