将租户隔离定义为跨身份、数据库查询、对象存储、搜索、缓存、队列、导出、日志和管理的端到端不变量,并以拒绝为中心进行验证。
包状态: 参考上下文已准备好供人工审查。合同和测试场景已完成,但不保证采用的实现已通过它们。
决策
从经过身份验证的成员身份解析租户上下文,并在每个数据边界强制执行。绝不单独信任客户端租户标识符;将资源身份和授权绑定到解析出的租户,并在缺少上下文时关闭失败。
范围
- 租户上下文、成员身份、资源所有权、数据库、存储、缓存、搜索、后台工作、导出、分析、日志、支持工具和测试。
- 为多个客户组织提供服务的共享基础设施。
- 控制证据和事件信号。
不包括范围
- 仅使用专用基础设施租户作为唯一有效架构。
- 使用难以猜测的 ID 作为隔离手段。
合同
- 经过身份验证的主体加上选定的成员身份产生一个请求租户上下文;每次资源访问都检查其所有权。
- 数据库访问结构性地应用租户谓词,使用行级控制或存储库保护作为纵深防御。
- 缓存、速率限制、幂等性、游标和锁键包含租户和环境信息。
- 对象键、搜索文档、向量查询、队列和作业负载携带租户上下文,并根据所有权记录进行验证。
- 聚合计数、存在性错误、日志、跟踪、导出、备份和支持视图不能通过间接行为泄露其他租户信息。
- 特权跨租户操作使用独立权限、理由、有限范围、过期和审计。
实施指导
- 创建类型化的租户上下文,禁止在领域代码中从任意请求字段构造。
- 要求数据访问 API 接受上下文,并使普通应用代码无法调用无范围限制的接口。
- 在每个存储和服务层使用合成的租户对测试。
- 检查跟踪和指标维度,避免高基数或敏感租户信息泄露。
失败处理和保障措施
- 缺失或冲突的租户上下文拒绝访问并发出关联安全事件。
- 背景消息中租户所有权无效的进入隔离区;消费者不得猜测。
- 支持模拟在过期或演员/会话变更时结束,并显示持久横幅。
验证和运维
- 测量跨租户拒绝、缺失上下文、所有权不匹配、特权会话使用、无范围查询检测和合成隔离探测结果。
- 在模式、索引、缓存或作业变更后运行拒绝测试。
- 将任何确认的跨租户泄露视为安全事件,并保留证据。
本包中的可执行示例为夹具和验收合同。请从集合根目录运行
python tools/validate.py 检查包结构和元数据;然后在目标仓库中实现并执行场景。
采用假设
example.yaml中的名称和数值为采用配置文件,而非通用默认值。- 采用团队必须将参与者、数据类别、错误词汇和所有权映射到其系统。