K8s安全审计清单:除了runAsNonRoot,你的SecurityContext还应该检查这5个关键配置

张开发
2026/4/19 14:54:18 15 分钟阅读

分享文章

K8s安全审计清单:除了runAsNonRoot,你的SecurityContext还应该检查这5个关键配置
K8s安全审计清单除了runAsNonRoot你的SecurityContext还应该检查这5个关键配置当我们在Kubernetes集群中部署工作负载时安全配置往往是最容易被忽视的一环。很多团队在完成基础的功能开发后只是简单地设置runAsNonRoot就认为万事大吉殊不知这仅仅是容器安全的第一道防线。本文将带你深入探索SecurityContext中那些常被忽略但至关重要的安全配置构建一套完整的纵深防御策略。1. 安全上下文的核心价值与审计框架容器安全不是简单的能用就行而是需要从多个维度构建防御体系。想象一下如果你的容器被入侵攻击者能够获得哪些权限这正是安全上下文要解决的问题。一个完整的安全审计应该覆盖以下层面身份权限容器进程以什么用户身份运行能力限制容器进程能调用哪些系统功能文件系统容器进程能写入哪些位置系统调用容器进程能执行哪些底层操作隔离机制如何防止权限提升下面是一个基础的安全上下文配置框架securityContext: runAsNonRoot: true runAsUser: 1000 allowPrivilegeEscalation: false capabilities: drop: [ALL] readOnlyRootFilesystem: true seccompProfile: type: RuntimeDefault2. 关键配置一阻止特权升级(allowPrivilegeEscalation)即使容器以非root用户运行如果配置不当攻击者仍可能通过特权升级获得root权限。allowPrivilegeEscalation就是用来防范这种风险的开关。为什么它重要当设置为true时容器内的进程可以通过setuid等机制提升权限攻击者可能利用SUID二进制文件或内核漏洞进行提权与Linux capabilities配合使用效果更佳审计要点securityContext: allowPrivilegeEscalation: false实际案例 某金融公司曾因为未设置此参数导致攻击者通过容器内的ping命令具有CAP_NET_RAW能力获取了宿主机的网络访问权限。3. 关键配置二能力控制(capabilities.drop)Linux capabilities将root用户的特权细分为不同的能力单元我们可以精确控制容器具备哪些能力。常见危险能力能力名称风险描述建议操作CAP_NET_RAW可创建原始套接字用于网络嗅探生产环境应丢弃CAP_SYS_ADMIN可执行大量管理操作近似root非必要应丢弃CAP_DAC_OVERRIDE可绕过文件权限检查常规应用应丢弃配置示例securityContext: capabilities: drop: [ALL] add: [CHOWN, KILL] # 按需添加极少数必要能力提示使用capsh --print命令可以查看容器当前具备的能力4. 关键配置三只读根文件系统(readOnlyRootFilesystem)多数容器应用不需要写入根文件系统将其设为只读可以显著减少攻击面。实施建议识别应用真正需要写入的位置如日志目录将这些目录通过emptyDir或PVC挂载启用全局只读设置securityContext: readOnlyRootFilesystem: true volumes: - name: temp-volume emptyDir: {} volumeMounts: - mountPath: /var/log name: temp-volume异常处理 如果应用因历史原因确实需要写入特定系统路径可以考虑以下方案# 临时解决方案不推荐长期使用 chmod aw /path/to/directory5. 关键配置四Seccomp配置文件Seccomp(secure computing mode)可以限制容器能够执行的系统调用是最后一道防线。典型配置securityContext: seccompProfile: type: RuntimeDefault自定义策略 对于有特殊需求的应用可以创建自定义配置文件{ defaultAction: SCMP_ACT_ERRNO, architectures: [SCMP_ARCH_X86_64], syscalls: [ { names: [read, write, close], action: SCMP_ACT_ALLOW } ] }6. 关键配置五SELinux选项对于使用SELinux的环境通过seLinuxOptions可以进一步细化访问控制。基础配置securityContext: seLinuxOptions: level: s0:c123,c456审计技巧检查节点是否启用了SELinuxgetenforce查看容器的安全上下文ps -eZ | grep container-process7. 组合防御策略实战将上述配置组合使用构建完整的防御体系apiVersion: apps/v1 kind: Deployment metadata: name: secure-app spec: template: spec: securityContext: runAsNonRoot: true runAsUser: 1000 fsGroup: 2000 containers: - name: main securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] add: [NET_BIND_SERVICE] readOnlyRootFilesystem: true seccompProfile: type: RuntimeDefault部署检查清单使用kube-score验证配置kube-score score deployment.yaml使用kubeaudit进行审计kubeaudit autofix -f deployment.yaml实际运行测试kubectl debug -it pod-name --imagebusybox安全配置不是一次性的工作而需要持续监控和更新。建议将安全检查纳入CI/CD流程使用工具如OPA Gatekeeper或Kyverno实施策略即代码。

更多文章