在K8S中,PodSecurityPolicy机制能实现哪些安全策略?

在 Kubernetes 中,PodSecurityPolicy (PSP) 是一种已弃用(Kubernetes v1.25 起正式移除)的安全机制,但它曾是实现集群安全加固的核心工具。其核心目标是通过定义强制性的安全策略,限制 Pod 及其容器的权限,减少攻击面。以下是它能实现的关键安全策略,用通俗场景解释:


一、核心安全策略分类及实现

1. 权限控制(防止特权升级)

  • 策略示例
    privileged: false        # 禁止容器以特权模式运行(相当于root)
    allowPrivilegeEscalation: false  # 禁止进程获取更高权限(如sudo)
    
  • 小白理解

    ❌ 禁止容器变成“超人”(特权模式),防止黑客控制容器后获得宿主机权限。
    🔒 比如:禁止容器内部执行 sudo rm -rf / 这类危险操作。

2. 用户与组控制(最小权限原则)

  • 策略示例
    runAsUser: rule: 'MustRunAsNonRoot'  # 容器必须以非root用户运行
    supplementalGroups: ranges: [{min: 1000, max: 2000}] # 限制附加用户组范围
    
  • 小白理解

    👤 强制容器以“普通员工”身份运行(非root),而非“公司老板”。
    📁 限制容器只能访问特定权限的文件(如仅允许读写用户组ID 1000~2000的文件)。

3. 文件系统保护(只读/敏感路径隔离)

  • 策略示例
    readOnlyRootFilesystem: true    # 强制根文件系统只读
    volumes:                        # 仅允许挂载安全类型的存储卷
      - 'configMap'
      - 'emptyDir'
      - 'persistentVolumeClaim'
    
  • 小白理解

    📄 将容器的“硬盘”设为只读模式,黑客无法篡改系统文件。
    🔒 禁止挂载高危目录(如 /proc 或宿主机路径),防止逃逸。

4. 内核能力限制(裁剪危险系统调用)

  • 策略示例
    requiredDropCapabilities:   # 强制移除危险能力
      - 'NET_RAW'              # 禁止伪造网络包(防ARP欺骗)
      - 'SYS_ADMIN'            # 禁止执行系统管理操作
    allowedCapabilities: []     # 禁止添加任何额外能力
    
  • 小白理解

    ✂️ 砍掉容器的“危险超能力”(如直接操作网络设备或挂载磁盘)。
    🛡️ 类似禁止普通员工使用黑客工具(如抓包软件)。

5. 主机命名空间隔离(禁止访问宿主机资源)

  • 策略示例
    hostNetwork: false    # 禁止共享宿主机网络命名空间
    hostPID: false        # 禁止查看宿主机进程列表
    hostIPC: false        # 禁止通过IPC访问宿主机
    
  • 小白理解

    🌐 禁止容器“偷听”宿主机的网络流量(如窃听其他Pod)。
    🔍 禁止容器查看宿主机的“任务管理器”(进程列表),防止信息泄露。

6. 容器资源访问限制

  • 策略示例
    seLinux: rule: 'RunAsAny'   # 强制使用SELinux安全上下文
    apparmorProfile: 'docker-default'  # 限制AppArmor配置文件
    
  • 小白理解

    🚧 给容器穿上“防护服”(SELinux/AppArmor),限制越界行为。


二、PSP 的工作流程(剧本版)

  1. 用户创建 Pod
    👶 小明提交一个 pod.yaml 到 Kubernetes。
  2. PSP 控制器拦截
    🚓 保安(PSP Admission Controller)检查 Pod 是否符合公司安全规定(PSP 策略)。
  3. 策略匹配与验证
    • ✅ 符合策略 → 放行 Pod 创建。
    • ❌ 不符合策略 → 直接拒绝并报错(如 "容器不能以root运行")。
  4. 强制执行
    🔐 即便 Pod 声明了危险配置(如 privileged: true),PSP 也会覆盖为安全值。

三、PSP 的替代方案(现代安全实践)

由于 PSP 已被弃用,推荐迁移到以下机制

1. Pod Security Admission (PSA)

  • Kubernetes 原生替代品(v1.23+ 内置)。
  • 定义三种安全等级:
    • privileged (宽松) → 允许root
    • baseline (推荐) → 禁止已知风险(如特权容器)
    • restricted (严格) → 全限制(非root+只读文件系统)
  • 示例
    apiVersion: v1
    kind: Namespace
    metadata:
      name: my-app
      labels:
        pod-security.kubernetes.io/enforce: baseline  # 在该命名空间强制基线策略
    

2. OPA/Gatekeeper

  • 通过策略引擎实现更灵活的安全规则(如自定义复杂条件)。
  • 示例策略
    # 禁止容器挂载宿主机路径
    violation[{"msg": msg}] {
      volume := input.spec.volumes[_]
      volume.hostPath != null
      msg := "挂载宿主机路径被禁止!"
    }
    

3. 安全运行时(gVisor/Kata Containers)

  • 隔离容器与内核:
    • gVisor:用用户空间沙箱拦截系统调用。
    • Kata:每个 Pod 独占一个轻量级虚拟机。

四、PSP 的遗产与教训

策略目标 PSP 实现方式 现代替代方案
禁止特权容器 privileged: false PSA 的 baseline 等级
强制非root用户 runAsNonRoot: true PSA 的 restricted 等级
限制挂载敏感卷 volumes 白名单 Gatekeeper + OPA 策略
裁剪Linux Capabilities requiredDropCapabilities PSA + RuntimeDefault 配置

💡 迁移建议

  1. 升级到 Kubernetes v1.25+ 的集群,停用 PSP
  2. 使用 Pod Security Admission 快速落地基础策略。
  3. 复杂场景用 Gatekeeper+OPA 定制策略(如“禁止特定镜像”)。
  4. 关键负载部署 gVisor/Kata 增强隔离性。

小白总结

  • PodSecurityPolicy (PSP) 曾是 Kubernetes 的“安全警察”,负责:
    • 🚫 禁止容器获得过高权限(如root)。
    • 📁 锁定文件系统(如只读模式)。
    • 🔗 隔离容器与宿主机(如禁止共享进程空间)。
  • 现状:PSP 已退役,改用:
    • PSA(内置三档安全等级)。
    • Gatekeeper(自定义高级规则)。
  • 核心原则

    最小权限 → 容器只给必要权限!
    纵深防御 → 层层设卡,即便一层被攻破仍有保护!

posted @ 2025-08-16 20:43  天道酬勤zjh  阅读(51)  评论(0)    收藏  举报