2. 租户隔离基础:多租户架构模式(Silo、Pool、Bridge)及其在可观测性中的映射

多租户隔离是后端可观测性安全的第一道防线。在业界,多租户架构通常抽象为三种经典模式:Silo(竖井/独立部署)、Pool(池化/共享) 和 Bridge(桥接/混合)。理解这三种模式在可观测性数据平面与控制平面上的映射关系,是排查数据泄露故障的前提。

2.1 三种经典多租户架构模式

模式 核心思想 隔离粒度 资源效率 运维复杂度
Silo(竖井) 每个租户拥有独立的服务实例、数据库、存储 物理/虚拟级 低(资源独占) 高(每租户独立运维)
Pool(池化) 所有租户共享同一套服务实例,通过租户ID逻辑隔离 行/记录级 高(资源共享) 低(统一运维)
Bridge(桥接) 敏感租户走Silo,普通租户走Pool;或数据层隔离、控制层共享 混合级 中(按需分配) 中(需路由逻辑)
关键认知: 可观测性数据(日志、指标、链路)的隔离故障,90% 发生在 Pool 模式下的租户 ID 丢失或错误路由;Silo 模式虽然安全,但成本高昂,Bridge 模式则需要在路由层做精确的租户上下文传递。

2.2 可观测性数据平面中的映射

可观测性系统(如 Prometheus、Grafana Loki、Jaeger、OpenTelemetry Collector)在接收、处理、存储数据时,必须将租户身份嵌入到数据流中。下表展示了三种模式在可观测性组件中的典型映射:

可观测性组件 Silo 模式 Pool 模式 Bridge 模式
指标(Metrics) 每租户独立 Prometheus 实例 共享实例 + tenant 标签 核心指标池化 + 敏感指标独立
日志(Logs) 每租户独立 Loki 或 Elasticsearch 集群 共享 Loki + tenant_id 字段 日志流按租户路由到不同索引
链路(Traces) 每租户独立 Jaeger 实例 共享 Jaeger + tenant 上下文传播 采样策略按租户区分
告警(Alerting) 每租户独立 Alertmanager 共享 Alertmanager + 租户路由标签 告警静默规则按租户隔离
排查要点: 在 Pool 模式下,如果 OpenTelemetry Collector 的 processor 或 exporter 配置中遗漏了 tenant_id 属性的传递,就会导致租户 A 的 trace 被写入租户 B 的索引。这是最常见的数据泄露场景之一。

2.3 架构模式对比:Silo vs Pool vs Bridge

下面这张 SVG 图展示了三种模式在可观测性数据流中的核心差异,重点突出租户身份在采集、处理、存储三个阶段的传递路径。

三种多租户架构模式在可观测性中的映射 Silo 模式(竖井) 租户A 采集器 租户B 采集器 独立存储 A 独立存储 B 隔离最强,成本最高,运维最重 Pool 模式(池化) 共享采集器(含 tenant_id) 共享存储(按 tenant_id 分区) 隔离最弱,效率最高,需严格上下文传递 Bridge 模式(桥接) 敏感租户独立 普通租户共享 独立存储 共享存储 折中方案,需路由层精确判断 数据泄露风险排序:Pool 模式 > Bridge 模式 > Silo 模式 Pool 模式下,租户 ID 在采集、处理、存储任一环节丢失,都会导致跨租户数据泄露

2.4 可观测性控制平面中的隔离映射

除了数据平面,控制平面(如 Grafana 面板、告警规则、RBAC 权限)同样需要租户隔离。下表总结了三种模式在控制平面上的差异:

控制平面组件 Silo 模式 Pool 模式 Bridge 模式
Grafana 面板 每租户独立 Grafana 实例 共享 Grafana + 文件夹/数据源权限 敏感租户独立,普通租户共享
告警规则 每租户独立规则文件 共享规则 + tenant 标签过滤 核心规则共享 + 租户特定规则
RBAC 权限 每租户独立用户系统 统一用户系统 + 租户角色绑定 混合权限模型
API 网关 每租户独立入口 统一入口 + 租户 Token 解析 按租户等级路由到不同网关
常见故障模式: 在 Pool 模式下,如果 Grafana 的数据源权限配置为“全局可见”,租户 A 的用户可以通过直接修改面板查询语句,访问到租户 B 的指标数据。这是控制平面隔离失效的典型数据泄露场景。

2.5 租户上下文在可观测性管道中的传递路径

下面这张 SVG 图聚焦于 Pool 模式下,租户上下文(tenant_id)在可观测性管道中的完整传递路径,并标注了最容易发生泄露的环节。

Pool 模式下租户上下文传递路径(含泄露风险点) 应用服务 OTel Collector 后端存储 查询服务 Grafana UI ⚠ 租户上下文泄露风险点 ① 应用服务未在 span/log/metric 中注入 tenant_id 属性 ② OTel Collector 的 processor 配置错误,丢弃了 tenant_id 属性 ③ 查询服务未做租户权限过滤,返回了跨租户数据 排查方法:在 OTel Collector 中启用 attributes/tenant_id 的 debug 日志,确认每个数据点都携带正确的租户上下文

2.6 模式选择建议与故障排查方向

  • Silo 模式:适用于金融、医疗等强合规场景,或租户间数据完全不可见的需求。故障排查重点在于独立实例的健康检查和配置一致性。
  • Pool 模式:适用于 SaaS 平台、内部开发环境等成本敏感场景。故障排查重点在于租户 ID 的完整传递链,以及查询层的权限过滤。
  • Bridge 模式:适用于混合合规需求,如部分租户需要数据本地化。故障排查重点在于路由逻辑的正确性和租户分类的准确性。
核心原则: 无论选择哪种模式,可观测性系统中的租户隔离都必须同时覆盖数据平面(采集、处理、存储)和控制平面(查询、告警、权限)。任何一个平面的隔离失效,都可能导致数据泄露。