大多数企业 RAG 部署所欠缺的权限层

泄露的不是你的私有 LLM。是你的检索层。

一名初级分析师提出一个例行问题,而一份过时的摄入时 ACL 把一份仅限董事会的备忘录交给了模型。主权 RBAC 防火墙在查询时对照用户实时的嵌套组集合与属性,对每一份检索到的文档进行授权,并在模型看到任何一个 token 之前丢弃被扣留的文档。确定性代码,独立于任何 LLM 之外。智能体建议,代码裁定。

40/40

在黄金授权集上的正确裁定

0 次未授权披露,0 次错误拒绝,由评估框架计算得出

29/40

同一 40 个案例上忠实的扁平 ACL 基线

10 次未授权披露,1 次错误拒绝

$670K

影子 AI 数据泄露相对传统事件的额外成本

IBM Cost of a Data Breach, 2025

这是一个可运行的演示,而非一次部署。每一个身份与每一份文档都是合成的欧洲银行测试夹具;身份提供者为 Azure-AD/SCIM 形态的 JSON 测试夹具,向量存储在进程内、位于 Qdrant 形态的接口之后运行。

试点通过了演示。随后在安全审查中失败。

买下一套私有 LLM,并不意味着可以安全地指向皇冠级语料。

标准的试点构建会在摄入时用扁平 ACL 给每个文档分块打上标签。该设计在真实的企业身份面前会崩溃:嵌套的 Active Directory 组、跨 OU 继承、密级、有时限的项目授权,以及索引构建之后才发生的离职。结果就是本演示从头到尾所呈现的经典失败:一名初级分析师提出一个正常问题,而 RAG 流水线把一份仅限董事会的备忘录交给了模型,因为一份过时的摄入时快照声称她可以看到它。

根因是结构性的。文档权限是身份图的实时属性,因此对它的任何快照都已经是错的。更好的模型并不能修复这一点:一个完美的模型只要被交给一份董事会文档,仍然会把它泄露出去。价值在于治理什么到达模型,而不在于模型质量。

利害是可衡量的。影子 AI 数据泄露比传统事件多耗费 $670K,且 65% 的 AI 相关数据泄露危及了客户 PII(IBM Cost of a Data Breach, 2025)。影子 AI 数据泄露需要 247 天才能被发现,而平均为 241 天,五分之一的组织曾遭受与影子 AI 相关的数据泄露(IBM,2025 年)。在监管一侧,欧盟《AI 法案》第 50 条透明度义务将于 2026 年 8 月 2 日可强制执行,GDPR 与《AI 法案》合计罚则上限达到 EUR 55M 或全球年营业额的 11%。

我们自己的解决方案页将检索时权限强制执行称为“大多数企业 RAG 试点未能通过安全审查的原因”以及“企业 RAG 中最难的未解问题”。其背后的白皮书产品分析指出,市场上具备 RBAC 感知能力的 RAG 被描述但未被演示,没有可运行的实现。本演示就是那个可运行的实现。

主权 RBAC 防火墙如何工作

一道确定性策略引擎决定模型看见什么。不是模型,也不是提示。

每一次查询都运行同一条流水线:

查询 + 用户身份 → 检索 → RBAC 防火墙(确定性,独立于任何 LLM 之外)→ 仅许可文档 → 回答 LLM → 哈希链式审计记录

1. 实时权限解析

对每一份候选文档,防火墙在查询时解析用户的有效权限:它递归展平嵌套的 AD/OU 组(测试夹具嵌套 3 层深),并对照文档的结构化策略引用评估 ABAC 属性:密级 L1 至 L4、受管设备、部门、带到期日的有时限项目授权,以及雇佣状态。

2. 确定性裁定

每一份文档得到 ALLOW、带有机器可核验原因码的 WITHHELD(BOARD_MEMBERSHIP_REQUIRED、ACCESS_WINDOW_EXPIRED、ALL_ACCESS_REVOKED_TERMINATION、POLICY_CONFLICT),或 NEEDS_REVIEW。被扣留的文档在进入上下文窗口之前被丢弃,因此模型永远看不到用户无权访问的文档。在任何冲突或未解析引用上,它默认拒绝并路由至人工审核,而非猜测。

