Kubernetes安全加固RBAC网络策略密钥管理
场景
某金融客户的生产Kubernetes集群频繁出现未授权资源访问事件。SRE团队需要立即实施安全加固。
症状
- 非管理员用户能列出集群机密
- 发现来自可疑IP的出站网络连接
- kubeconfig文件泄露导致攻击者执行命令
诊断
- 检查RBAC绑定:
kubectl get clusterrolebinding,rolebinding -A -o wide - 审计网络策略:
kubectl get networkpolicy -A - 验证密钥存储:
kubectl get secrets -A | grep -v default-token
命令
收紧RBAC
kubectl create clusterrole restrict-secrets --verb=get,list,watch --resource=secrets --resource-name= # 仅允许特定机密
kubectl create clusterrolebinding restrict-secrets-binding --clusterrole=restrict-secrets --user=developer
启用网络策略
# default-deny.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
kubectl apply -f default-deny.yaml
轮换密钥
kubectl delete secret my-app-secret
kubectl create secret generic my-app-secret --from-literal=password=$(openssl rand -base64 32)
风险控制
- 先在小范围金丝雀命名空间测试网络策略
- 创建RBAC角色前导出当前绑定快照:
kubectl get clusterrolebinding -o yaml > rbac-backup.yaml - 密钥轮换期间确保应用程序支持热重载,否则需要协调重启
回滚
kubectl delete clusterrole restrict-secrets
kubectl delete clusterrolebinding restrict-secrets-binding
kubectl delete networkpolicy default-deny-all
kubectl apply -f rbac-backup.yaml
验证
kubectl auth can-i list secrets --as=developer # 应返回no
kubectl exec test-pod -- curl -I http://evil.com # 应超时
kubectl get secret my-app-secret -o jsonpath='{.data.password}' | base64 -d | wc -c # 应为32
何时提交OpsGlobal工单
- 安全漏洞(如CVE)影响运行组件,需紧急热修复
- 内部审计发现严重配置错误,超出团队能力
- 集群在加固后出现大面积服务中断,无法通过回滚恢复
- 需要外部专家进行红蓝对抗演习或合规评审
适用场景
适合正在处理 Security、Kubernetes, 安全加固, RBAC, 网络策略 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文深入探讨Kubernetes环境中的安全加固实践,包括RBAC、网络策略和密钥管理,并提供可操作的诊断与回滚步骤。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。