写点什么

基于 JWT 的多租户 RAG 技术实现解析

作者:qife
  • 2025-08-05
    福建
  • 本文字数:1263 字

    阅读完需:约 4 分钟

近年来,大型语言模型(LLM)的出现加速了 AI 在各行业的应用。然而,为了进一步增强 LLM 能力并有效利用最新信息和领域知识,与外部数据源的集成至关重要。检索增强生成(RAG)技术因此受到广泛关注。


RAG 通过从现有知识库检索相关信息,将其整合到 LLM 输入中生成更准确的响应。该技术已应用于产品开发的技术文档查询、客户支持 FAQ 应答,以及基于实时数据的决策系统。


在软件即服务(SaaS)场景中,多租户架构要求从单一代码库为多个租户提供服务。当使用 LLM 实现 AI 功能时,RAG 技术能利用各租户特定数据提供个性化服务。以客服呼叫中心 SaaS 为例,每个租户的历史咨询记录、FAQ 和产品手册构成其专属知识库,RAG 系统可据此生成符合租户业务场景的精准响应。


然而,从安全角度考虑,多租户环境下的数据隔离成为关键挑战。某中心的 Bedrock 知识库简化了 RAG 实现,当选择 OpenSearch 作为向量数据库时,存在两种方案:


  • OpenSearch 无服务器版:支持通过元数据过滤实现租户隔离,但写入权限未分离

  • OpenSearch 服务版:具备细粒度访问控制(FGAC),但知识库仅支持单一 IAM 角色访问


本文提出的解决方案结合 JSON Web Token(JWT)与 FGAC 实现租户隔离,主要技术优势包括:


  1. 动态租户识别:JWT 负载包含租户上下文属性,系统可动态识别请求所属租户

  2. OpenSearch FGAC 集成:直接利用 JWT 中的属性信息进行角色映射,实现索引或文档级访问控制

解决方案架构

系统采用 OpenSearch 作为向量数据库,整体流程如下:


  1. 租户用户在 Amazon Cognito 用户池中创建,登录时通过 Lambda 触发器将租户 ID 注入 JWT

  2. 用户查询通过 API Gateway 传递至 Lambda,附带 JWT 令牌

  3. 查询文本通过某中心的文本嵌入模型向量化

  4. 从 DynamoDB 获取目标 OpenSearch 域和索引信息

  5. 在 OpenSearch 执行向量搜索,将结果作为上下文输入 LLM 生成响应


关键实现包含三个数据隔离模式:


  • 域级隔离:每个租户使用独立 OpenSearch 域,FGAC 角色授予全索引访问权限

  • 索引级隔离:多租户共享 OpenSearch 域,FGAC 角色限制仅能访问特定租户索引

  • 文档级隔离:多租户共享域和索引,通过 FGAC 文档级安全查询实现数据隔离

技术实现细节

  1. JWT 生成与验证:通过 Cognito 用户池预生成令牌 Lambda 触发器,将 DynamoDB 存储的租户信息注入 JWT

  2. 请求路由:解析 JWT 获取租户 ID,查询 DynamoDB 路由表确定目标 OpenSearch 端点

  3. FGAC 配置:在 OpenSearch 中创建租户专属角色,将 JWT 中的租户 ID 属性映射为后端角色

  4. 隔离模式实现

  5. 文档级隔离通过dls参数设置租户 ID 过滤条件

  6. 索引级隔离限制index_patterns为租户特定索引

  7. 域级隔离通过独立域名实现物理隔离

生产环境建议

  • 考虑采用 DynamoDB 分区模型优化多租户数据存储

  • 可结合动态 IAM 策略增强资源访问控制

  • 根据隔离严格性、管理复杂度等需求选择合适的隔离模式


该方案通过 AWS CDK 实现基础设施即代码部署,完整代码已开源在 GitHub 仓库。清理资源时只需执行cdk destroy命令即可删除所有关联资源。


本文展示的方案适用于需要严格租户数据隔离的 SaaS 场景,开发者可根据实际需求选择三种隔离模式中的最优方案。更多多租户 RAG 实现方案可参考某机构技术文档中的相关资源。更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
基于JWT的多租户RAG技术实现解析_OpenSearch_qife_InfoQ写作社区