KubernetesSRE安全加固
场景
某SRE团队在Kubernetes集群监控中发现异常:出现未知Pod,且网络出站流量激增。初步怀疑集群存在安全漏洞。
症状
- 非预期的Pod在命名空间中运行
- 网络出站流量异常增加
- kube-system命名空间中出现可疑的ClusterRole绑定
诊断
- 检查RBAC权限:
kubectl get clusterrolebindings --all-namespaces
kubectl describe clusterrolebinding <可疑名称>
- 检查网络策略:
kubectl get networkpolicies --all-namespaces
若没有网络策略,默认允许所有流量。 3. 检查Pod安全标准:
kubectl get podsecuritypolicies
若未定义,则无限制。
加固命令
RBAC最小权限
- 删除不必要的ClusterRoleBinding:
kubectl delete clusterrolebinding <可疑名称>
- 创建严格Role并绑定:
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
EOF
网络策略
- 拒绝所有入站出站流量:
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
EOF
- 允许必要流量(例如允许kube-dns):
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns
namespace: default
spec:
podSelector:
matchLabels:
app: myapp
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
ports:
- protocol: UDP
port: 53
EOF
Pod安全标准(使用Pod Security Admission)
- 启用Pod安全准入控制器:
kubectl label ns default pod-security.kubernetes.io/enforce=restricted
注意:此操作可能影响现有Pod,需先测试。
风险控制
- 所有变更前备份当前配置:
kubectl get clusterrolebindings -o yaml > backup-rbac.yaml
- 在生产集群上逐步实施,先应用于测试命名空间。
- 启用审计日志以监控异常访问。
回滚
- 如果策略导致服务中断,使用备份恢复:
kubectl apply -f backup-rbac.yaml
- 对于网络策略,删除策略即可:
kubectl delete networkpolicy default-deny-all
验证
- 检查RBAC:
kubectl auth can-i get pods --as=jane
- 检查网络策略:
kubectl describe networkpolicy default-deny-all
- 检查Pod安全:
kubectl run test --image=busybox -- sleep 1
应被拒绝。
何时提交OpsGlobal工单
- 如果集群遭受攻击且需要紧急响应。
- 若需要合规性审计专家协助。
- 当内部团队缺乏Kubernetes安全经验时。
适用场景
适合正在处理 Security、Kubernetes, SRE, 安全加固 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文通过一个真实场景,展示如何诊断并加固Kubernetes集群中的安全漏洞,涵盖RBAC、网络策略和Pod安全标准。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。