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 图展示了三种最常见的隔离失效路径,以及它们如何导致制品签名链路权限被突破。
2.4 隔离失效的检测与修复策略
在 SOPS 策略评审中,针对上述失效场景,建议采用以下检测与修复策略:
- 网络隔离审计:使用
kubectl describe networkpolicy检查签名命名空间的入站/出站规则,确保没有0.0.0.0/0的宽松规则。 - 存储访问审计:扫描所有 PV 的
accessModes,标记非ReadWriteOncePod的密钥卷;检查对象存储桶策略是否包含Principal: "*"。 - 计算隔离审计:验证签名 Pod 的
securityContext是否包含runAsNonRoot: true和seccompProfile: RuntimeDefault。 - 运行时验证:部署准入控制器(如 OPA/Gatekeeper),强制新创建的签名 Pod 必须满足隔离基线。
评审清单: 在 SOPS 策略变更 PR 中,必须包含隔离策略的自动化测试结果。例如,使用
kyverno 策略检查签名命名空间是否启用了 NetworkPolicy,以及密钥 Secret 是否被标记为 sealed。