Cloudflare AI Search 租户隔离,在同一应用开始为拥有私有文档的多个组织提供服务时就非常重要。生成答案之前,检索结果就可能泄露信息;即使可见答案看似无害,引用也可能暴露文档。权限边界必须覆盖整个搜索流程。

根据已认证应用身份推导租户范围,再选择允许的搜索实例,或应用由服务器控制的强制过滤器。让导入、检索、引用和缓存遵循同一访问设计。通过负面测试证明隔离,包括租户切换、过时会话,以及直接打开其他租户来源的尝试。

设想一个 SaaS 产品,让经销商上传供应商协议。每家经销商都希望助手解释自己的交付和折扣条款,产品还可能提供所有人共享的公开手册。只有私有材料绝不越过预期边界,组合这些来源才有用。

本文提供建议的应用设计和验收方法,不声称单靠命名空间或过滤器就能满足所有安全要求。

Cloudflare AI Search 租户隔离始于检索之前

Cloudflare 的多租户指南 介绍了独立实例和共享实例的租户搜索方案。选择架构前,需要先建立应用身份模型,确定租户代表什么,以及哪些用户可以在其中操作。

从已验证会话或等价可信上下文取得租户。请求参数可以表示用户希望选择什么,但服务器必须确认该选择被允许。绝不能让模型提供权威租户范围。

对于属于多个经销商的同事,应明确当前组织。切换组织时,应更改允许的来源集及相关对话上下文。切换前检索到的私有段落,不应悄悄留在下一次回答中。

边界可信输入应拒绝的不可信替代项
租户选择已认证成员资格及当前范围浏览器提供的任意租户标识符
实例路由服务器控制的映射模型编造的实例名称
文档范围已验证来源归属与权限上传文件自称所属租户
引用访问打开文档时的当前授权仅持有结果 URL

比较独立实例与强制过滤

独立实例可能让数据边界更易检查,但增加生命周期和配置工作。共享实例可以减少这些开销,但每条相关检索路径都必须应用正确范围,不得有可选绕过。

Cloudflare 的命名空间文档 解释了实例如何分组,并通过绑定访问。仔细检查绑定范围。逻辑分组不能证明应用已正确路由每位调用者。

设计选择待评估的运维收益仍需承担的责任
独立租户实例来源与生命周期分离更清晰正确路由及成员资格检查
带租户过滤的共享实例共享导入和索引管理所有检索路径强制应用范围
独立公开集合明确共享材料防止私有内容导入该集合
受限文档子集租户内部更精细访问当前文档级权限

根据权限模型和运维要求选择,而不只看租户数量。不论实例如何布局,内部存在受限团队的租户,都可能需要组织级边界之外的控制。

建议流程:验证当前租户成员资格,选择允许的检索范围,仅返回已授权证据,检查引用、缓存与历史。
建议设计:不允许跨租户路径。 查看完整尺寸示意图

导入和查询都应应用范围

内容进入系统时就必须确定文档归属。使用可信应用元数据,将每个来源关联到租户和预期可见性。未经调用者权限检查,不要接受上传文件自称的归属。

更新期间保持来源标识符稳定。替换协议应更新目标租户的材料,删除应针对正确来源和派生内容。租户之间标识符冲突,即使搜索尚未运行,也可能破坏隔离。

分开公开和私有导入决策。共享手册可以有意设为公开,但供应商协议不应仅因扩展名或文件夹名称像手册,就进入公开集合。

记录哪种导入身份可以读取每个来源位置。应用可能正确过滤结果,但权限过大的来源连接器仍导入本不该处理的材料。范围复核必须覆盖管道两端。

将过滤作为不可选的应用策略

Cloudflare 提供检索过滤文档 。将当前应用权限转化为选定过滤契约,并测试服务器实际生成的请求。

不要暴露可由普通客户端替换的通用过滤对象。同样,不要添加“范围内查询没有结果就取消过滤重试”的便捷回退。对于未授权或不存在的信息,没有结果是有效且必要的结果。

将应用范围与文档类型、语言等用户偏好分开。用户可以请求更窄的搜索,但不能通过更改搜索选项移除强制访问条件。

