Ir al contenido

AgentCore Gateway a AgentCore Gateway

El generador connection puede registrar un AgentCore Gateway como destino de otro AgentCore Gateway. Esto te permite componer gateways jerárquicamente — por ejemplo, un gateway a nivel de equipo que agrega varios gateways de dominio, cada uno de los cuales sirve de fachada para sus propios servidores MCP.

Una vez conectado, el Gateway de origen agrega las herramientas del Gateway de destino en su único endpoint MCP. Dado que el Gateway de destino ya prefija sus herramientas con sus propios nombres de destino, las herramientas aparecen a través del Gateway de origen como <gateway-target-name>___<target-name>___<tool-name> — cada gateway en la cadena agrega un prefijo. Ambos gateways evalúan sus propias políticas Cedar: el Gateway de origen autoriza al llamador para la acción prefijada, luego el Gateway de destino autoriza el rol de ejecución del Gateway de origen para la acción interna.

Antes de usar este generador, asegúrate de tener:

  1. Dos proyectos agentcore-gateway

Ambos gateways deben tener protocol: mcp, y el gateway de destino debe tener auth: iam — el gateway de origen invoca el destino firmando con su propio rol de ejecución, por lo que solo la autenticación entrante del destino necesita ser IAM. El generador valida esto, y también rechaza conexiones que crearían un ciclo entre gateways, lo que de otro modo recurriría infinitamente en tools/list.

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - connection
  5. Complete los parámetros requeridos
    • Haga clic en Generate

    Selecciona el proyecto Gateway agregador como origen y el Gateway a agregar como destino.

    Parámetro Tipo Predeterminado Descripción
    sourceProject Requerido string - El proyecto de origen
    targetProject Requerido string - El proyecto de destino al que conectar
    sourceComponent string - El componente de origen desde el que conectar (nombre del componente, ruta relativa a la raíz del proyecto de origen, o id del generador). Use '.' para seleccionar explícitamente el proyecto como origen.
    targetComponent string - El componente de destino al que conectar (nombre del componente, ruta relativa a la raíz del proyecto de destino, o id del generador). Use '.' para seleccionar explícitamente el proyecto como destino.
    preferInstallDependencies boolean true Si se prefiere instalar las dependencias después de que se ejecute el generador. Establecer en false para diferir la instalación al ejecutar múltiples generadores en lote (la instalación aún se ejecuta si es necesario para que los generadores subsiguientes puedan calcular el grafo de proyectos de Nx); instalar una vez al final.

    El generador conecta proyectos existentes en lugar de emitir nuevos archivos fuente. Los siguientes archivos se modifican:

    • Directoriopackages/<source-gateway>
      • project.json el target dev del Gateway de origen obtiene una dependencia en el target dev del gateway de destino
      • local-dev.ts ATTACHED_MCP_SERVERS actualizado para que el gateway local agregue el gateway de destino

    El target dev del proyecto Gateway de origen obtiene una dependencia en el target dev del Gateway de destino, por lo que ejecutar el Gateway de origen localmente también inicia el gateway de destino (y, transitivamente, cada servidor MCP conectado a él). El gateway de destino también se registra en el local-dev.ts del proyecto Gateway de origen para que el gateway local agregue sus herramientas.

    El generador no puede conectar automáticamente el destino del gateway en tu infraestructura porque no sabe qué stack o módulo instancia los Gateways. Agrega una única llamada a gateway.addGateway(targetGateway) tú mismo.

    En el stack donde instancias los Gateways, registra el gateway de destino como un destino del gateway de origen:

    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);

    El nombre del destino del Gateway (el gatewayName del gateway de destino por defecto) prefija los nombres de acción Cedar en el gateway de origen — el formato de acción es AgentCore::Action::"<gatewayTargetName>___<targetName>___<toolName>". Consulta la sección Escribir políticas. Mantén el nombre del destino corto y estable; cambiarlo más tarde invalida cualquier política Cedar que haga referencia al nombre antiguo.

    Para anular el nombre de destino predeterminado, pasa gatewayTargetName:

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

    El constructo otorga al rol de ejecución del gateway de origen acceso bedrock-agentcore:InvokeGateway al gateway de destino, y configura el destino con iamCredentialProvider.service = 'bedrock-agentcore' para que el gateway de origen firme las llamadas salientes usando su propio rol de ejecución. El destino se crea después del gateway de destino y todos sus propios destinos, ya que AgentCore obtiene las herramientas del destino durante la creación.

    Políticas Cedar a través de gateways encadenados

    Sección titulada «Políticas Cedar a través de gateways encadenados»

    Cada gateway en la cadena evalúa su propio conjunto de políticas:

    1. El gateway de origen evalúa al llamador original (por ejemplo, el rol de ejecución de un agente) contra la acción prefijada, por ejemplo AgentCore::Action::"inner-gateway___my-mcp___add".
    2. El gateway de destino evalúa el rol de ejecución del gateway de origen contra la acción interna, por ejemplo AgentCore::Action::"my-mcp___add".

    Esto significa que una llamada de herramienta a través de una cadena de gateways debe ser permitida en cada salto. El permit-all.cedar predeterminado permite cualquier llamador en la misma cuenta de AWS, lo que incluye el rol del gateway de origen; si escribes políticas más estrictas en el gateway de destino, recuerda que el principal que ve es el rol del gateway de origen, no el llamador original.

    Ejecutar el Gateway de origen localmente con:

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

    inicia el gateway de origen local, el gateway de destino local y cada servidor MCP conectado a cualquiera de ellos, cada uno en su puerto local asignado. Los nombres de herramientas se prefijan en cada salto exactamente como se despliegan (<gateway-target-name>___<target-name>___<tool-name>), por lo que los prompts del agente y los nombres de acción Cedar permanecen consistentes entre ejecuciones locales y desplegadas.