策略控制器阻断不合规部署吗

wen 网络安全 1

本文目录导读:

策略控制器阻断不合规部署吗

  1. 核心机制:准入控制(Admission Control)
  2. 主流策略控制器及其阻断能力
  3. 具体阻断场景举例
  4. 重要区别:阻断 vs 告警
  5. 使用注意事项

是的,策略控制器(Policy Controller)通常具备阻断不合规部署的能力,但这取决于具体的实现方式和配置。

策略控制器就像一个集群的准入审查员,它会在资源(如Pod、Service等)被创建或更新时,根据你预定义的规则(即“策略”)进行检查,如果发现不符合规则,它可以执行拒绝(阻断)操作,阻止该部署生效。

以下是详细的解释:

核心机制:准入控制(Admission Control)

绝大多数策略控制器(如 Open Policy Agent Gatekeeper、Kyverno)都工作在 Kubernetes 的准入控制(Admission Control)环节,这个环节发生在 API Server 验证请求之后、将资源存储到 etcd 之前。

  • 流程: 当你执行 kubectl apply -f deployment.yaml -> 请求到达 API Server -> 经过认证和授权 -> 进入准入控制链 -> 策略控制器拦截请求 -> 根据策略判断:
    • 合规: 放行请求,资源被创建。
    • 不合规: 返回错误信息,阻断请求,资源不会被创建

主流策略控制器及其阻断能力

控制器 如何实现阻断 作用范围
OPA Gatekeeper 通过定义 ConstraintTemplateConstraint,生成一个 ValidatingAdmissionWebhook,API Server 在创建/更新资源时会调用这个 Webhook,如果违反约束,请求被拒绝。 主要用于安全合规治理的强制策略。
Kyverno 使用 Kubernetes 原生风格的 ClusterPolicyPolicy 资源,它可以配置为 validate (验证)模式,并设置 validationFailureAction: Enforce 来直接拒绝不合规请求。 功能更全面,包括验证、变异、生成和清理资源。
内置的PodSecurity Kubernetes 1.23+ 内置的准入控制器,通过 PodSecurityPodSecurityPolicy(已弃用)实现,直接由 API Server 执行,无需外部 Webhook。 专注于Pod 安全标准(如禁止特权容器、避免 HostPath 挂载等)。

具体阻断场景举例

策略控制器可以阻断以下不合规的部署:

  • 安全违规: 尝试部署一个 特权容器 (securityContext.privileged: true)。
  • 资源滥用: 尝试创建一个没有设置 资源限制(Resource Limits)的高负载 Pod。
  • 镜像来源: 尝试从 不受信任的镜像仓库(如 latest 标签、docker.io/unknown)拉取镜像。
  • 禁止的操作: 尝试挂载 宿主机敏感路径(如 /var/run/docker.sock)。
  • 命名规范: 尝试创建一个名称包含特殊字符长度超出限制的 Deployment。
  • 标签缺失: 尝试部署一个缺少必须标签(如 appenvteam)的资源。
  • Ingress 配置: 尝试创建一个配置了不安全 TLS 版本通配符证书的 Ingress。

重要区别:阻断 vs 告警

策略控制器通常有两种行为模式:

  1. 强制阻断(Enforce / Deny):

    • 配置:validationFailureAction: Enforce
    • 效果:直接拒绝请求,返回错误信息(如 “denied by policy: container must not run as root”)。这是最常用的生产环境配置。
  2. 仅告警(Audit / Warn):

    • 配置:validationFailureAction: Audit (或在 OPA 中配置 remediationAction: dryrun
    • 效果:请求被允许通过(资源能创建),但策略控制器会记录一条审计日志或生成一个警告事件。常用于测试策略或先观察影响范围。

使用注意事项

  • 需要选择合适的策略控制器:

    • Kyverno 的规则表述更贴近 Kubernetes 用户,对新手相对友好。
    • OPA Gatekeeper 使用 Rego 语言编写策略,功能强大但学习曲线较陡。
    • PodSecurity 使用内置的、基于标签的标准,免去部署额外组件的负担。
  • 不能完全依赖策略控制器: 它主要拦截通过 API Server 的请求,对于已经在运行(Pre-existing)的资源,需要运行审计(Audit)或定期扫描(如使用 Trivy)。

  • 需要预留逃生通道: 在配置非常严格的策略(如禁止使用 root 用户)时,需要为关键系统组件(如 kube-system 命名空间中的 DaemonSet)添加豁免配置(Exclusion),否则可能导致集群崩溃。

是的,策略控制器的核心功能之一就是根据预定义的规则,在部署阶段阻断不合规的请求。 将它们配置为强制阻断模式是保障集群安全与合规的有效方式,但通常建议先在审计/告警模式下测试策略,确认没有误伤合法业务后,再切换到阻断模式。

抱歉,评论功能暂时关闭!