Kubernetes安全加固SRERBAC网络策略
场景
某电商平台Kubernetes集群(v1.28)近期出现异常——持续集成流水线异常中断,部分Pod被删除。安全审计发现:一个非管理员ServiceAccount拥有cluster-admin权限,且存在未授权的API调用。团队需要立即加固集群安全。
症状
- 非预期Pod删除或重启
- 审计日志中来自未知用户的API调用
- RBAC绑定出现高危权限
- 敏感Secret被意外曝光
诊断
- 检查RBAC权限:
bash kubectl get clusterrolebindings -o wide | grep -v system: kubectl get rolebindings --all-namespaces -o wide - 审计日志:启用日志审计,筛选可疑活动:
bash kubectl logs -n kube-system kube-apiserver --tail=1000 | grep -E "User|verb=delete|verb=create" - 查看Pod安全策略(PSP)或Pod安全准入(PSA):
bash kubectl get psp -A kubectl get podsecurityconfiguration -A - 检查Secrets使用:
bash kubectl get secrets --all-namespaces | grep -E "token|cert|pass"
命令(加固操作)
- 删除高危ClusterRoleBinding:
bash kubectl delete clusterrolebinding malicious-binding - 应用最小权限RBAC:
yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: production name: readonly rules: - apiGroups: [""] resources: ["pods", "services"] verbs: ["get", "list", "watch"] - 启用Pod安全标准(基线):
bash kubectl label ns production pod-security.kubernetes.io/enforce=baseline - 配置网络策略:
```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
namespace: production
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress ```
- 轮换密钥:
bash kubectl delete secret my-secret kubectl create secret generic my-secret --from-literal=key=NEW_VALUE
风险控制
- 所有操作先在非生产环境验证。
- 变更前备份现有RBAC和网络策略:
bash kubectl get clusterrolebindings -o yaml > backup-clusterrolebindings.yaml kubectl get networkpolicies --all-namespaces -o yaml > backup-networkpolicies.yaml - 使用
kubectl auth can-i检查权限:bash kubectl auth can-i create deployments --as=system:serviceaccount:production:my-sa
回滚
- 恢复RBAC:
bash kubectl apply -f backup-clusterrolebindings.yaml - 恢复网络策略:
bash kubectl apply -f backup-networkpolicies.yaml - 撤销Pod安全标签:
bash kubectl label ns production pod-security.kubernetes.io/enforce-
验证
- 确认RBAC收紧:
bash kubectl auth can-i delete pods --as=system:serviceaccount:production:app-sa - 检查网络隔离:
bash kubectl exec -n production test-pod -- curl -m 3 http://other-service应超时 - 确认Secret不再暴露:
bash kubectl get secrets --all-namespaces -o json | jq '.items[] | select(.type=="Opaque") | .data | keys'
何时提交OpsGlobal工单
- 集群面临持续攻击且无法自行止血。
- 需要应急P0级响应(如权限被攻破)。
- 集群安全合规审计(SOC2、PCI)需要专家评估。
- 缺乏内部Kubernetes安全专家时。
OpsGlobal提供7×24小时远程SRE支持,快速诊断与修复,保障平台安全。
适用场景
适合正在处理 Security、Kubernetes, 安全加固, SRE, RBAC 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文深入探讨Kubernetes集群的安全加固策略,包括RBAC配置、Pod安全标准、网络策略和密钥管理,提供从诊断到回滚的完整操作流程,帮助SRE团队防范常见攻击。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。