跳转到内容

AgentCore Gateway 到 AgentCore Gateway

connection 生成器可以将一个 AgentCore Gateway 注册为另一个 AgentCore Gateway 的目标。这使您可以分层组合网关——例如,一个团队级网关聚合多个域网关,每个域网关都有自己的 MCP 服务器。

连接后,源 Gateway 将目标 Gateway 的工具聚合到其单一的 MCP 端点中。由于目标 Gateway 已经使用自己的目标名称为其工具添加了前缀,因此工具通过源 Gateway 显示为 <gateway-target-name>___<target-name>___<tool-name>——链中的每个网关都会添加一个前缀。两个网关都会评估自己的 Cedar 策略:源 Gateway 为调用者授权前缀操作,然后目标 Gateway 为源 Gateway 的执行角色授权内部操作。

在使用此生成器之前,请确保您具有:

  1. 两个 agentcore-gateway 项目

两个网关都必须具有 protocol: mcp,并且目标网关必须具有 auth: iam——源网关使用自己的执行角色签名调用目标,因此只有目标的入站身份验证需要是 IAM。生成器会验证这一点,并且还会拒绝会在网关之间创建循环的连接,否则会在 tools/list 上无限递归。

Terminal window
pnpm nx g @aws/nx-plugin:connection
您还可以执行试运行以查看哪些文件会被更改
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

选择聚合 Gateway 项目作为源,选择要聚合的 Gateway 作为目标。

参数类型默认值描述
sourceProject 必需string-源项目
targetProject 必需string-要连接到的目标项目
sourceComponent string-要从其连接的源组件(组件名称、相对于源项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为源。
targetComponent string-要连接到的目标组件(组件名称、相对于目标项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为目标。
preferInstallDependencies booleantrue是否在生成器运行后优先安装依赖项。设置为 false 可在批量运行多个生成器时延迟安装(如果后续生成器需要计算 Nx 项目图,仍会运行安装);在最后统一安装一次。

生成器将现有项目连接在一起,而不是生成新的源文件。以下文件会被修改:

  • 文件夹packages/<source-gateway>
    • project.json 源 Gateway 的 dev 目标获得对目标网关的 dev 目标的依赖
    • local-dev.ts ATTACHED_MCP_SERVERS 已更新,以便本地网关聚合目标网关

源 Gateway 项目的 dev 目标获得对目标 Gateway 的 dev 目标的依赖,因此在本地运行源 Gateway 也会启动目标网关(以及传递地启动附加到它的每个 MCP 服务器)。目标网关也会在源 Gateway 项目的 local-dev.ts 中注册,以便本地网关聚合其工具。

生成器无法自动将网关目标连接到您的基础设施中,因为它不知道哪个堆栈或模块实例化了 Gateway。您需要自己添加一个对 gateway.addGateway(targetGateway) 的调用。

在实例化 Gateway 的堆栈中,将目标网关注册为源网关的目标:

packages/infra/src/stacks/application-stack.ts
const innerGateway = new InnerGateway(this, 'InnerGateway');
const outerGateway = new OuterGateway(this, 'OuterGateway');
// Register the inner gateway as a target of the outer gateway. The target
// name defaults to the inner gateway's `gatewayName` (its class name in
// kebab-case, e.g. `InnerGateway` -> `inner-gateway`).
outerGateway.addGateway(innerGateway);

Gateway 目标名称(默认为目标网关的 gatewayName)为源网关上的 Cedar 操作名称添加前缀——操作格式为 AgentCore::Action::"<gatewayTargetName>___<targetName>___<toolName>"。请参阅编写策略部分。保持目标名称简短且稳定;稍后更改它会使引用旧名称的任何 Cedar 策略失效。

要覆盖默认目标名称,请传递 gatewayTargetName

outerGateway.addGateway(innerGateway, { gatewayTargetName: 'inner' });

该构造授予源网关的执行角色对目标网关的 bedrock-agentcore:InvokeGateway 访问权限,并使用 iamCredentialProvider.service = 'bedrock-agentcore' 配置目标,以便源网关使用自己的执行角色签名出站调用。目标在目标网关及其所有自己的目标之后创建,因为 AgentCore 在创建期间获取目标的工具。

链中的每个网关都会评估自己的策略集:

  1. 源网关根据前缀操作评估原始调用者(例如代理的执行角色),例如 AgentCore::Action::"inner-gateway___my-mcp___add"
  2. 目标网关根据内部操作评估源网关的执行角色,例如 AgentCore::Action::"my-mcp___add"

这意味着通过网关链的工具调用必须在每一跳都被允许。默认的 permit-all.cedar 允许同一 AWS 账户中的任何调用者,其中包括源网关的角色;如果您在目标网关上编写更窄的策略,请记住它看到的主体是源网关的角色,而不是原始调用者。

使用以下命令在本地运行源 Gateway:

Terminal window
pnpm nx dev <source-gateway-name>

启动本地源网关、本地目标网关以及附加到任一网关的每个 MCP 服务器,每个都在其分配的本地端口上。工具名称在每一跳都像部署时一样添加前缀(<gateway-target-name>___<target-name>___<tool-name>),因此代理提示和 Cedar 操作名称在本地和部署运行中保持一致。