Salta ai contenuti

AgentCore Gateway a AgentCore Gateway

Il generatore connection può registrare un AgentCore Gateway come target di un altro AgentCore Gateway. Questo ti consente di comporre i gateway gerarchicamente — ad esempio un gateway a livello di team che aggrega diversi gateway di dominio, ognuno dei quali si interfaccia con i propri server MCP.

Una volta connesso, il Gateway sorgente aggrega gli strumenti del Gateway target nel suo singolo endpoint MCP. Poiché il Gateway target prefissa già i suoi strumenti con i propri nomi di target, gli strumenti emergono attraverso il Gateway sorgente come <gateway-target-name>___<target-name>___<tool-name> — ogni gateway nella catena aggiunge un prefisso. Entrambi i gateway valutano le proprie policy Cedar: il Gateway sorgente autorizza il chiamante per l’azione prefissata, quindi il Gateway target autorizza il ruolo di esecuzione del Gateway sorgente per l’azione interna.

Prima di utilizzare questo generatore, assicurati di avere:

  1. Due progetti agentcore-gateway

Entrambi i gateway devono avere protocol: mcp, e il gateway target deve avere auth: iam — il gateway sorgente invoca il target firmando con il proprio ruolo di esecuzione, quindi solo l’autenticazione in entrata del target deve essere IAM. Il generatore valida questo, e rifiuta anche le connessioni che creerebbero un ciclo tra i gateway, che altrimenti ricorrerebbe all’infinito su tools/list.

Terminal window
pnpm nx g @aws/nx-plugin:connection
Puoi anche eseguire una prova per vedere quali file verrebbero modificati
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

Seleziona il progetto Gateway aggregante come sorgente e il Gateway da aggregare come target.

ParametroTipoPredefinitoDescrizione
sourceProject Obbligatoriostring-Il progetto sorgente
targetProject Obbligatoriostring-Il progetto di destinazione a cui connettersi
sourceComponent string-Il componente sorgente da cui connettersi (nome del componente, percorso relativo alla radice del progetto sorgente, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come sorgente.
targetComponent string-Il componente di destinazione a cui connettersi (nome del componente, percorso relativo alla radice del progetto di destinazione, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come destinazione.
preferInstallDependencies booleantrueSe preferire l'installazione delle dipendenze dopo l'esecuzione del generatore. Impostare su false per rimandare l'installazione quando si eseguono più generatori in batch (l'installazione viene comunque eseguita se necessaria affinché i generatori successivi possano calcolare il grafo dei progetti Nx); installare una volta alla fine.

Il generatore collega i progetti esistenti insieme piuttosto che emettere nuovi file sorgente. I seguenti file vengono modificati:

  • Directorypackages/<source-gateway>
    • project.json il target dev del Gateway sorgente acquisisce una dipendenza sul target dev del gateway target
    • local-dev.ts ATTACHED_MCP_SERVERS aggiornato in modo che il gateway locale aggreghi il gateway target

Il target dev del progetto Gateway sorgente acquisisce una dipendenza sul target dev del Gateway target, quindi l’esecuzione del Gateway sorgente localmente avvia anche il gateway target (e, transitivamente, ogni server MCP collegato ad esso). Il gateway target viene anche registrato nel local-dev.ts del progetto Gateway sorgente in modo che il gateway locale aggreghi i suoi strumenti.

Il generatore non può collegare automaticamente il target gateway alla tua infrastruttura perché non sa quale stack o modulo istanzia i Gateway. Aggiungi tu stesso una singola chiamata a gateway.addGateway(targetGateway).

Nello stack in cui istanzi i Gateway, registra il gateway target come target del gateway sorgente:

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

Il nome del target Gateway (il gatewayName del gateway target per impostazione predefinita) prefissa i nomi delle azioni Cedar sul gateway sorgente — il formato dell’azione è AgentCore::Action::"<gatewayTargetName>___<targetName>___<toolName>". Vedi la sezione Scrittura delle Policy. Mantieni il nome del target breve e stabile; modificarlo in seguito invalida qualsiasi policy Cedar che faccia riferimento al vecchio nome.

Per sovrascrivere il nome del target predefinito, passa gatewayTargetName:

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

Il costrutto concede al ruolo di esecuzione del gateway sorgente l’accesso bedrock-agentcore:InvokeGateway al gateway target, e configura il target con iamCredentialProvider.service = 'bedrock-agentcore' in modo che il gateway sorgente firmi le chiamate in uscita utilizzando il proprio ruolo di esecuzione. Il target viene creato dopo il gateway target e tutti i suoi target, poiché AgentCore recupera gli strumenti del target durante la creazione.

Ogni gateway nella catena valuta il proprio set di policy:

  1. Il gateway sorgente valuta il chiamante originale (ad es. il ruolo di esecuzione di un agente) rispetto all’azione prefissata, ad es. AgentCore::Action::"inner-gateway___my-mcp___add".
  2. Il gateway target valuta il ruolo di esecuzione del gateway sorgente rispetto all’azione interna, ad es. AgentCore::Action::"my-mcp___add".

Ciò significa che una chiamata di strumento attraverso una catena di gateway deve essere consentita ad ogni hop. Il permit-all.cedar predefinito consente qualsiasi chiamante nello stesso account AWS, che include il ruolo del gateway sorgente; se scrivi policy più ristrette sul gateway target, ricorda che il principal che vede è il ruolo del gateway sorgente, non il chiamante originale.

Eseguendo il Gateway sorgente localmente con:

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

avvia il gateway sorgente locale, il gateway target locale e ogni server MCP collegato a entrambi, ciascuno sulla propria porta locale assegnata. I nomi degli strumenti sono prefissati ad ogni hop esattamente come distribuiti (<gateway-target-name>___<target-name>___<tool-name>), quindi i prompt degli agenti e i nomi delle azioni Cedar rimangono coerenti tra le esecuzioni locali e distribuite.