2. 多租户隔离基础:租户模型、资源隔离策略及隔离失效的典型场景

多租户隔离是云原生平台安全性的基石。在 SOPS 策略评审中,评审人员必须理解租户模型如何定义权限边界,以及网络、存储、计算三大资源的隔离策略如何影响制品签名链路的可信性。隔离失效往往不是单一漏洞,而是策略配置与资源边界之间的错位。

2.1 租户模型:从单集群到分层隔离

租户模型定义了“谁可以访问什么资源”。在 Kubernetes 原生环境中,常见的租户模型分为以下三种:

模型类型 隔离粒度 典型实现 签名链路风险
扁平 Namespace 命名空间级 RBAC + NetworkPolicy 命名空间间密钥泄露可横向移动
虚拟集群 (vCluster) 控制面级 vCluster / Kiosk 虚拟集群 API Server 逃逸可伪造签名
物理集群 (Cell) 基础设施级 独立集群 + 联邦 跨集群签名信任锚点不一致
评审要点: 在 SOPS 策略中,租户模型决定了 sops:keys 和 sops:mac 的存储范围。扁平模型下,密钥必须按命名空间隔离存储,避免跨租户读取。

2.2 资源隔离策略:网络、存储、计算

三大资源的隔离策略直接影响制品签名链路的完整性。以下分别阐述每种策略的配置要点与失效模式。

2.2.1 网络隔离

网络隔离防止未授权的租户流量进入签名服务或密钥存储端点。核心策略包括:

  • NetworkPolicy:基于标签的入站/出站规则,限制签名 Pod 只接受来自 CI/CD 系统的流量。
  • 服务网格 mTLS:在 Sidecar 层强制双向 TLS,确保签名请求来源身份可验证。
  • API 网关策略:在入口处校验 JWT 或 SPIFFE 身份,拒绝无凭证的签名调用。
常见失效: NetworkPolicy 未覆盖 egress 规则,导致签名 Pod 可外联恶意服务器泄露私钥;或 mTLS 证书轮换期间策略未同步,造成临时绕过。

2.2.2 存储隔离

存储隔离保护签名密钥、制品摘要和策略文件不被跨租户篡改。关键策略:

  • PV/PVC 访问模式:使用 ReadWriteOncePod 确保密钥卷只能被一个 Pod 挂载。
  • 对象存储桶策略:为每个租户分配独立 Bucket,并附加 IAM 条件键限制 s3:PutObject 仅允许签名服务角色。
  • 加密密钥分层:使用 KMS 自动密钥轮换,租户密钥加密后存储,防止存储层泄露。
存储类型 隔离机制 签名链路依赖
etcd (K8s Secrets) 加密存储 + RBAC 签名密钥明文不可落盘
对象存储 (S3/GCS) Bucket 策略 + 访问点 制品签名摘要的完整性校验
分布式 KV (Vault) 命名空间 + 策略路径 动态密钥租约与签名请求绑定

2.2.3 计算隔离

计算隔离确保签名操作在独立的执行环境中运行,避免侧信道攻击或资源抢占导致签名服务降级。策略包括:

  • Pod Security Standards (PSS):强制 restricted 策略,禁止特权容器和 hostPath 挂载。
  • RuntimeClass:为签名 Pod 指定 gVisor 或 Kata 容器,增加内核隔离层。
  • 资源配额 (ResourceQuota):限制每个租户的 CPU/内存,防止恶意租户通过资源耗尽影响签名可用性。
最佳实践: 签名 Pod 应使用独立的 ServiceAccount,并绑定最小权限的 ClusterRole,避免与业务 Pod 共享计算资源池。

2.3 隔离失效的典型场景

以下 SVG 图展示了三种最常见的隔离失效路径,以及它们如何导致制品签名链路权限被突破。

隔离失效典型场景与签名链路影响 场景1:网络策略绕过 恶意 Pod 通过 NodePort 或 HostNetwork 直接访问签名 API 场景2:存储共享 租户A 挂载了 租户B 的密钥卷 (PV 未设置 ReadWriteOncePod) 场景3:计算逃逸 特权容器突破 RuntimeClass 隔离 读取宿主机签名密钥 隔离失效对签名链路的共同影响 攻击者获取签名私钥 → 伪造任意制品签名 → 突破 SOPS 策略完整性校验 CI/CD 流水线信任链断裂,恶意制品可被部署到生产环境 SOPS 策略评审应覆盖的防御措施 ① 网络策略显式拒绝跨租户流量 ② 存储卷使用 ReadWriteOncePod + 加密 ③ 签名 Pod 强制 restricted PSS + gVisor RuntimeClass ④ 定期隔离失效演练

2.4 隔离失效的检测与修复策略

在 SOPS 策略评审中,针对上述失效场景,建议采用以下检测与修复策略:

  1. 网络隔离审计:使用 kubectl describe networkpolicy 检查签名命名空间的入站/出站规则,确保没有 0.0.0.0/0 的宽松规则。
  2. 存储访问审计:扫描所有 PV 的 accessModes,标记非 ReadWriteOncePod 的密钥卷;检查对象存储桶策略是否包含 Principal: "*"。
  3. 计算隔离审计:验证签名 Pod 的 securityContext 是否包含 runAsNonRoot: true 和 seccompProfile: RuntimeDefault。
  4. 运行时验证:部署准入控制器(如 OPA/Gatekeeper),强制新创建的签名 Pod 必须满足隔离基线。
评审清单: 在 SOPS 策略变更 PR 中,必须包含隔离策略的自动化测试结果。例如,使用 kyverno 策略检查签名命名空间是否启用了 NetworkPolicy,以及密钥 Secret 是否被标记为 sealed。