KubernetesSRE安全加固
场景
一家公司的Kubernetes集群因RBAC配置错误和Pod安全策略缺失而被入侵。攻击者利用一个高权限的ServiceAccount创建了恶意Pod,并获取了节点root权限。
症状
- 集群中出现未知Pod,且来源不明。
- kubectl get pods显示异常容器,如crypto-miner。
- 审计日志中出现大量“create pod”事件,但非预期用户。
- 节点负载异常升高。
诊断
- 检查所有ServiceAccount的RBAC绑定:
bash kubectl get rolebindings,clusterrolebindings -A -o wide识别出拥有cluster-admin权限的绑定。 - 查看审计日志(若已启用):
bash kubectl logs -n kube-system apiserver | grep -i “user=<suspicious>” - 检查PodSecurityPolicy(或Pod Security Admission)配置:
bash kubectl get psp # 若已启用 - 检查NetworkPolicy:
bash kubectl get networkpolicies -A发现无网络隔离策略。
命令与修复
步骤1:最小权限RBAC
- 移除危险绑定:
bash kubectl delete clusterrolebinding <binding-name> - 创建精细角色:
bash kubectl create role pod-reader --verb=get,list,watch --resource=pods kubectl create rolebinding dev-pod-reader --role=pod-reader --user=dev-user
步骤2:启用Pod安全标准
- 使用内置Pod Security Admission(K8s v1.23+):
bash kubectl label --overwrite ns <namespace> pod-security.kubernetes.io/enforce=restricted
步骤3:网络策略
- 默认拒绝所有入站流量:
```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- Ingress ```
步骤4:密钥管理
- 停止在ConfigMap中明文存储密钥,使用外部密钥存储(如HashiCorp Vault)或Sealed Secrets。
风险控制
- 在生产环境执行任何操作前,先克隆集群或使用非生产副本测试。
- 更改RBAC时,使用
--dry-run=client预览。 - 确保所有更改有回滚计划,例如保留旧RoleBinding的YAML备份。
回滚
- 若新策略导致服务中断:
bash kubectl apply -f backup-rbac.yaml kubectl label ns <namespace> pod-security.kubernetes.io/enforce- # 移除标签
验证
- 测试用户权限:
bash kubectl auth can-i create pods --as=dev-user # 应返回no - 尝试部署特权Pod(期望被拒绝):
bash kubectl run test-pod --image=nginx --privileged - 检查审计日志确认没有未经授权的活动。
何时提交OpsGlobal工单
- 当出现以下情况时,应立即提交工单:
- 集群已受到攻击,需要即时取证和恢复。
- 团队缺乏安全加固经验,需要专家指导。
- 需要实施高级安全控制(如运行时安全、CIS基准扫描)。
- 怀疑存在内部威胁或长期潜伏的恶意活动。
OpsGlobal的SRE专家可以协助快速恢复、部署安全工具并提供持续监控。
适用场景
适合正在处理 Security、Kubernetes, SRE, 安全加固 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文通过真实场景,介绍Kubernetes集群安全加固的步骤,包括RBAC审计、Pod安全策略实施及回滚验证。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。