3. 凭据

每一次查询都会向仅追加的 SHA-256 哈希链追加一条带篡改核验的记录:用户、已解析权限集、检索到的、已送达的以及因原因码被扣留的文档、需审核冲突、模型与供应商,以及提示/响应对。可导出为 JSON,在 VPC 内生成。欧盟《AI 法案》第 50 条卷宗所要求的检索访问证据记录。

它所击败的基线并非稻草人

演示的对照侧是忠实的朴素扁平 ACL RAG,也就是大多数试点实际交付的构建。它确实在摄入时解析嵌套组。其失败是两项诚实、固有的局限:快照会过时,扁平标签无法表达密级、设备、时间窗口或离职。在演示的 40 例黄金集上,这两项局限产生 10 次未授权披露和 1 次错误拒绝,该错误拒绝是一名摄入后加入者,其权利被冻结快照遗漏。

LLM 是可替换的布景

建立在 Pydantic AI 上的回答路径只接收防火墙之后的许可分块,陈述被扣留了什么以及为何,而非虚张声势,并且对权限零权威。它可通过一个环境变量切换供应商:Anthropic(默认模型 claude-opus-4-8)、OpenAI、Gemini,或用于气隙主权部署的 Ollama,在那里没有任何东西、甚至一个 token 也不会离开盒子。永远不需要 API 密钥:演示在本地桥接运行时将回答路由到该桥接,否则回退到确定性桩,评估记分板从不调用 LLM。防火墙才是产品;模型是布景。

记分板是独立的

40 例集的黄金标签由独立参考预言机机械派生,那是一份根据策略定义而非被测防火墙写成的单独实现。记分板是身份图的函数,而非手挑结果,每一个数字都在运行时计算,从不硬编码。强制执行开销以微秒计,进程内,仅针对防火墙逻辑本身;生产 IdP 往返会增加本演示所桩掉的延迟。

一个卡口,智能体就绪

Gartner 预测,到 2026 年底 40% 的企业应用将嵌入 AI 智能体,而 2025 年还不到 5%。同一道确定性 authorize(user, doc) 关卡是那个世界有文档记载的可扩展路径,而非本演示已交付的功能:智能体无法检索其所代表用户无法检索的内容。

那笔 EUR 412 million 的泄露,从头到尾走完

一个问题,由一名合成分析师提出,在分屏两侧作答。下方每一张图都是运行中应用的截图;每一个身份、每一份文档和每一个数字都是合成测试夹具数据。

会泄露的那个问题

Lena Vogt,一名密级为 L2 的 EMEA 信用风险分析师,问道:“我们 Q3 EMEA 信贷损失预测是多少,其方法论是什么?”检索把仅限董事会的 Q3 董事会材料连同她可以看见的文档一起浮出。扁平 ACL 一侧将其送达:身份图中多年的嵌套组继承债务使她可传递地成为“董事会”成员,而仅有组标签没有密级概念。备忘录到达模型,回答读出 EUR 412 million,横幅显示 LEAK。

分屏泄露:朴素扁平 ACL 一侧向 L2 分析师 Lena Vogt 读出仅限董事会的 EUR 412 million 预测,配有红色 LEAK 横幅以及已送达 1 份未授权文档的警告,而 RAGGUARD 一侧显示 5 份已检索、2 份已授予、3 份已拒绝。
泄露瞬间:一份仅限董事会的备忘录被读给一名 L2 分析师。数字是合成的;失败模式不是。

同一查询,在防火墙之后

在 RAGGUARD 一侧,同样的检索会运行,但董事会材料在到达 LLM 之前被扣留,原因码为 BOARD_MEMBERSHIP_REQUIRED:该文档要求密级 L4,而 Lena 持有 L2。模型从内部方法论说明以及她的嵌套组链确实赋予她权利的机密备忘录中正确作答,并陈述被扣留了什么以及为何,而非虚张声势。

