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)实现准入控制。它在安全基线水位管理中的核心角色包括:

  1. 策略即代码:将安全基线编写为 ClusterPolicy 资源,纳入 GitOps 流程。
  2. 实时准入拦截:在资源创建或更新时,根据基线规则自动拒绝高风险变更。
  3. 审计与报告:支持 audit 模式,在不阻断变更的前提下记录违规。
  4. 策略分层:可定义“基线水位”与“强化水位”两套策略集,按环境(dev/staging/prod)动态切换。
Kyverno 与 OPA/Gatekeeper 的定位差异:Kyverno 不需要学习 Rego 语言,策略直接使用 YAML 声明式定义,降低安全团队与平台团队的协作门槛。
安全基线水位与高风险变更关系 高风险变更 • 特权容器 • hostPID/hostNetwork • 敏感挂载 • 无资源限制 • 禁用 Seccomp • 特权提升 • 不安全 sysctl 基线水位过滤 Kyverno ClusterPolicy 准入 Webhook 匹配 → 验证 → 变异 拒绝 / 审计 安全水位 ✅ 基线水位(必须) ✅ 强化水位(推荐) ✅ 合规水位(行业标准) 变更通过后进入集群 违规记录写入报告 基线水位是高风险变更进入集群前的最后一道强制性准入屏障

1.4 Kyverno 策略覆盖模型

Kyverno 通过三种策略动作覆盖安全基线水位:

策略动作 说明 基线水位典型场景
validate 验证资源是否符合规则,不符合则拒绝或审计 检查 privileged 是否为 false
mutate 自动修改资源以符合基线要求 自动添加 readOnlyRootFilesystem: true
generate 根据基线自动生成补充资源 为未指定 Seccomp 的 Pod 生成默认 Profile
推荐实践:基线水位策略优先使用 validate 模式(拒绝模式),确保高风险变更无法绕过;强化水位策略可使用 audit 模式先行观察。
Kyverno 策略引擎架构 Kubernetes API Server 资源创建/更新请求 Admission Webhook Mutating / Validating Kyverno 策略引擎 ClusterPolicy 匹配与执行 策略存储 基线水位 / 强化水位 准入结果 允许 / 拒绝 / 审计 Kyverno 以 Kubernetes 原生 CRD 方式定义策略,无需额外语言学习成本

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,则仅记录违规而不阻断——适用于基线水位上线前的灰度验证阶段。