KubernetesSRE
场景
某SRE团队管理多个Kubernetes集群,默认RBAC配置允许开发人员创建具有特权模式的Pod。安全审计发现,有恶意Pod通过挂载宿主机目录获取了节点访问权限。
症状
- 集群中出现未知Pod,并绑定到节点目录。
- 审计日志显示非管理员用户使用了
privileged: true或hostPID: true。 - 安全扫描工具报告Pod安全策略缺失。
诊断
- 检查RBAC绑定:
kubectl get clusterrolebindings -o wide,查看是否有宽泛的cluster-admin绑定。 - 检查PodSecurityPolicy(PSP)或Pod Security Admission(PSA)状态:
kubectl get psp或kubectl get admissionregistration.k8s.io/v1/mutatingwebhookconfigurations。 - 审计Pod规格:
kubectl get pods --all-namespaces -o jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.spec.containers[*].securityContext.privileged}{'\n'}{end}"。
加固命令
- 应用Pod安全标准(PSA):
kubectl label ns default pod-security.kubernetes.io/enforce=restricted。 - 创建最小RBAC:为开发人员绑定仅包含
get、list权限的Role,避免cluster-admin。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: developer-restricted
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
- 删除高危ClusterRoleBinding:
kubectl delete clusterrolebinding <name>。
风险控制
- 在非生产环境测试PSA标签,避免影响运行中的工作负载。
- 逐步应用,使用
audit模式先记录违规,再切换为enforce。 - 保留管理员紧急通道(如
break-glass账号)。
回滚
- 撤销PSA标签:
kubectl label ns default pod-security.kubernetes.io/enforce-。 - 恢复RBAC:重新应用之前的RoleBinding备份。
验证
- 检查Pod创建是否被PSA拒绝:
kubectl run test --image=nginx --privileged应返回错误。 - 确认非管理员无法列出集群机密:
kubectl get secrets --as=developer。
何时提交OpsGlobal工单
- 集群规模超过20个节点,需要统一策略管理。
- 需要自定义准入控制器或动态安全策略。
- 安全合规要求(如PCI-DSS)需专业审计报告。
适用场景
适合正在处理 Security、Kubernetes, SRE 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文通过真实场景演示如何诊断Kubernetes RBAC和Pod安全漏洞,并提供加固步骤、风险控制、回滚与验证方法。适用于需要提升平台安全性的SRE团队。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。