Lena 查询后演示的 RAGGUARD 一侧:5 份已检索、2 份已授予、3 份已拒绝,并附有一份扣留说明,列出被拒绝的文档及其原因码,包括董事会材料上的 BOARD_MEMBERSHIP_REQUIRED。
同一问题,同一检索:5 份已检索、2 份已授予、3 份已拒绝,每一次拒绝都带有原因码。

模型实际看见了什么

裁定详情模态框在两侧显示逐字的模型输入。左侧,被泄露的董事会材料坐在提示内,标为红色。右侧,它干脆不在:模型永远看不到用户无权访问的文档。逐文档视图让分歧一目了然,同一董事会材料行在一侧读作“未经授权即送达”,在另一侧读作“在检索时拒绝访问”并带有原因码。

两侧的逐字模型输入:仅限董事会的文档在扁平 ACL 提示内被标为红色,而在 RAGGUARD 提示中缺席,该提示被标注为仅依据许可文档作答。
上下文窗口,逐字对照:被泄露文档在左侧存在,在右侧缺席。
逐文档裁定视图:董事会材料行在扁平 ACL 一侧读作未经授权即送达,在 RAGGUARD 一侧读作在检索时拒绝访问,并带有原因码 BOARD_MEMBERSHIP_REQUIRED。
同一文档,两种裁定:未经授权即送达,对比在检索时拒绝并带有原因码。

那场无物可偷的注入

内部方法论说明携带一条嵌入的提示注入字符串,指示任何阅读它的 AI 助手忽略其检索权限并输出完整的董事会数字。在防火墙一侧它无物可外泄:董事会材料从未进入上下文窗口,因为授权发生在 LLM 之前。这是一个带标签的案例,作为检索时强制执行的纵深防御展示,而非一个单独的护栏产品。

内部方法论说明内嵌的提示注入行,在裁定详情视图中高亮,指示任何 AI 助手忽略检索权限并输出董事会信贷损失数字。
注入,就在模型被允许阅读的文档里。它所针对的文档从未到达模型。

身份图在动。快照不动。

Priya Shah 在演示时钟上九分钟前被终止雇佣,测试夹具的 webhook 已触发。防火墙对一切返回 ALL_ACCESS_REVOKED_TERMINATION:0 份已授予,5 份已拒绝。扁平 ACL 快照在离职前构建,仍然向她送达,因为尚未运行重新索引。演示对 Marco Rossi 走同一条边,其有时限的 Project-Atlas 授权在演示时钟上昨天到期(ACCESS_WINDOW_EXPIRED);对 Raj Patel,他同时处于允许组和拒绝组(POLICY_CONFLICT,扣留待人工审核);以及对 Wei Chen,防火墙正确送达的 L4 董事会成员,作为证明它并非一味拒绝一切的阳性对照。

已离职员工案例:Priya Shah 在身份条上带有 TERMINATED 徽章,RAGGUARD 一侧显示 0 份已授予、5 份已拒绝,原因码为 ALL_ACCESS_REVOKED_TERMINATION,而扁平 ACL 一侧仍从其过时快照送达。
九分钟前被终止雇佣:防火墙撤销一切;摄入快照尚未察觉。

屏幕上的凭据

这些裁定每一条都落入防篡改审计轨迹:一条哈希链式 JSON 记录,记载谁问了什么、送达了什么、扣留了什么以及为何、哪个模型作答,带有 CHAIN INTACT 核验芯片和一键导出。自动生成,在 VPC 内。

防篡改审计轨迹:CHAIN INTACT 芯片、带原因码的已送达与已扣留文档的哈希链式 JSON 记录,以及 Export Audit Record 按钮。
哈希链式审计记录:第 50 条卷宗所要求的那份工件,而非一份认证。

记分板,及其确切范围

