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

本文详细介绍了使用JWT令牌和细粒度访问控制在OpenSearch服务中实现多租户检索增强生成的技术方案,涵盖三种数据隔离模式、身份验证流程以及系统架构设计,为SaaS应用提供安全的AI增强解决方案。

多租户RAG实现方案:基于JWT的OpenSearch数据隔离技术

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

RAG是一种从现有知识库或文档中基于用户输入搜索相关信息,并将这些信息融入LLM输入以生成更准确、上下文更合适回复的技术。该技术正被广泛应用于从产品开发中的技术文档使用到客户支持中的FAQ回答,乃至基于最新数据的决策支持系统。

多租户架构的价值与挑战

SaaS提供商可以采用多租户架构,通过单一代码库向多个租户提供服务。随着租户使用服务,他们的数据在不断积累的同时受到适当访问控制和数据隔离的保护。在此类环境中使用LLM实现AI功能时,RAG使得利用每个租户的特定数据提供个性化AI服务成为可能。

然而,通过RAG使用租户特定数据从安全和隐私角度提出了技术挑战。主要关注点是实现安全架构,保持租户间的数据隔离,并防止意外数据泄漏或跨租户访问。

技术方案概述

本方案使用OpenSearch服务作为向量数据存储,用于存储RAG中的知识源。解决方案采用JSON Web Token(JWT)和细粒度访问控制(FGAC)组合,结合租户资源路由实现租户隔离模式。

系统架构流程

  1. 各租户的RAG应用用户在Amazon Cognito用户池中创建为用户,登录前端时获得包含租户ID信息的JWT
  2. 用户在前端发起聊天时,用户查询通过API Gateway与JWT一起传递给Lambda函数
  3. 用户查询与某中心的文本嵌入模型结合进行向量化
  4. 从DynamoDB获取检索所需的域和索引信息
  5. 在OpenSearch服务上执行向量搜索,从索引中检索与查询相关的信息
  6. 检索到的信息作为上下文添加到提示中,并传递给某中心的LLM生成响应

JWT在多租户数据隔离中的有效性

OpenSearch服务提供多种管理多租户数据的方法:域级隔离、索引级隔离和文档级隔离。为实现索引和文档级别的访问权限隔离,可以使用OpenSearch安全插件支持的FGAC。

使用JWT具有以下优势:

  • 动态租户识别:JWT有效负载可包含属性信息(租户上下文)来识别租户
  • 与OpenSearch中FGAC的集成:FGAC可直接使用JWT中的属性信息进行角色映射

三种数据隔离模式实现

域级隔离

为每个租户分配单独的OpenSearch服务域。在此隔离模式中,由于域专用于每个租户,因此不需要在域内进行数据隔离。

索引级隔离

多个租户共享一个OpenSearch服务域,为每个租户分配单独的索引。每个租户只能访问自己的索引。

文档级隔离

多个租户共享OpenSearch服务域和索引,使用FGAC文档级安全性对索引内的租户数据进行访问权限隔离。每个索引包含一个存储租户ID信息的字段,并为该字段设置文档级安全查询。

技术实现细节

用户认证与JWT生成

解决方案使用Amazon Cognito用户池进行RAG应用用户认证。通过在Amazon Cognito用户池中配置预令牌生成Lambda触发器,检索DynamoDB中存储的每个用户的租户ID信息并将其添加到令牌中。

请求路由机制

DynamoDB表存储租户ID、目标OpenSearch服务域和索引的映射信息。通过解析JWT获取租户ID,使用该租户ID检索路由信息确定路由目的地。

访问权限控制

FGAC为租户数据创建专用角色进行访问权限控制。租户用户和FGAC租户角色之间的映射通过后端角色实现。在OpenSearch服务的JWT认证中,可以将JWT有效负载中要与后端角色链接的属性指定为角色键。

部署与清理

结论

本文介绍的解决方案在多租户RAG中使用OpenSearch服务作为向量数据存储,利用JWT和FGAC实现数据隔离和路由。该方案结合JWT和FGAC实现严格的租户数据访问隔离和路由,需要使用OpenSearch服务。

多租户RAG使用对SaaS公司非常重要,策略根据数据隔离严格性、管理简便性和成本等要求而有所不同。该解决方案实现了多种隔离模型,可根据需求进行选择。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计