构建无服务器A2A网关:实现智能体发现、路由与访问控制
本文介绍如何在AWS上构建一个无服务器A2A网关,统一管理多个AI智能体的通信,包括路径路由、集中权限控制和语义搜索。网关通过三个层面(管理、控制、执行)简化智能体集成,支持标准A2A协议,无需修改客户端。
随着企业在不同团队、供应商和基础设施中部署AI智能体,管理智能体间的通信成为日益增长的运营负担。如果没有集中化层,每个新智能体的集成都会增加点对点连接、独立的凭据和自定义路由逻辑。团队花费工程周期来构建连接,而非开发智能体能力。访问控制变得碎片化,缺乏单一位置来强制执行哪些客户端可以访问哪些智能体。其结果是新的智能体工作流上市速度变慢,由于不一致的身份验证策略导致安全风险增加,以及每个新智能体加入网络时运营开销呈二次方增长。
网关模式通过在智能体前端放置一个单一入口点来解决这一问题,无论智能体运行在Amazon ECS、AWS Lambda、Amazon Bedrock AgentCore运行时、非AWS云还是混合环境。它集中处理路由并强制执行细粒度权限,而不将团队绑定到特定的运行时、框架或编排层。该模式建立在智能体间通信协议(A2A)的基础上,该协议标准化了智能体之间的通信方式。如果没有中央编排器,20个智能体的部署需要多达190个点对点连接。
本文中,你将学习如何在AWS上构建一个无服务器A2A网关,该网关使用基于路径的路由(/agents/{agentId})将多个智能体托管在单个域名下。标准A2A客户端无需修改即可工作。该解决方案包含三个层面:管理层面(集中化智能体注册,支持发现和语义搜索)、控制层面(使用JWT作用域和Lambda授权器实施细粒度访问控制)、执行层面(单域路由,支持OAuth后端认证和SSE流式传输)。
架构
Amazon API Gateway(REST API)作为单一入口点。架构使用REST API,因为它支持响应流式传输。流式传输对于基于SSE的实时智能体响应是必需的。Lambda授权器检查JWT作用域,并生成允许访问特定智能体路径(/agents/agent-a/*)而拒绝其他路径的IAM策略。
Lambda函数实现网关逻辑:授权器验证JWT并基于作用域到智能体的映射生成IAM策略;注册表列出调用方可以访问的智能体,并将URL重写为指向网关;搜索使用Amazon Bedrock中的Amazon Titan文本嵌入进行语义智能体发现;代理通过Lambda Web适配器将请求路由到后端智能体,支持SSE流式传输;管理用于智能体注册和生命周期管理。
Amazon DynamoDB存储三个表:智能体注册表、权限表和速率限制计数器表。Amazon Cognito使用OAuth 2.0客户端凭证流处理身份验证。令牌中的作用域决定调用方可以访问哪些智能体。AWS Secrets Manager存储后端凭据。
网关设计
A2A原生端点遵循A2A协议规范,并路由到后端智能体。网关支持规范中定义的两种协议绑定:JSON-RPC和HTTP+JSON/REST。此外,网关端点提供代理发现、搜索和生命周期管理功能。
三层模型
随着智能体部署的增长,团队需要了解可用内容。管理层面提供集中化注册表,其中智能体及其功能、后端URL和状态被编目。控制层面基于JWT作用域强制执行细粒度权限,未授权的请求在API Gateway级别被拒绝。执行层面处理请求到后端智能体的实际路由,支持SSE流式传输和OAuth身份验证。
部署与测试
网关完全使用Terraform部署。前提条件包括Terraform >= 1.5.0、Python 3.12、配置了有效凭据的AWS CLI和Docker。代码可在 aws-samples GitHub仓库中找到。克隆仓库、配置变量、构建Lambda包并部署。测试包括获取凭证、获得JWT、部署示例智能体、注册智能体到网关、更新权限以及发送消息。
该解决方案提供了一个可扩展、安全且易于管理的智能体通信基础设施,适用于企业级AI应用。