测试所有能到达检索的路径:搜索结果、生成答案、导出、智能体工具和管理预览。搜索页面安全,不能弥补查询同一集合但没有过滤的工具端点。

保护引用、缓存与对话历史

生成答案可能省略私有段落,却返回暴露其他租户信息的引用标题或 URL。检查所有返回字段,而不只检查答案文字。

按当前文档授权打开引用。如果来源通过应用提供,返回前先验证调用者;如果使用外部文档系统,确认链接保留该系统访问规则。

任何应用缓存设计都应包含租户与相关权限上下文。不能仅因问题文字相同,就将适合某组织的缓存答案变成共享答案。

用户更换组织或失去权限后,对话历史仍可能保留检索段落。决定哪些历史可重新打开,哪些上下文可提供给模型。撤销应明确影响派生副本,而不只是实时搜索查询。

建议决策:当前身份是否允许访问此来源?区分已授权范围与范围之外,保持完整流程隔离。
建议设计:不允许跨租户路径。 查看完整尺寸示意图

用负面测试发现真实泄露

使用带有独特、清晰标记的合成租户文档。让不同组织的用户提问同一问题,并断言另一组织的标记绝不出现在段落、答案、元数据或引用中。

测试预期结果
修改请求的租户标识符服务器拒绝或保持允许范围
查询另一租户已知短语不返回私有段落、答案或引用
打开另一租户文档 URL拒绝访问
切换当前组织检索和模型上下文遵循新允许范围
会话期间移除成员资格后续访问遵循当前授权
跨租户重复缓存问题不跨租户重用答案

将已授权多租户管理员与普通用户分开测试。管理排查需要独立权限和证据。不要把管理员的广泛结果当成普通用户验收标准。

路由、导入、过滤和缓存变化后,重复隔离测试集。单纯搜索相关性测试无法发现权限回归;非常相关的结果,可能恰好就是用户绝不该看到的文档。

为权限生命周期编制预算

开发工作取决于成员资格、文档权限、来源集成与检索路径数量。简单租户过滤演示,没有包含真实 SaaS 产品需要的大量生命周期工作。

要求 GBP 方案报价,包含配置、租户变化、删除、撤销与验收。说明隔离是止于组织边界,还是包括组织内的团队和单独文档。

工作领域应要求的证据
身份租户成员资格与切换规则
导入已验证归属与来源访问映射
检索每条路径由服务器控制范围
派生内容缓存、引用和历史策略
运维配置、删除和事故手册

范围明确的 AI 集成试点 可以在引入私有数据之前,测试合成组织与代表性文档。请提供成员模型和来源权限,索取租户搜索方案 。让隔离成为可测试契约,而不只是架构图上令人安心的标签。

常见问题

每个租户都需要独立 AI Search 实例吗? 不一定。Cloudflare 文档介绍了独立实例与共享实例方案。选择前应比较权限模型、配置工作和强制过滤的可靠性。两种方案都不能取消应用授权。

浏览器可以发送租户标识符吗? 可以请求某项选择,但服务器必须根据已认证成员资格验证。不能将任意浏览器参数或模型生成值视为访问权限来源。

命名空间是授权系统吗? 命名空间通过文档规定的绑定模型组织实例访问。应用仍需要认证调用者并正确路由。检查绑定范围,用普通用户负面测试证明边界。

过滤搜索为空时应该去掉过滤器重试吗? 不应该。为了获得答案而移除强制范围,会暴露另一租户材料。应返回有用的无结果状态,或调查索引与权限配置,而不是扩大用户访问。

引用会泄露信息吗? 会。即使生成答案省略了私有信息,标题、URL、摘录和文档下载仍可能泄露。测试完整响应,并在打开来源时要求当前授权。

用户失去租户成员资格后会怎样? 后续访问应遵循当前权限。除实时检索外,还应定义对打开会话、缓存答案、对话历史及派生副本的影响。在活动会话中测试撤销。

隔离试点应该证明什么? 证明普通用户不能检索其他租户私有来源,不能通过返回元数据推知私有信息,也不能打开来源。包含范围篡改、租户切换、缓存重用、来源更新与撤销。