1. 课程导论:Kyverno 是什么、为什么需要策略评审、准入权限变更风险概述

1.1 Kyverno 是什么

Kyverno 是一个为 Kubernetes 设计的云原生策略引擎,由 Nirmata 开源并已捐献给 CNCF(云原生计算基金会)。它允许平台团队和安全运维人员以声明式的方式定义策略,对 Kubernetes 资源进行验证、生成、变更和清理。

与传统的策略工具(如 OPA/Gatekeeper)不同,Kyverno 使用 Kubernetes 原生的自定义资源定义(CRD)来定义策略,无需学习专用的策略语言(如 Rego)。策略本身就是标准的 Kubernetes 资源,可以通过 kubectl apply 直接部署。

核心能力: Kyverno 支持四种策略动作——Validate(验证)、Mutate(变更)、Generate(生成)和 VerifyImages(镜像签名验证)。其中,Mutate 动作直接涉及对资源请求的修改,是准入权限变更风险的主要来源。

1.2 为什么需要策略评审

在 Kubernetes 集群中,策略引擎拥有极高的权限——它运行在控制平面,能够拦截所有 API 请求,并对资源进行修改或拒绝。如果没有严格的策略评审机制,可能导致以下后果:

  • 配置漂移: 未经审核的策略变更可能意外放宽安全限制,导致 Pod 以特权模式运行或挂载敏感主机路径。
  • 权限滥用: 策略编写者可能无意或有意地创建允许绕过 RBAC 的策略,例如通过 Mutate 动作自动注入 ServiceAccount 或修改 Namespace 标签。
  • 合规失效: 策略变更可能破坏已有的合规基线(如 PCI-DSS、SOC2),导致审计失败。
  • 集群稳定性风险: 错误的策略可能拒绝关键系统组件的创建,或生成大量冗余资源,影响集群正常运行。
最佳实践: 策略评审应作为 CI/CD 流水线的一部分,在策略部署到集群之前进行自动化检查。建议使用 GitOps 工作流管理策略,确保每次变更都有审计记录。

1.3 准入权限变更风险概述

准入权限变更风险是指:当 Kyverno 策略被创建或更新时,策略中的 Mutate 或 Generate 规则可能对集群资源进行非预期的修改,从而改变资源的原始意图或引入安全漏洞。这种风险的核心在于:策略引擎的变更动作发生在资源创建或更新的过程中,且通常对用户透明。

下表列出了常见的准入权限变更风险类型及其影响:

风险类型 描述 典型影响
非预期标签注入 Mutate 策略自动为 Pod 添加标签,可能覆盖用户自定义标签或暴露内部信息 标签冲突、网络策略失效、监控数据混乱
安全上下文篡改 策略修改 Pod 的 securityContext,如添加 privileged: true 或移除 readOnlyRootFilesystem 容器逃逸、权限提升、数据泄露
资源配额绕过 通过 Generate 策略自动创建资源,绕过 Namespace 级别的 ResourceQuota 限制 资源争抢、集群过载、成本失控
网络策略覆盖 Mutate 策略修改 Pod 的 NetworkPolicy 选择器,导致隔离规则失效 横向移动、未授权访问
镜像拉取策略变更 策略将 imagePullPolicy 改为 Always,导致每次部署都拉取镜像 部署延迟、镜像仓库压力、版本不一致

下图展示了 Kyverno 策略在 Kubernetes 准入控制链中的位置,以及变更风险产生的关键环节:

Kyverno 准入控制链与变更风险环节 用户 / 客户端 API Server Kyverno Admission Controller etcd ⚠ 变更风险区域 Mutate / Generate 策略 在此修改资源请求 风险产生流程说明: 1. 用户向 API Server 发送资源创建/更新请求 2. API Server 将请求转发给 Kyverno Admission Controller 进行策略检查 3. Kyverno 执行匹配的 Mutate 策略,对资源进行修改(变更风险发生) 4. 修改后的资源被写入 etcd,用户可能对变更毫不知情

1.4 策略评审的核心目标

本课程将围绕以下三个核心目标展开:

  1. 识别风险: 掌握 Kyverno 策略中可能引入准入权限变更风险的配置模式,包括 Mutate 规则、Generate 规则和 VerifyImages 规则中的潜在陷阱。
  2. 建立评审流程: 学习如何构建结构化的策略评审流程,包括自动化检查清单、人工审核要点和回滚机制。
  3. 实施防护: 通过实际案例和策略模板,掌握如何编写安全的 Kyverno 策略,以及如何使用 Kyverno 自身的策略(策略即代码)来保护策略引擎本身。
重要提示: 本课程假设您已具备 Kubernetes 基础知识(Pod、Deployment、RBAC、Admission Controller)。如果您对 Kubernetes 准入控制机制不熟悉,建议先学习相关基础知识。课程中的所有策略示例均基于 Kyverno 1.12+ 版本。