Kubernetes Pod 安全上下文配置与权限逃逸防范实践

一、Pod 安全上下文核心概念

Pod 安全上下文(Security Context)是 Kubernetes 中控制容器权限的核心机制,通过声明式配置限制容器的运行时权限。主要功能包括:

  1. 用户/组控制

    • 禁止以 root 用户运行容器
    • 指定非特权用户 ID 和组 ID
    securityContext:
      runAsUser: 1000
      runAsGroup: 3000
      allowPrivilegeEscalation: false
    

  2. 文件系统防护

    • 强制只读根文件系统
    • 挂载敏感目录为临时文件系统
    securityContext:
      readOnlyRootFilesystem: true
      volumes:
        - name: temp
          emptyDir: {}
      volumeMounts:
        - mountPath: /tmp
          name: temp
    

  3. 能力(Capabilities)管理
    通过 Linux Capabilities 机制精细化控制权限:

    securityContext:
      capabilities:
        drop: ["ALL"]
        add: ["NET_BIND_SERVICE"]
    


二、权限逃逸常见场景与防范

场景 1:容器提权攻击

  • 风险:利用 SETUID 二进制文件或内核漏洞获取 root 权限
  • 防范配置
     securityContext:
       privileged: false  # 禁用特权模式
       allowPrivilegeEscalation: false
       seccompProfile:
         type: RuntimeDefault  # 启用默认Seccomp策略
    

场景 2:宿主机文件系统访问

  • 风险:通过挂载逃逸访问宿主机敏感目录
  • 防范配置
     securityContext:
       procMount: Default  # 限制/proc挂载
     volumes:
       - hostPath:
           path: /etc
         readOnly: true  # 强制只读挂载
    

场景 3:容器间横向移动

  • 风险:通过共享进程命名空间攻击相邻容器
  • 防范配置
     spec:
       shareProcessNamespace: false  # 禁用进程共享
       securityContext:
         runAsNonRoot: true  # 强制非root用户
    


三、最佳实践配置模板
apiVersion: v1
kind: Pod
metadata:
  name: secured-pod
spec:
  containers:
  - name: app
    image: nginx:1.25
    securityContext:
      runAsUser: 1000
      runAsGroup: 1000
      runAsNonRoot: true
      readOnlyRootFilesystem: true
      allowPrivilegeEscalation: false
      capabilities:
        drop: ["SETUID", "SETGID", "NET_RAW"]  # 移除高危能力
        add: ["CHOWN"]  # 按需添加必要能力
    volumeMounts:
      - name: temp
        mountPath: /tmp
  volumes:
    - name: temp
      emptyDir: {}


四、防御效果验证方法
  1. 权限测试

    kubectl exec -it secured-pod -- id  # 应显示 uid=1000
    kubectl exec -it secured-pod -- touch /test  # 应报错"Read-only file system"
    

  2. 漏洞扫描
    使用工具链检测配置漏洞:

    kube-bench run --targets node  # CIS基准测试
    trivy k8s --report summary pod/secured-pod  # 容器漏洞扫描
    

  3. 审计日志监控
    启用 Kubernetes 审计日志,监控关键事件:

    # kube-apiserver.yaml
    --audit-policy-file=/etc/kubernetes/audit-policy.yaml
    --audit-log-path=/var/log/apiserver/audit.log
    

关键原则:遵循最小权限原则(Principle of Least Privilege),通过分层防御(Defense-in-Depth)策略阻断权限逃逸路径。定期更新安全上下文配置以应对新型攻击手法。

更多推荐