场景
某金融科技公司SRE团队发现生产Kubernetes集群中一个低权限Pod通过挂载的ServiceAccount令牌访问了敏感命名空间中的Secret。该Pod本应仅限日志收集,但默认RBAC配置允许跨命名空间访问。
症状
- 安全审计日志显示异常kubectl get secrets调用。
- 监控告警:非预期命名空间的API请求量上升。
- 某服务错误日志中意外出现其他服务的数据库密码明文。
诊断
- 检查Pod的ServiceAccount绑定:
bash kubectl get pod <pod-name> -n <namespace> -o json | jq '.spec.serviceAccountName' - 查看该ServiceAccount的RoleBinding:
bash kubectl get rolebinding,clusterrolebinding -n <namespace> | grep <serviceaccount> - 确认默认的ClusterRole通常包含
get secrets权限。
命令执行:安全加固
1. 创建最小权限ServiceAccount
kubectl create serviceaccount log-collector -n logging
2. 定义只读日志访问Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: logging
name: log-reader
rules:
- apiGroups: [""]
resources: ["pods/log", "pods"]
verbs: ["get", "list", "watch"]
3. 绑定Role
kubectl create rolebinding log-reader-binding --role=log-reader --serviceaccount=logging:log-collector -n logging
4. 更新Pod使用新ServiceAccount
编辑Pod spec,添加serviceAccountName: log-collector,删除旧Secret挂载。
5. 启用网络策略
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-other-namespaces
namespace: logging
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: logging
6. 应用Pod安全标准(Restricted)
kubectl label ns logging pod-security.kubernetes.io/enforce=restricted
风险控制
- 先在非生产环境测试RBAC变更。
- 网络策略可能阻断合法流量,提前规划白名单。
- Pod安全标准可能导致现有Pod无法启动,需逐个适配。
回滚方案
kubectl delete rolebinding log-reader-binding -n logging
kubectl delete role log-reader -n logging
kubectl delete networkpolicy deny-other-namespaces -n logging
kubectl label ns logging pod-security.kubernetes.io/enforce- # 删除标签
验证
- 确认Pod无法访问其他命名空间:
bash kubectl exec -it <pod> -n logging -- curl -k -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://kubernetes.default.svc/api/v1/namespaces/default/secrets应返回403。 - 确认日志收集功能正常。
何时提交OpsGlobal工单
当您遇到以下情况时,请立即提交工单: - 内部发现恶意访问但缺乏Kubernetes安全专业知识。 - 需要大规模集群安全审计与策略迁移。 - 对Pod安全标准兼容性评估或自定义策略编写。
OpsGlobal的SRE专家将提供7x24小时远程支持,快速诊断并执行加固。
适用场景
适合正在处理 Security、Kubernetes, 安全加固, SRE, RBAC 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文通过真实场景,演示Kubernetes集群安全加固的完整流程,包括RBAC最小权限、网络策略、Pod安全标准及Secrets管理,并提供回滚与验证步骤。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。