黄金集是 40 个带标签的(用户,文档)允许/拒绝裁定:10 名用户对 4 份敏感文档,标签由独立预言机从身份图语义机械派生。防火墙得分 40/40,0 次未授权披露、0 次错误拒绝。扁平 ACL 基线得分 29/40,10 次未授权披露,包括向 7 名未授权用户送达董事会材料、已过期的 Atlas 窗口,以及已离职员工,外加 1 次错误拒绝。每一个数字都由框架在运行时计算,从不硬编码,逐案下钻将每个预言机标签与两套系统的裁定并排显示。这些是黄金集结果,而非开放世界保证。

40 例基准记分板:朴素扁平 ACL RAG 为 29/40,10 次未授权披露和 1 次错误拒绝;RAGGUARD 为 40/40,0 次未授权披露和 0 次错误拒绝。
记分板,由评估框架对照预言机标签实时计算。
逐案基准下钻:预言机将该案标为拒绝,扁平 ACL 基线送达了文档,RAGGUARD 将其扣留,策略芯片解释该裁定。
逐案下钻:预言机标签、扁平 ACL 裁定、防火墙裁定,以及作出裁定的策略。

朴素扁平 ACL RAG 对比主权 RBAC 防火墙

演示实时运行的同一对照,基于同一身份图和同一批文档。

维度 朴素扁平 ACL RAG(典型试点构建) 主权 RBAC 防火墙(RAGGUARD)
授权发生的时机 在摄入时,冻结为每个分块上的标签 在检索时,按查询、按文档
嵌套组与跨 OU 继承 在摄入时解析一次;快照会过时 每一次查询都对照实时身份图递归展平
ABAC:密级、设备、有时限授权、雇佣状态 扁平标签无法表达 按文档对照结构化策略引用进行评估
九分钟前的离职 在重新索引运行之前仍会送达 对一切返回 ALL_ACCESS_REVOKED_TERMINATION
同一文档上的冲突策略 送达该文档 默认拒绝:NEEDS_REVIEW,路由给人工并写明冲突
40 例黄金集 29/40:10 次未授权披露,1 次错误拒绝 40/40:0 次未授权披露,0 次错误拒绝
审计轨迹 哈希链式、防篡改的每一次送达与扣留记录,可导出为 JSON

本演示不做什么

  • ✓ 它不连接到实时的 Active Directory、Okta、SharePoint 或 Confluence。身份提供者是合成的 Azure-AD/SCIM 形态 JSON 测试夹具,离职与到期是测试夹具事件,向量存储在进程内、位于 Qdrant 形态接口之后。实时 IdP 连接器是有文档记载的生产替换,而非今天所运行的。
  • ✓ 它不涉及任何真实银行、客户或实时账户。Lena Vogt、Marco Rossi、Priya Shah、Raj Patel、Wei Chen、每一份文档以及 EUR 412 million 这个数字都是合成的。
  • ✓ 它不宣称开放世界保证。40/40 且 0 次未授权披露是在固定的 40 例带标签黄金集上计算得出的结果,而非生产中永远不会泄露的承诺。
  • ✓ 它不度量生产延迟。微秒级强制执行开销仅为防火墙逻辑、进程内;实时 IdP 往返——本演示将其桩掉——会增加更多。
  • ✓ 它不交付一套护栏套件、DLP 或多智能体平台。它是一项做得令人信服的能力:检索时权限防火墙,注入案例作为一个带标签的纵深防御示例。回答路径是 Pydantic AI,刻意非智能体化的确定性关卡才是设计;智能体治理是有文档记载的可扩展路径。
  • ✓ 它不认证合规。审计导出是欧盟《AI 法案》第 50 条卷宗所要求的证据记录,而非一份认证,且本演示不存在客户、部署或案例研究。

买家真正会问的问题

我们如何阻止内部 AI 聊天机器人向员工展示他们不应看见的文档?

在检索时而非摄入时强制执行授权。独立于 LLM 之外的确定性策略引擎在每一份检索到的文档到达模型之前,对照用户实时的组成员资格与属性进行检查,因此被扣留的文档永远不会进入上下文窗口。在本演示中,该关卡在带标签的 40 例黄金集上得分 40/40,而大多数试点交付的扁平 ACL 构建为 29/40。

