4. 权限隔离核心概念

在传统信息系统中,权限隔离已经是一套成熟的安全工程体系;但当它迁移到RAG(检索增强生成)架构时,边界被重新定义。RAG的权限问题不再只是“谁能登录系统”,而是“谁能让大模型在生成答案时看到哪些切片、引用哪些文档、暴露哪些字段”。身份认证、授权模型、最小权限原则与职责分离,必须在检索、重排、生成、审计四个环节中重新映射,否则模型会成为一个“越权信息聚合器”。

一、核心原理:从“系统入口”到“知识切片”的权限下沉

传统权限控制通常发生在应用层和数据库层,而RAG的权限控制必须下沉到向量库、文档块、元数据过滤器和提示词组装器。其核心原理可以概括为三点:

  • 身份认证是起点,不是终点。认证解决“你是谁”,但在RAG中,同一个用户在不同业务场景下可能拥有不同数据域身份,例如“信贷审批员”与“合规审计员”看到同一份客户报告时,可访问的字段和段落不同。
  • 授权模型决定“检索什么”。RBAC、ABAC、ReBAC分别从角色、属性、关系三个维度描述权限,它们最终要转化为向量检索时的元数据过滤条件,而不是仅停留在接口鉴权层。
  • 最小权限与职责分离是约束条件。最小权限要求每次检索只返回完成当前任务所必需的最小切片集合;职责分离要求敏感操作(如查看完整客户画像、导出原始文档、修改权限策略)不能由同一主体在无监督下完成。

关键映射:在RAG中,权限不是“文档级”的粗粒度开关,而是“切片级+字段级+引用级”的细粒度过滤。一个PDF中的不同段落可能属于不同密级,必须通过元数据标签与过滤器在检索阶段完成隔离,而不是在生成后靠提示词“请不要泄露”。

二、授权模型在RAG中的映射与对比

RBAC、ABAC、ReBAC并非互斥,实际金融RAG系统常采用组合策略。下表给出三者在RAG检索链路中的映射方式与适用场景。

授权模型 核心描述 RAG中的映射对象 典型金融场景 局限
RBAC 基于角色分配权限 角色→可检索的文档集合/索引分区 客户经理、风控专员、合规官 角色爆炸,难以表达动态条件
ABAC 基于属性(用户、资源、环境)动态判断 用户部门+文档密级+时间+地域→过滤表达式 投行项目组按交易阶段访问尽调材料 策略复杂,需统一元数据标准
ReBAC 基于实体间关系图授权 用户-客户-账户-文档的关系路径→可访问切片 私行客户经理仅能看自己名下客户资料 关系图维护成本高,查询延迟敏感

在工程实现上,授权模型最终要转化为检索过滤参数。例如,使用ABAC策略时,向量库查询需要携带过滤条件:

{
  "query_vector": [...],
  "filter": {
    "and": [
      {"eq": {"doc_class": "internal"}},
      {"in": {"department": ["risk", "compliance"]}},
      {"lte": {"sensitivity_level": 3}},
      {"eq": {"region": "CN"}}
    ]
  },
  "top_k": 8
}

如果过滤条件缺失或写错,模型可能检索到越权切片。因此,权限策略必须与检索服务解耦,由独立的策略决策点(PDP)生成过滤器,检索服务只负责执行。

三、方法流程:认证、授权、过滤、审计的闭环

一个可落地的金融RAG权限隔离流程通常包含以下步骤:

  1. 身份认证:用户通过OIDC/SAML登录,获取包含部门、角色、客户关系、密级许可的令牌。
  2. 策略决策:PDP根据RBAC/ABAC/ReBAC策略,计算当前请求可访问的文档ID集合或元数据过滤表达式。
  3. 检索过滤:向量检索与关键词检索同时应用过滤器,确保候选切片均在授权范围内。
  4. 重排与裁剪:对候选切片进行字段级脱敏,例如隐藏账号、身份证号、交易流水中的敏感字段。
  5. 生成约束:提示词中仅注入已授权切片,并要求模型引用来源,禁止编造未授权信息。
  6. 审计留痕:记录用户、查询、命中切片、过滤策略、生成答案与引用来源,支持事后追溯。

实践提示:审计日志应记录“被过滤掉的切片ID”而非仅记录“返回的切片ID”。前者能帮助发现策略配置错误或越权尝试,后者只能证明系统正常运行。

四、案例与场景:私行客户经理的越权检索复盘

某私人银行部署RAG助手,客户经理可查询产品说明、市场研报和客户持仓分析。某客户经理A通过提问“帮我总结一下张某某的持仓风险”,系统返回了张某某的完整持仓明细。但张某某并非A名下客户,而是另一位客户经理B的客户。

复盘发现三个问题:

  • 认证信息未传递到检索层:应用层只校验了登录态,未将“客户经理-客户”关系传入向量库过滤器。
  • 元数据缺失:客户持仓切片未标注“归属客户经理”字段,导致ReBAC关系无法生效。
  • 最小权限未落实:检索返回了完整持仓明细,而任务只需要“风险等级摘要”,字段级裁剪缺失。

修复方案是:在切片元数据中增加owner_rm、customer_id、sensitivity_level字段;检索时强制注入ReBAC关系过滤;对持仓明细字段按任务需求进行脱敏或聚合。修复后的过滤配置如下:

filter = {
  "and": [
    {"eq": {"owner_rm": current_user.id}},
    {"eq": {"customer_id": requested_customer_id}},
    {"lte": {"sensitivity_level": task_required_level}}
  ]
}

常见误区:把权限控制寄托在提示词上,例如“请只回答用户有权查看的内容”。提示词不是安全边界,模型可能被诱导绕过。权限必须在检索前和检索中完成,生成阶段只做最后一道引用校验。

五、最小权限与职责分离的RAG落地清单

最小权限原则在RAG中体现为“按任务最小切片集检索”,职责分离则体现为“策略制定、策略执行、审计复核”三权分立。以下清单可用于自查:

  • 是否每个切片都有密级、部门、归属人、客户ID等元数据?
  • 检索过滤器是否由独立PDP生成,而非由前端拼接?
  • 是否支持字段级脱敏,而非仅文档级授权?
  • 敏感操作(导出、批量查询、修改策略)是否要求双人复核?
  • 审计日志是否记录过滤条件、命中切片和被拒绝切片?
  • 是否定期对权限策略进行回归测试,验证越权查询会被拦截?
RAG权限隔离:从身份到切片的映射链路 身份认证 OIDC / SAML 角色·部门·关系 策略决策 PDP RBAC / ABAC / ReBAC 生成过滤表达式 检索过滤 向量库 + 元数据 切片级隔离 生成与审计 引用校验 日志留痕 切片元数据示例 doc_class: internal department: risk sensitivity_level: 3 owner_rm: u1024 region: CN 最小权限原则 按任务返回最小切片集 字段级脱敏与聚合优先 拒绝默认全量检索 职责分离 策略制定与策略执行分离 敏感导出需双人复核 审计日志独立存储

总结来看,RAG权限隔离的本质是把传统安全模型“翻译”成检索过滤器和切片元数据。身份认证提供主体信息,RBAC/ABAC/ReBAC提供策略表达,最小权限与职责分离提供约束边界,四者共同作用,才能让大模型在金融场景中“只看到该看的,只说出能说的”。