使用RAG实现数据访问授权的AWS安全架构解析

本文详细介绍了在AWS环境中使用检索增强生成技术时如何通过S3访问授权机制实现数据安全访问控制。通过实际代码示例展示了身份验证、权限验证和数据过滤的全流程,为构建安全的生成式AI应用提供架构指导。

使用RAG实现数据访问授权

组织越来越多地使用大语言模型通过生成式AI驱动的聊天机器人、虚拟助手和智能搜索功能来提供新型客户交互。为了增强这些交互,组织正在使用检索增强生成技术来整合专有数据、行业特定知识和内部文档,以提供更准确、更具上下文关联的响应。

RAG使用概述

RAG架构与搜索引擎有相似之处,但存在关键差异。虽然两者都使用索引数据源来查找相关信息,但它们的数据访问方法不同。搜索引擎提供信息源的链接,要求用户基于其权限直接访问原始数据源。

与搜索引擎不同,RAG实现直接从LLM返回向量数据库结果,绕过了原始数据源的权限检查。虽然元数据过滤有助于控制访问,但它面临两个关键挑战:首先,向量数据库仅定期同步,意味着源数据中的权限更改不会立即反映;其次,复杂的身份权限使得准确过滤结果变得困难。

解决方案概述:Bedrock知识库与S3访问授权

以下示例展示了一个ACME组织希望为其员工创建生成式AI聊天机器人的场景。组织内有多个团队在整个组织中开展项目。

授权流程实现

应用程序流程包含以下步骤:

  1. 用户使用身份提供商登录生成式AI应用程序
  2. 生成式AI应用程序与IAM身份中心交换令牌并代表用户担任角色
  3. 生成式AI应用程序调用S3访问授权以获取用户有权访问的授权列表
  4. 用户向生成式AI应用程序发送查询
  5. 生成式AI应用程序向知识库发送查询
  6. 生成式AI应用程序根据用户授权范围审查知识库返回的数据块
  7. 只有用户有权访问的范围才会传递给LLM生成响应

代码实现示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 执行工作流程
# 1. 为S3访问担任角色
client_s3_oidc = assume_role(
   args.client_id, args.grant_type, args.assertion,
   args.role_arn, args.role_session_name, args.provider_arn
)
    
# 2. 获取调用者的授权S3范围
scopes = get_caller_grant_scopes(client_s3_oidc, args.account)
        
# 3. 基于调用者授权过滤数据块
authorized, not_authorized = check_grant_scopes(chunks, scopes)

解决方案考虑因素

在实施RAG实现的授权架构时,需要理解几个影响安全性、性能和可扩展性的关键考虑因素:

  • 该架构可用于您选择的数据源,前提是知识库返回数据源的URI,并且有API可以调用以验证主体有权访问的内容
  • S3访问授权为主体访问数据源提供授权,可以通过添加键/值标签或数据源来对每个存储桶应用额外的访问控制策略
  • 授权范围列表可能会变得过时,需要决定刷新授权范围列表的频率
  • 根据主体有权访问的数据块和知识库返回的内容,数据块可能在发送到LLM之前被丢弃

结论

本文展示了一种为知识库返回结果提供强授权的架构模式。通过Amazon S3访问授权与Bedrock知识库的实际示例,详细介绍了如何在RAG实现中实施数据访问授权控制机制。

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