Pular para o conteúdo

AgentCore Gateway para AgentCore Gateway

O gerador connection pode registrar um AgentCore Gateway como destino de outro AgentCore Gateway. Isso permite compor gateways hierarquicamente — por exemplo, um gateway de nível de equipe agregando vários gateways de domínio, cada um dos quais serve seus próprios servidores MCP.

Uma vez conectado, o Gateway de origem agrega as ferramentas do Gateway de destino em seu único endpoint MCP. Como o Gateway de destino já prefixa suas ferramentas com seus próprios nomes de destino, as ferramentas aparecem através do Gateway de origem como <gateway-target-name>___<target-name>___<tool-name> — cada gateway na cadeia adiciona um prefixo. Ambos os gateways avaliam suas próprias políticas Cedar: o Gateway de origem autoriza o chamador para a ação prefixada, então o Gateway de destino autoriza a função de execução do Gateway de origem para a ação interna.

Antes de usar este gerador, certifique-se de ter:

  1. Dois projetos agentcore-gateway

Ambos os gateways devem ter protocol: mcp, e o gateway de destino deve ter auth: iam — o gateway de origem invoca o destino assinando com sua própria função de execução, então apenas a autenticação de entrada do destino precisa ser IAM. O gerador valida isso e também rejeita conexões que criariam um ciclo entre gateways, o que de outra forma recursaria infinitamente em tools/list.

Terminal window
pnpm nx g @aws/nx-plugin:connection
Você também pode realizar uma execução simulada para ver quais arquivos seriam alterados
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

Selecione o projeto Gateway agregador como origem e o Gateway a ser agregado como destino.

ParâmetroTipoPadrãoDescrição
sourceProject Obrigatóriostring-O projeto de origem
targetProject Obrigatóriostring-O projeto de destino para conectar
sourceComponent string-O componente de origem para conectar (nome do componente, caminho relativo à raiz do projeto de origem, ou id do gerador). Use '.' para selecionar explicitamente o projeto como origem.
targetComponent string-O componente de destino para conectar (nome do componente, caminho relativo à raiz do projeto de destino, ou id do gerador). Use '.' para selecionar explicitamente o projeto como destino.
preferInstallDependencies booleantrueSe deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que os geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final.

O gerador conecta projetos existentes em vez de emitir novos arquivos de origem. Os seguintes arquivos são modificados:

  • Directorypackages/<source-gateway>
    • project.json o destino dev do Gateway de origem ganha uma dependência no destino dev do gateway de destino
    • local-dev.ts ATTACHED_MCP_SERVERS atualizado para que o gateway local agregue o gateway de destino

O destino dev do projeto Gateway de origem ganha uma dependência no destino dev do Gateway de destino, então executar o Gateway de origem localmente também inicia o gateway de destino (e, transitivamente, cada servidor MCP anexado a ele). O gateway de destino também é registrado no local-dev.ts do projeto Gateway de origem para que o gateway local agregue suas ferramentas.

O gerador não pode conectar automaticamente o destino do gateway à sua infraestrutura porque não sabe qual pilha ou módulo instancia os Gateways. Adicione uma única chamada para gateway.addGateway(targetGateway) você mesmo.

Na pilha onde você instancia os Gateways, registre o gateway de destino como um destino do gateway de origem:

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

O nome do destino do Gateway (o gatewayName do gateway de destino por padrão) prefixa nomes de ação Cedar no gateway de origem — o formato da ação é AgentCore::Action::"<gatewayTargetName>___<targetName>___<toolName>". Veja a seção Escrevendo Políticas. Mantenha o nome do destino curto e estável; alterá-lo posteriormente invalida quaisquer políticas Cedar que referenciem o nome antigo.

Para substituir o nome do destino padrão, passe gatewayTargetName:

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

O construto concede à função de execução do gateway de origem acesso bedrock-agentcore:InvokeGateway ao gateway de destino, e configura o destino com iamCredentialProvider.service = 'bedrock-agentcore' para que o gateway de origem assine chamadas de saída usando sua própria função de execução. O destino é criado após o gateway de destino e todos os seus próprios destinos, já que o AgentCore busca as ferramentas do destino durante a criação.

Cada gateway na cadeia avalia seu próprio conjunto de políticas:

  1. O gateway de origem avalia o chamador original (por exemplo, a função de execução de um agente) contra a ação prefixada, por exemplo AgentCore::Action::"inner-gateway___my-mcp___add".
  2. O gateway de destino avalia a função de execução do gateway de origem contra a ação interna, por exemplo AgentCore::Action::"my-mcp___add".

Isso significa que uma chamada de ferramenta através de uma cadeia de gateway deve ser permitida em cada salto. O permit-all.cedar padrão permite qualquer chamador na mesma conta AWS, o que inclui a função do gateway de origem; se você escrever políticas mais restritas no gateway de destino, lembre-se de que o principal que ele vê é a função do gateway de origem, não o chamador original.

Executar o Gateway de origem localmente com:

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

inicia o gateway de origem local, o gateway de destino local e cada servidor MCP anexado a qualquer um deles, cada um em sua porta local atribuída. Os nomes das ferramentas são prefixados em cada salto exatamente como implantado (<gateway-target-name>___<target-name>___<tool-name>), então os prompts do agente e os nomes de ação Cedar permanecem consistentes entre execuções locais e implantadas.