目 录CONTENT

文章目录

将 Amazon Bedrock 代理连接到跨账户知识库

Administrator
2025-11-08 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

📢 转载信息

原文链接:https://aws.amazon.com/blogs/machine-learning/connect-amazon-bedrock-agents-to-cross-account-knowledge-bases/

原文作者:Kunal Ghosh, Arghya Banerjee, Indranil Banerjee, and Vinayak Datar


组织需要无缝访问其结构化数据存储库,以为智能 AI 代理提供支持。然而,当这些资源跨越多个 AWS 账户时,集成挑战可能会随之出现。本文探讨了一种实用的解决方案,用于将 Amazon Bedrock 代理连接到位于不同 AWS 账户中的 Amazon Redshift 集群中的知识库。

挑战

使用 Amazon Bedrock 构建 AI 代理的组织可以在 Amazon Redshift 集群中维护其结构化数据。当这些数据存储库与 AI 代理位于不同的 AWS 账户中时,它们会面临一个重大限制:Amazon Bedrock 知识库 不原生支持跨账户 Redshift 集成。

这给拥有多账户架构的企业带来了挑战,这些企业希望:

  • 利用 Redshift 中现有的结构化数据来支持其 AI 代理。
  • 在不同 AWS 账户之间保持关注点分离。
  • 避免在账户之间复制数据。
  • 确保适当的安全和访问控制。

解决方案概述

我们的解决方案通过一个安全的、无服务器的架构实现了跨账户知识库集成,该架构在允许 AI 代理查询结构化数据时保持了安全的访问控制。该方法使用 AWS Lambda 作为中介来促进安全的跨账户数据访问。

Cross-Account Amazon Bedrock knowledge base architecture

如上图所示的操作流程:

  1. 用户在配置于 agent 账户中的 Amazon Bedrock Agents 中输入自然语言问题。
  2. Amazon Bedrock Agents 通过操作组(Action Groups)调用一个 Lambda 函数,该函数提供了对上图中配置在 agent-kb 账户中的 Amazon Bedrock 知识库的访问权限。
  3. agent 账户中运行的操作组 Lambda 函数会承担在 agent-kb 账户中创建的 IAM 角色,以便连接到 agent-kb 账户中的 知识库
  4. agent-kb 账户中的 Amazon Bedrock 知识库使用同一账户中创建的 IAM 角色来访问 Amazon Redshift 数据仓库并查询其中的数据。

该解决方案遵循以下关键组件:

  1. 位于 agent 账户中的 Amazon Bedrock agent,用于处理用户交互。
  2. 位于 agent-kb 账户中 VPC 和私有子网内的 Amazon Redshift serverless 工作组,包含结构化数据。
  3. 使用 Amazon Redshift serverless 工作组作为结构化数据源的 Amazon Bedrock 知识库
  4. 位于 agent 账户中的 Lambda 函数
  5. 用于将 agent 账户中的代理连接到 Lambda 函数的 操作组配置
  6. 启用安全跨账户访问的 IAM 角色和策略

先决条件

此解决方案要求您具备以下条件:

  1. 两个 AWS 账户。如果您没有 AWS 账户,请 创建 AWS 账户。在后续步骤中将设置两个账户所需的特定权限。
  2. 安装 AWS CLI (2.24.22 – 当前版本)
  3. 为每个账户设置使用 IAM 用户凭证进行 AWS CLI 身份验证
  4. 确保已安装 jqjq 是轻量级的命令行 JSON 处理器。例如,在 Mac 上您可以使用命令 brew install jq(jq-1.7.1-apple – 当前版本)来安装它。
  5. 导航到 Amazon Bedrock 控制台,并确保在 agent-kb 账户中启用了 meta.llama3-1-70b-instruct-v1:0 模型的访问权限,并在 agent 账户的 us-west-2, US West (Oregon) AWS 区域中启用了 us.amazon.nova-pro-v1:0 模型的访问权限。

假设