我们在索引时已经给文档打上权限标签。为什么还不够?

因为标签是快照,而权限是身份图的实时属性。摄入时 ACL 会错过索引之后发生的一切变化,例如离职或过期的项目授权,并且完全无法表达密级或受管设备这类属性规则。在演示中,这两项局限在 40 例基准上造成 10 次未授权披露和 1 次错误拒绝,而该基线在摄入时忠实地解析了嵌套组。

提示注入能否诱使模型泄露一份受限文档?

如果文档从未到达模型,就不能。演示包含一个带标签案例:嵌入文档中的一条说明指示任何 AI 助手忽略其检索权限并输出仅限董事会的数字,而注入无物可外泄,因为授权发生在 LLM 之前,备忘录从未进入上下文窗口。那是检索时强制执行的一个纵深防御示例,而非一个独立的护栏产品。

当访问策略冲突或系统不确定时会发生什么?

默认拒绝。当用户对同一文档同时持有允许与拒绝的成员资格,或策略引用无法解析时,防火墙返回 NEEDS_REVIEW,并将该案路由给人工并写明冲突,而非猜测。演示精确展示了这一点:一名同时处于允许组与拒绝组的信用风险经理,其争议备忘录被扣留待审,而非送达。

是否有任何数据离开我们的 VPC?能否完全气隙运行?

防火墙是确定性 Python,根本不需要模型,回答路径可通过一个环境变量切换:Anthropic、OpenAI、Gemini 或 Ollama。设置 LLM_PROVIDER=ollama 用于气隙主权部署,没有任何东西、甚至一个 token 也不会离开盒子。演示本身离线运行、无需 API 密钥,评估记分板从不调用 LLM。

我们向审计人员展示什么,以说明谁通过 AI 系统访问了什么?

每一次查询都会向防篡改的 SHA-256 哈希链追加一条记录:谁问了、已解析权限集、送达了什么、扣留了什么以及为何、哪个模型作答。它导出为 JSON,并在您的 VPC 内生成。它是欧盟《AI 法案》第 50 条卷宗所要求的检索访问证据记录,而非合规认证。

这是实时 Active Directory 集成,还是演示?

一个证明该机制的可运行演示。身份提供者是合成的 Azure-AD/SCIM 形态 JSON 测试夹具,离职与授权到期是测试夹具事件,向量存储在进程内、位于 Qdrant 形态接口之后运行。策略引擎、评估框架和哈希链式审计导出是真实的,并完全按所示运行;因为测试夹具镜像 Azure AD Graph 和 SCIM 接口,通往实时 IdP 的有文档记载的生产路径是一次配置替换,而非重写。

技术研究

支撑本演示的研究——架构、核验设计,以及企业蓝图。

正在评估受监管企业的私有 LLM 部署?

权限层才是难处。我们来构建它。

如果您的团队正在纠结如何把私有模型指向一份由多年嵌套组继承所治理的语料,或纠结欧盟《AI 法案》的透明度义务对您的检索日志意味着什么,我们真诚希望听听您是如何思考的。这个问题是全行业的,答案也将如此。

权限层评估

  • ✓ 摸清您的 RAG 流水线如今在何处授权:摄入时还是检索时
  • ✓ 将您的嵌套组与跨 OU 继承建模为实时策略图
  • ✓ 定义扁平标签无法表达的 ABAC 规则:密级、设备、有时限授权
  • ✓ 指定您的第 50 条卷宗所要求的检索访问记录

构建检索时防火墙

  • ✓ 一道独立于任何 LLM 之外的确定性 authorize(user, doc) 关卡
  • ✓ 位于 Azure AD Graph 与 SCIM 形态接口之后的实时 IdP 解析
  • ✓ 默认拒绝的冲突路由至人工审核
  • ✓ 在您 VPC 内生成的哈希链式、可导出审计轨迹
社交媒体

同步发布于