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 permette di comporre 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 aggiunge già un prefisso ai 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 con prefisso, 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 gateway, che altrimenti ricorrerebbe all’infinito su tools/list.

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - connection
  5. Compila i parametri richiesti
    • Clicca su Generate

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

    Parametro Tipo Predefinito Descrizione
    sourceProject Obbligatorio string - Il progetto sorgente
    targetProject Obbligatorio string - 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 boolean true Se 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 dal 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 dal 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) aggiunge un prefisso ai nomi delle azioni Cedar sul gateway sorgente — il formato dell’azione è AgentCore::Action::"<gatewayTargetName>___<targetName>___<toolName>". Vedi la sezione Writing Policies. 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 con prefisso, 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 passaggio. Il permit-all.cedar predefinito consente qualsiasi chiamante nello stesso account AWS, che include il ruolo del gateway sorgente; se scrivi policy più restrittive sul gateway target, ricorda che il principale 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 hanno un prefisso ad ogni passaggio esattamente come distribuito (<gateway-target-name>___<target-name>___<tool-name>), quindi i prompt degli agenti e i nomi delle azioni Cedar rimangono coerenti tra esecuzioni locali e distribuite.