共享基础设施,隔离租户:使用 Amazon Bedrock AgentCore 实现池模型多租户架构 | Amazon Web Services
共享基础设施,隔离租户:使用 Amazon Bedrock AgentCore 实现池模型多租户架构 | Amazon Web Services
构建多租户 AI 应用带来了新的架构挑战。你需要在各客户之间实现完全的租户隔离、提供不同能力的不同服务层级、精细的成本跟踪,以及对每个租户的可观测性。缺少这些能力,你可能会面临客户数据泄露、无法向客户提供适当服务质量,或产生不可预见的成本的风险。
在本文中,你将学习使用 Amazon Bedrock AgentCore 实现生产级多租户系统的模式。我们将通过为多家诊所和医院提供服务的医疗 AI Agent 来演示这些模式。虽然本文以医疗领域为例,但所涉及的架构模式和实现技术广泛适用于各种多租户 AI 应用。无论你是在构建 SaaS 平台、服务于多个业务部门的企业解决方案,还是面向不同客户组织的托管服务,你都可以使用这些架构模式来构建自己的解决方案。
你将学到什么
- 如何使用原生 AWS 能力在 Agent 应用中实现完全的租户隔离。
- 以最少自定义代码实现服务层级区分的模式。
- 每个租户的精细成本归属技术。
- 可扩展多租户 AI 架构的最佳实践。
本文是该系列文章的第二部分:使用 Amazon Bedrock AgentCore 构建多租户 Agent。
第一部分 探讨了构建多租户 Agent 应用的设计考量,以及使用 Amazon Bedrock AgentCore 解决 SaaS 架构挑战所需的框架。
示例代码的 GitHub 仓库:
https://github.com/aws-samples/sample-agentcore-and-multitenancy-blog
解决方案概述
该解决方案演示了如何使用 Amazon Bedrock AgentCore 的原生能力,通过 AWS 托管服务实现完全的租户隔离。该架构实现了一个三级层级:层级(Tier)→ 租户(Tenant)→ 用户(User),并通过知识库中的文档、内存、模型访问和成本跟踪在每个层面强制实施隔离。层级策略是 SaaS 应用中的常见模式,其中租户根据其需求(如 Basic 和 Premium)、使用模式或定价计划被划分到不同的服务层级。每个层级定义了一组功能和服务质量,提供给该组内的租户。这种方法允许 SaaS 提供商在保持运营效率的同时,为多样化的客户群提供差异化的体验。
医疗 AI 助手示例
为了说明实际应用,示例解决方案实现了两个服务层级以实现基于层级的区分:
- 基础层级(Basic Tier):专为小型诊所和诊所设计,主要需要直接的文档搜索和检索。由于这些任务非常适合较小、成本效益高的模型,该层级使用 Mistral Ministral 3 8B Instruct,在保持低成本的同时,仍能为简单查询提供准确结果。
- 高级层级(Premium Tier):专为需要复杂临床分析的医院和专科中心设计。该层级使用 OpenAI GPT OSS 120B,具有高级推理能力以实现准确的工具选择,包括仅对高级层级客户可用的网络搜索工具。
在每个层级内,该解决方案使用池隔离模型(pool isolation model),其中租户共享相同的基础设施和计算资源,而不是每个租户拥有专用的、孤立资源。池模型最大限度地提高了资源利用率,简化了运营,而租户隔离则通过逻辑分离机制(如作用域标识符、访问策略和数据分区)来强制实施。将层级策略与池模型相结合,可以让你在成本效率与提供差异化服务水平的灵活性之间取得平衡。
架构
让我们看看 AgentCore 的原语如何组合在一起解决这些多租户挑战。下图说明了该解决方案的多租户架构,展示了认证后的用户请求如何通过特定层级的 Agent 流向隔离的文档存储:
图1:具有层级隔离(层级 → 租户 → 用户)的多租户架构。
该解决方案由以下关键组件组成:
- Amazon Cognito:管理用户认证,并将租户元数据(层级、clinic_id、角色)存储在 JSON Web 令牌(JWT)声明中。这些声明被提取并通过请求负载传播为租户上下文,使每个下游组件能够将其操作范围限定到正确的租户。
- Amazon API Gateway:路由请求并通过使用计划强制实施基于层级的速率限制。
- AWS Lambda:提取租户上下文并调用相应的 Amazon Bedrock AgentCore Agent。
- AgentCore 组件:运行时(Runtime,Agent 执行)、内存(Memory,会话状态)、身份(Identity,Agent 身份管理)、网关(Gateway,工具服务器)和策略(Policy,Agent 行为边界)。
- Amazon Simple Storage Service(Amazon S3):将临床文档存储在按层级分离的存储桶中,并使用分层前缀结构实现租户隔离。
- Amazon Bedrock Knowledge Bases:通过元数据过滤提供语义搜索,将查询范围限定到请求租户的文档。
- Amazon Bedrock project:通过成本分配标签实现每个层级的成本跟踪。
解决方案演练
本节描述了解决方案的关键方面。你运行部署脚本来设置解决方案的基础设施和应用程序。本节中的代码片段仅用于描述解决方案组件如何解决架构的关键方面。无需运行任何命令或执行此处显示的任何代码片段。
Amazon Bedrock AgentCore 组件
该架构利用了 Bedrock AgentCore 的六项核心能力来实现多租户:
AgentCore Runtime:AgentCore Runtime 为此解决方案中的 Agent 提供计算资源,每个 Agent 会话在隔离的微虚拟机中执行,实现租户级别的计算隔离。它按层级托管独立的 Agent 实例,每个实例配置了适合该层级的模型和能力。
AgentCore Identity:AgentCore Identity 通过统一的基于 JWT 的认证模型来保护多租户架构。Cognito ID 令牌在 Runtime 和 Gateway 边界验证用户,而工具 Lambda 为其下游数据访问生成自己的作用域凭证。
每个 AgentCore Runtime 配置了一个入站 JWT 授权器,在 Agent 代码执行之前验证 Cognito ID 令牌。ID 令牌将租户元数据作为自定义声明携带:
| 声明 | 示例值 | 用途 |
|---|---|---|
| sub | a4589458-8011-… | 唯一用户标识符(Cognito UUID) |
| iss | dr.foster@hospital-a.com | 认证域 |
授权器在 Agent 部署期间配置:
ApplicationConfiguration": {
"authorization": {
"scheme": "JWT",
"jwtConfiguration": {
"issuer": "https://cognito-idp.<region>.amazonaws.com/<user-pool-id>",
"audience": ["<client-id>"]
}
}
}
AgentCore Gateway 也配置了 JWT 授权,使用相同的 Cognito 发现 URL 和受众。当