详解:K8s 集群中 “Pod 安全上下文” 的配置与避免权限逃逸的实践
·
Kubernetes Pod 安全上下文配置与权限逃逸防范实践
一、Pod 安全上下文核心概念
Pod 安全上下文(Security Context)是 Kubernetes 中控制容器权限的核心机制,通过声明式配置限制容器的运行时权限。主要功能包括:
-
用户/组控制
- 禁止以 root 用户运行容器
- 指定非特权用户 ID 和组 ID
securityContext: runAsUser: 1000 runAsGroup: 3000 allowPrivilegeEscalation: false -
文件系统防护
- 强制只读根文件系统
- 挂载敏感目录为临时文件系统
securityContext: readOnlyRootFilesystem: true volumes: - name: temp emptyDir: {} volumeMounts: - mountPath: /tmp name: temp -
能力(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: {}
四、防御效果验证方法
-
权限测试
kubectl exec -it secured-pod -- id # 应显示 uid=1000 kubectl exec -it secured-pod -- touch /test # 应报错"Read-only file system" -
漏洞扫描
使用工具链检测配置漏洞:kube-bench run --targets node # CIS基准测试 trivy k8s --report summary pod/secured-pod # 容器漏洞扫描 -
审计日志监控
启用 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)策略阻断权限逃逸路径。定期更新安全上下文配置以应对新型攻击手法。
更多推荐
所有评论(0)