Docker 与 Kubernetes 容器安全

容器安全简介

容器彻底改变了应用程序的部署方式,但也引入了新的攻击向量。 安全防护必须覆盖从 base image 到 Kubernetes 编排的方方面面,包括运行时 防护和 network policies。

Docker 镜像安全

1. 基础镜像选择

  • 使用官方且经过验证的镜像(Docker Hub verified publishers)
  • 优先选择 Alpine Linux 或 Distroless 以减小攻击面
  • 避免使用 :latest 镜像 - 始终指定版本
  • 最小化层数并移除不必要的工具

2. 漏洞扫描

  • Trivy:Aqua Security 推出的开源扫描器
  • Grype:针对镜像和 filesystem 的漏洞扫描
  • Clair:静态漏洞分析
  • Snyk Container:与 CI/CD 集成
  • 在 push 之前于 CI/CD pipeline 中进行自动化扫描

3. 镜像签名

  • Docker Content Trust(Notary)用于镜像签名
  • Sigstore/Cosign 用于 supply chain security
  • 部署前进行完整性验证

Docker 运行时安全

Docker 容器加固:

  • User Namespaces:不要以 root 运行(USER directive)
  • Capabilities:Drop all + 仅添加必要项(--cap-drop=ALL)
  • Read-only Filesystem:--read-only 用于不可变容器
  • No New Privileges:--security-opt=no-new-privileges
  • Resource Limits:--memory、--cpus 以防止 DoS
  • Seccomp Profiles:过滤危险的 syscall
  • AppArmor/SELinux:Mandatory access control

Kubernetes 安全

1. RBAC 与访问控制

  • 最小权限:特定的 Roles 和 RoleBindings
  • 每个应用使用专用的 Service Accounts
  • 除关键自动化外,避免使用 ClusterAdmin
  • 对所有 API calls 进行 audit logging

2. Pod Security Standards

  • Privileged:无限制(应避免)
  • Baseline:防止已知的提权
  • Restricted:面向生产环境的最大化加固
  • Pod Security Admission controller 用于强制执行

3. Network Policies

  • Default deny all + 按需显式 allow
  • 按 namespace 和 label 进行分段
  • egress 控制以防止数据外泄
  • 与 CNI plugins 集成(Calico、Cilium)

Secrets 管理

  • 切勿硬编码 secrets 到镜像或代码中
  • Kubernetes Secrets:Base64 编码(并未加密!)
  • External Secrets Operator:与外部 vault 集成
  • Sealed Secrets:用于 GitOps 的非对称加密
  • HashiCorp Vault:Dynamic secrets 与自动轮换
  • AWS Secrets Manager / Azure Key Vault:Cloud-native options
  • etcd 的 Encryption at rest(--encryption-provider-config)

运行时安全

运行时防护工具:

  • Falco:基于 eBPF 的运行时威胁检测(CNCF)
  • Tetragon:eBPF-based security observability(Cilium)
  • Sysdig Secure:Container forensics 与 compliance
  • Aqua Security:Full lifecycle container security
  • Prisma Cloud:CWPP(Cloud Workload Protection Platform)

它们可检测:异常的进程生成、可疑的网络连接、file system 变更、 提权尝试

服务网格安全

  • Istio:自动 mTLS、authorization policies、流量加密
  • Linkerd:具备 zero-trust networking 的轻量级服务网格
  • Consul Connect:service-to-service 加密与授权
  • 证书自动轮换
  • 微服务之间的细粒度访问控制
  • 可观测性:distributed tracing 与 metrics

供应链安全

  • SBOM(Software Bill of Materials):使用 Syft、Tern 生成
  • Admission Controllers:OPA/Gatekeeper、Kyverno 用于 policy enforcement
  • Image Provenance:符合 SLSA framework
  • Registry Security:Harbor、Artifactory 集成扫描功能
  • 制品的签名与验证(Cosign、Notary v2)
  • 持续的漏洞管理

最佳实践

  • [OK] 在 pipeline 的每个阶段扫描镜像
  • [OK] 实施 Restricted 级别的 Pod Security Standards
  • [OK] 对所有 namespace 实施 default deny network policies
  • [OK] 外部 secrets(切勿放入 Git 或镜像)
  • [OK] 使用 Falco 或同等工具进行运行时监控
  • [OK] 启用并集中管理 audit logs
  • [OK] 定期更新 cluster 和 components
  • [OK] 加密的 etcd 备份
  • [OK] 经过测试的 disaster recovery 计划
  • [OK] 借助服务网格实现 zero-trust networking