预约咨询 提交工单

DevOps/SRE平台安全加固实战:Kubernetes集群纵深防御

本文通过一个典型的Kubernetes集群权限泄漏场景,逐步演示如何诊断RBAC、网络策略和Pod安全上下文中的安全漏洞,并给出加固、回滚与验证的具体命令和最佳实践。

DevOps/SRE平台安全加固实战:Kubernetes集群纵深防御
Security 6min 81 浏览 2026-06-23
KubernetesSRE安全加固RBAC网络策略Pod安全

场景

某Ops团队管理的Kubernetes集群包含多个命名空间,开发人员反映部分用户能访问不应触及的资源。审计日志显示大量RBAC拒绝事件和未知的Pod创建操作。

症状

  • 非管理员用户尝试列出集群级别资源(如Node、PersistentVolume)并被拒绝。
  • 某个命名空间中出现非预期的高权限Pod(如privileged容器)。
  • 网络策略未生效,跨命名空间流量异常。

诊断

1. 检查RBAC绑定

# 列出所有ClusterRoleBinding和RoleBinding
kubectl get clusterrolebinding -o wide
kubectl get rolebinding -A -o wide
# 查看特定用户或ServiceAccount的权限
export USER="john.doe@example.com"  # 替换为实际用户
kubectl auth can-i --list --as=$USER --all-namespaces | grep -v "no"

2. 检查网络策略

# 列出所有命名空间的网络策略
kubectl get networkpolicy --all-namespaces
# 查看默认拒绝策略是否存在(缺乏时流量默认允许)
NAMESPACE="production"
kubectl describe networkpolicy -n $NAMESPACE

3. 检查Pod安全上下文

# 查找特权容器或允许提升权限的Pod
kubectl get pods --all-namespaces -o jsonpath="{range .items[*]}{.metadata.namespace}{' '}{.metadata.name}{' '}{.spec.containers[*].securityContext.privileged}{'\\n'}{end}" | grep true
# 查看PodSecurityAdmission配置(如果已启用)
kubectl get pods -n $NAMESPACE -o yaml | grep -A5 "pod-security.kubernetes.io/enforce"

风险控制与加固命令

1. 收紧RBAC

# 创建最小权限的Role和RoleBinding(示例:只读访问指定命名空间中的Pod)
kubectl create role pod-reader --verb=get,list,watch --resource=pods -n $NAMESPACE
kubectl create rolebinding $USER-pod-reader --role=pod-reader --user=$USER -n $NAMESPACE
# 删除不必要的ClusterRoleBinding
kubectl delete clusterrolebinding overpermissive-binding

2. 实施网络策略

# 默认拒绝所有入站和出站流量,然后显式允许必要通信
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: $NAMESPACE
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
kubectl apply -f default-deny-all.yaml
# 添加允许规则的策略,例如允许前端Pod访问后端Pod

3. 强制Pod安全标准

# 在命名空间级别启用Pod Security Admission(例如restricted级别)
kubectl label ns $NAMESPACE pod-security.kubernetes.io/enforce=restricted
kubectl label ns $NAMESPACE pod-security.kubernetes.io/warn=restricted

安全备份与回滚

在执行任何加固操作前,备份当前资源状态:

# 备份RBAC和网络策略
kubectl get clusterrolebinding -o yaml > clusterrolebinding-backup.yaml
kubectl get rolebinding -A -o yaml > rolebinding-backup.yaml
kubectl get networkpolicy -A -o yaml > networkpolicy-backup.yaml

如需回滚:

kubectl apply -f clusterrolebinding-backup.yaml
kubectl apply -f rolebinding-backup.yaml
kubectl apply -f networkpolicy-backup.yaml
kubectl label ns $NAMESPACE pod-security.kubernetes.io/enforce-  # 移除标签

验证效果

重复诊断步骤,确认权限已收紧、网络策略生效、特权Pod不再创建。

kubectl auth can-i list pods --as=$USER -n $NAMESPACE  # 应返回yes
kubectl auth can-i list nodes --as=$USER  # 应返回no
kubectl get pods -n $NAMESPACE -o yaml | grep privileged  # 无输出

何时提交OpsGlobal工单

  • 内部团队无法解释审计日志中的复杂拒绝事件。
  • 需要跨集群统一实施安全策略时。
  • 面对法规合规(如PCI-DSS)要求但缺乏经验。
  • 加固后出现意料之外的应用程序故障,需要专家协助调试。

OpsGlobal的SRE工程师可以远程快速诊断并实施银行级安全配置,确保集群符合行业标准。

适用场景

适合正在处理 Security、Kubernetes, SRE, 安全加固, RBAC 相关问题的团队,用于快速建立排查路径和交付标准。

问题背景

本文通过一个典型的Kubernetes集群权限泄漏场景,逐步演示如何诊断RBAC、网络策略和Pod安全上下文中的安全漏洞,并给出加固、回滚与验证的具体命令和最佳实践。

排查步骤

先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。

命令示例

示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。

风险说明

生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。

回滚方案

保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。

交付清单

问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。

!

遇到类似技术问题?

如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。

工单 WhatsApp 联系 咨询