Kubernetes安全防护红宝书

Kubernetes安全防护红宝书:从青铜到王者的9层防御体系

作为每天和黑客斗智斗勇的K8S运维老兵,今天给大家分享一套经过金融级生产环境验证的安全方案。这套体系曾帮我们挡住过勒索病毒、挖矿脚本和APT攻击,建议直接抄作业!


第1层防御:API Server防护(城堡大门)

# 生产环境必备配置
apiServer:
  enable-admission-plugins: "NodeRestriction,PodSecurity"
  audit-log-path: /var/log/k8s-audit.log
  audit-log-maxage: "30"
  authorization-mode: "RBAC,Node"
  encryption-provider-config: /etc/kubernetes/enc/conf.yaml

✅ 必做清单:


第2层防御:RBAC权限管制(内部门禁)

RBAC权限模型

血泪教训:某厂运维误操作删除生产环境namespace,损失千万级订单。解决方案:

# 创建最小权限角色
kubectl create role developer \
  --verb=get,list \
  --resource=pods,services \
  -n dev-env

# 绑定服务账号
kubectl create rolebinding dev-binding \
  --role=developer \
  --serviceaccount=dev-team:default \
  -n dev-env

第3层防御:容器镜像安全(货物安检)

工具 检测能力 集成方案
Trivy CVE漏洞 CI/CD流水线阻断
Clair 深度层扫描 与Harbor集成
Cosign 镜像签名验证 准入控制器拦截未签名镜像

镜像签名实战

# 使用Cosign签名镜像
cosign generate-key-pair
cosign sign -key cosign.key myregistry.com/app:v1

# 验证签名(集群侧自动执行)
cosign verify -key cosign.pub myregistry.com/app:v1

第4层防御:网络隔离(护城河)

Calico网络策略示例

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: db-isolation
spec:
  selector: role == 'db'
  ingress:
    - action: Allow
      protocol: TCP
      source:
        selector: role == 'app'
      destination:
        ports: [5432]
  egress:
    - action: Deny

🚨 常见错误:

  • 开放所有namespace流量(默认拒绝才是王道)
  • 忽略Pod到节点的流量控制
  • 未限制外部出口流量(挖矿程序最爱)

第5层防御:运行时防护(巡逻卫兵)

Falco检测规则示例

- rule: Unexpected privileged container
  desc: Detect privileged containers
  condition: container and privileged=true
  output: "Privileged container running (user=%user.name command=%proc.cmdline)"
  priority: CRITICAL

集成方案:

  1. 实时告警推送Slack/钉钉
  2. 联动Kubernetes审计日志
  3. 自动生成CIS合规报告

第6层防御:密钥管理(保险箱)

Vault注入Secrets实战

annotations:
  vault.hashicorp.com/agent-inject: 'true'
  vault.hashicorp.com/role: 'app-role'
  vault.hashicorp.com/agent-inject-secret-db-creds: 'database/creds/app'

⚠️ 高危操作黑名单:

  • 在镜像中硬编码密码
  • 使用默认Service Account
  • 将Secret提交到Git仓库

第7层防御:节点加固(城墙加固)

CIS基准检查项

# 使用kube-bench检测
docker run --rm --pid=host -v /etc:/etc:ro \
  -v /var:/var:ro -t aquasec/kube-bench:latest \
  --version 1.25

必须修复项:

  1. 禁用Swap分区
  2. 限制Kubelet匿名访问
  3. 启用AppArmor/SELinux
  4. 定期更新内核补丁

第8层防御:审计与溯源(监控天眼)

审计日志分析架构

Fluentd → Elasticsearch → Kibana
  ↑
k8s审计日志 → 告警规则 → 企业微信通知

关键审计事件:

  • configmaps更新
  • rolebinding变更
  • persistentvolumeclaims删除
  • pods/exec连接

第9层防御:灾备恢复(逃生密道)

全集群备份方案

velero backup create prod-backup \
  --include-namespaces=production \
  --snapshot-volumes \
  --ttl 72h

恢复演练清单:

  1. 模拟节点故障(Chaos Mesh注入)
  2. 定期测试备份恢复(每年至少2次)
  3. 多区域备份验证

安全加固检查表(每月执行)


最后说句大实话:安全没有银弹!再好的方案也抵不过日常运维的细心。建议把安全防护做成肌肉记忆,就像每天锁门一样自然。毕竟在云原生时代,安全才是最大的生产力!

posted on 2025-03-18 09:22  Leo-Yide  阅读(39)  评论(0)    收藏  举报