我们将拥有 Amazon Bedrock 代理的 AWS 账户配置文件称为 agent 配置文件。同样,拥有 Amazon Bedrock 知识库、Amazon Redshift Serverless 和结构化数据源的 AWS 账户配置文件称为 agent-kb。我们将使用 us-west-2 US West (Oregon) AWS 区域,但您可以根据需要选择另一个 AWS 区域(先决条件将适用于您选择部署此解决方案的 AWS 区域)。我们将为 agent-kb 使用 meta.llama3-1-70b-instruct-v1:0 模型。这是 us-west-2 中可用的按需模型。您可以自由选择具有跨区域推理的其他模型,但这需要相应地更改角色和策略,并在所有可用区域启用模型访问。根据我们为本解决方案选择的模型,AWS 区域必须是 us-west-2。对于 agent,我们将使用像 us.amazon.nova-pro-v1:0 这样的 Amazon Bedrock 代理优化模型。

实施演练

以下是分步实施指南。请确保在两个账户中对所有步骤使用相同的 AWS 区域。

这些步骤旨在从头开始部署和测试端到端解决方案,如果您已经运行了其中一些组件,则可以跳过这些步骤。

    1. 记下 agent 和 agent-kb 账户中的 AWS 账户编号。在实施步骤中,我们将它们引用如下:
      Profile AWS account Description
      agent 111122223333 Agent 的账户
      agent-kb 999999999999 知识库的账户

      注意:这些步骤使用示例配置文件名和账户编号,请在运行前替换为实际值。

    2. agent-kb 账户中创建 Amazon Redshift Serverless 工作组:
      1. 登录 agent-kb 账户
      2. 按照 workshop 链接 在私有子网中创建 Amazon Redshift Serverless 工作组
      3. 记下命名空间、工作组和其他详细信息,并遵循其余的 动手实践 workshop 说明。
    3. agent-kb 账户中设置数据仓库
    4. agent-kb 账户中创建 AI 知识库。记下知识库 ID。
    5. agent-kb 账户中训练 AI 助手
    6. agent-kb 账户中测试自然语言查询。您可以在 aws-samples git 仓库中找到代码:sample-for-amazon-bedrock-agent-connect-cross-account-kb
    7. 在两个账户中创建必要的角色和策略。使用以下输入参数运行脚本 create_bedrock_agent_kb_roles_policies.sh
      输入参数 描述
      –agent-kb-profile agent-kb 您使用 AWS CLI 设置的、如先决条件中所述带有 aws_access_key_id、aws_secret_access_key 的代理知识库配置文件。
      –lambda-role lambda_bedrock_kb_query_role 这是 agent 账户 Bedrock 代理操作组 lambda 将承担以连接到 Redshift 跨账户的 IAM 角色
      –kb-access-role bedrock_kb_access_role 这是 agent-kb 账户的 IAM 角色,agent 账户中的 lambda_bedrock_kb_query_role 将承担该角色以连接到 Redshift 跨账户
      –kb-access-policy bedrock_kb_access_policy 附加到 IAM 角色 bedrock_kb_access_role 的 IAM 策略
      –lambda-policy lambda_bedrock_kb_query_policy 附加到 IAM 角色 lambda_bedrock_kb_query_role 的 IAM 策略
      –knowledge-base-id XXXXXXXXXX 替换为步骤 4 中创建的实际知识库 ID
      –agent-account 111122223333 替换为运行 Bedrock 代理的 12 位 AWS 账户号码。(agent 账户)
      –agent-kb-account 999999999999 替换为运行 Bedrock 知识库的 12 位 AWS 账户号码。(agent-kb 账户)
    8. aws-samples GitHub 存储库 下载脚本 (create_bedrock_agent_kb_roles_policies.sh)。
    9. 在 Mac 或其他平台的类似 bash shell 中打开终端。
    10. 找到下载位置并更改目录,提供可执行权限:
      cd /my/location
      chmod +x create_bedrock_agent_kb_roles_policies.sh
    11. 如果您仍然不清楚脚本的使用方法或输入,可以运行脚本并使用 –help 选项,脚本将显示用法:
      ./create_bedrock_agent_kb_roles_policies.sh –help
    12. 使用前面表格中所述的正确输入参数运行脚本。
      ./create_bedrock_agent_kb_roles_policies.sh --agent-profile agent \
       --agent-kb-profile agent-kb \
       --lambda-role lambda_bedrock_kb_query_role \
       --kb-access-role bedrock_kb_access_role \
       --kb-access-policy bedrock_kb_access_policy \
       --lambda-policy lambda_bedrock_kb_query_policy \
       --knowledge-base-id XXXXXXXXXX \
       --agent-account 111122223333 \
       --agent-kb-account 999999999999

    13. 脚本成功执行后会显示两个账户中创建的 IAM、角色和策略的摘要。
    14. 登录 agentagent-kb 账户以验证 IAM 角色和策略是否已创建。
          • 对于 agent 账户:记下 lambda_bedrock_kb_query_role 的 ARN,这将是下一步中 CloudFormation 堆栈参数 AgentLambdaExecutionRoleArn 的值。
            Agent IAM Role
          • 对于 agent-kb 账户:记下 bedrock_kb_access_role 的 ARN,这将是下一步中 CloudFormation 堆栈参数 TargetRoleArn 的值。
            Agent KB IAM Role
  1. 运行 AWS CloudFormation 脚本以创建 Bedrock 代理:
          1. 下载 CloudFormation 脚本:cloudformation_bedrock_agent_kb_query_cross_account.yaml 来自 aws-samples GitHub 存储库
          2. 登录 agent 账户并导航到 CloudFormation 控制台,验证您位于 us-west-2 (Oregon) 区域,选择 Create stack 并选择 With new resources (standard)
          3. Specify template 部分选择 Upload a template file,然后选择 Choose file 并选择 (1) 中的文件。然后,选择 Next
          4. 输入以下堆栈详细信息并选择 Next
            Parameter Value Description
            Stack name bedrock-agent-connect-kb-cross-account-agent 您可以选择任何名称
            AgentFoundationModelId us.amazon.nova-pro-v1:0 请勿更改
            AgentLambdaExecutionRoleArn arn:aws:iam:: 111122223333:role/lambda_bedrock_kb_query_role 替换为您的 agent 账户号码
            BedrockAgentDescription Agent to query inventory data from Redshift Serverless database 保持此为默认值
            BedrockAgentInstructions You are an assistant that helps users query inventory data from our Redshift Serverless database using the action group. 请勿更改
            BedrockAgentName bedrock_kb_query_cross_account 保持此为默认值
            KBFoundationModelId meta.llama3-1-70b-instruct-v1:0 请勿更改
            KnowledgeBaseId XXXXXXXXXX 步骤 4 中的知识库 ID
            TargetRoleArn arn:aws:iam::999999999999:role/bedrock_kb_access_role 替换为您的 agent-kb 账户号码

          5. 完成确认并选择 Next
          6. 向下滚动页面并选择 Submit
          7. 您将看到 CloudFormation 堆栈正在创建,状态显示为 CREATE_IN_PROGRESS
          8. 这需要几分钟时间,然后您将看到状态更改为 CREATE_COMPLETE,表示所有资源都已创建。选择 Outputs 选项卡以记下创建的资源。
            总结一下,CloudFormation 脚本在 agent 账户中执行以下操作。
                • 创建 Bedrock 代理
                • 创建操作组
                • 还创建了由 Bedrock 操作组调用的 Lambda 函数
                • 定义 OpenAPI 架构
                • 为 Bedrock 代理创建必要的角色和权限
                • 最后,它准备 Bedrock 代理,使其可以进行测试。
    1. 检查 Oregon (us-west-2) 中的模型访问权限
            1. 验证 agent 账户中 Nova Pro (us.amazon.nova-pro-v1:0) 模型的访问权限。导航到 Amazon Bedrock 控制台,在 Configure and learn 下选择 Model access。搜索 Model name : Nova Pro 以验证访问权限。如果未启用,请启用模型访问。
              Agent Model Access
            2. 验证 agent-kb 账户中 meta.llama3-1-70b-instruct-v1:0 模型的访问权限。由于我们之前设置了知识库,这应该已经启用。
      1. 运行代理。登录 agent 账户。导航到 Amazon Bedrock 控制台,在 Build 下选择 Agents
      2. 选择代理名称,然后选择 Test。您可以测试以下问题,如 workshop 的 阶段 4:测试自然语言查询 页面所述。例如:
              1. Who are the top 5 customers in Saudi Arabia?
              2. Who are the top parts supplier in the United States by volume?
              3. What is the total revenue by region for the year 1998?
              4. Which products have the highest profit margins?
              5. Show me orders with the highest priority from the last quarter of 1997.

        1. 选择 Show trace 以调查代理跟踪。

      一些推荐的最佳实践:

          • 将您的问题措辞得更具体一些
          • 使用与您的表描述相匹配的术语
          • 尝试与您的精选示例类似的问题
          • 验证您的问题与 TPCH 数据集中存在的数据相关
          • 使用 Amazon Bedrock Guardrails 为问题和响应添加可配置的安全措施。

      清理资源

      建议清理任何不再需要的资源,以避免任何不必要的费用:

          1. 导航到 agentagent-kb 账户的 CloudFormation 控制台,搜索堆栈并选择 Delete
          2. S3 存储桶需要单独删除。
          3. 要删除两个账户中创建的角色和策略,请从 aws-samples GitHub 存储库 下载脚本 delete-bedrock-agent-kb-roles-policies.sh
            1. 在 Mac 或其他平台上的类似 bash shell 中打开终端。
            2. 找到下载位置并更改目录,提供可执行权限:
            cd /my/location
            chmod +x delete-bedrock-agent-kb-roles-policies.sh
          4. 如果您仍然不清楚脚本的使用方法或输入,可以运行脚本并使用 –help 选项,脚本将显示用法:
            ./ delete-bedrock-agent-kb-roles-policies.sh –help
          5. 使用运行 create_bedrock_agent_kb_roles_policies.sh 脚本时使用的相同输入参数值运行脚本:delete-bedrock-agent-kb-roles-policies.sh注意:在运行前输入正确的 agent-account 和 agent-kb-account 编号。
            ./delete-bedrock-agent-kb-roles-policies.sh --agent-profile agent \
             --agent-kb-profile agent-kb \
             --lambda-role lambda_bedrock_kb_query_role \
             --kb-access-role bedrock_kb_access_role \
             --kb-access-policy bedrock_kb_access_policy \
             --lambda-policy lambda_bedrock_kb_query_policy \
             --agent-account 111122223333 \
             --agent-kb-account 999999999999

            脚本将要求确认,输入 yes 并按回车键。

      总结

      该解决方案演示了 agent 账户中的 Amazon Bedrock 代理如何查询 agent-kb 账户中的 Amazon Bedrock 知识库。

      结论

      此解决方案利用 Amazon Bedrock 知识库处理结构化数据,以创建更集成化的跨账户数据访问方法。agent-kb 账户中的知识库直接连接到私有 VPC 中的 Amazon Redshift Serverless。agent 账户中的 Amazon Bedrock 代理调用 AWS Lambda 函数作为其操作组的一部分,以建立跨账户连接以从结构化知识库中检索响应。

      此架构具有以下几个优势:

          • 使用 Amazon Bedrock 知识库功能来处理结构化数据
          • 在代理和数据源之间提供更无缝的集成
          • 在账户之间保持适当的安全边界
          • 减少直接数据库访问代码的复杂性

      随着 Amazon Bedrock 的不断发展,您可以利用未来的知识库功能增强,同时保持您的多账户架构。


      关于作者

      Author KunalKunal Ghosh 是一位 AWS 技术专家。他热衷于在 AWS 上构建高效的解决方案,尤其是在涉及生成式 AI、分析、数据科学和机器学习方面。除了家庭时间,他还喜欢阅读、游泳、骑自行车和看电影,并且是一位美食家。

      Author ArghyaArghya Banerjee 是 AWS 旧金山湾区的高级解决方案架构师,致力于帮助客户采用和使用 AWS 云。他专注于大数据、数据湖、流式和批处理分析服务以及生成式 AI 技术。

      Author IndranilIndranil Banerjee 是 AWS 旧金山湾区的高级解决方案架构师,致力于帮助高科技和半导体行业的客户使用 AWS 云解决复杂的业务问题。他的特别兴趣领域包括遗留系统现代化和迁移、构建分析平台以及帮助客户采用尖端技术,如生成式 AI。

      Author VinayakVinayak Datar 是一位驻扎在湾区的高级解决方案经理,致力于帮助企业客户加速他们的 AWS 云之旅。他专注于帮助客户将想法从概念转化为可行的原型,再到使用 AWS 生成式 AI 服务投入生产。




      🚀 想要体验更好更全面的AI调用?

      欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。

0

评论区