Aller au contenu

AgentCore Gateway vers AgentCore Gateway

Le générateur connection peut enregistrer une AgentCore Gateway comme cible d’une autre AgentCore Gateway. Cela vous permet de composer des gateways de manière hiérarchique — par exemple, une gateway au niveau de l’équipe agrégeant plusieurs gateways de domaine, chacune desservant ses propres serveurs MCP.

Une fois connectée, la Gateway source agrège les outils de la Gateway cible dans son point de terminaison MCP unique. Étant donné que la Gateway cible préfixe déjà ses outils avec ses propres noms de cible, les outils apparaissent à travers la Gateway source sous la forme <gateway-target-name>___<target-name>___<tool-name> — chaque gateway dans la chaîne ajoute un préfixe. Les deux gateways évaluent leurs propres politiques Cedar : la Gateway source autorise l’appelant pour l’action préfixée, puis la Gateway cible autorise le rôle d’exécution de la Gateway source pour l’action interne.

Avant d’utiliser ce générateur, assurez-vous d’avoir :

  1. Deux projets agentcore-gateway

Les deux gateways doivent avoir protocol: mcp, et la gateway cible doit avoir auth: iam — la gateway source invoque la cible en signant avec son propre rôle d’exécution, donc seule l’authentification entrante de la cible doit être IAM. Le générateur valide cela, et rejette également les connexions qui créeraient un cycle entre les gateways, ce qui provoquerait sinon une récursion infinie sur tools/list.

Terminal window
pnpm nx g @aws/nx-plugin:connection
Vous pouvez également effectuer une simulation pour voir quels fichiers seraient modifiés
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

Sélectionnez le projet Gateway agrégeant comme source et la Gateway à agréger comme cible.

ParamètreTypePar défautDescription
sourceProject Requisstring-Le projet source
targetProject Requisstring-Le projet cible auquel se connecter
sourceComponent string-Le composant source depuis lequel se connecter (nom du composant, chemin relatif à la racine du projet source, ou identifiant du générateur). Utilisez '.' pour sélectionner explicitement le projet comme source.
targetComponent string-Le composant cible auquel se connecter (nom du composant, chemin relatif à la racine du projet cible, ou identifiant du générateur). Utilisez '.' pour sélectionner explicitement le projet comme cible.
preferInstallDependencies booleantrueIndique s'il faut privilégier l'installation des dépendances après l'exécution du générateur. Définir à false pour différer l'installation lors de l'exécution de plusieurs générateurs en lot (une installation s'exécute quand même si nécessaire pour que les générateurs suivants puissent calculer le graphe de projet Nx) ; installer une seule fois à la fin.

Le générateur relie les projets existants ensemble plutôt que d’émettre de nouveaux fichiers source. Les fichiers suivants sont modifiés :

  • Répertoirepackages/<source-gateway>
    • project.json la cible dev de la Gateway source gagne une dépendance sur la cible dev de la gateway cible
    • local-dev.ts ATTACHED_MCP_SERVERS mis à jour pour que la gateway locale agrège la gateway cible

La cible dev du projet Gateway source gagne une dépendance sur la cible dev de la Gateway cible, donc l’exécution de la Gateway source localement démarre également la gateway cible (et, transitivement, chaque serveur MCP qui y est attaché). La gateway cible est également enregistrée dans le local-dev.ts du projet Gateway source afin que la gateway locale agrège ses outils.

Le générateur ne peut pas automatiquement intégrer la cible gateway dans votre infrastructure car il ne sait pas quelle stack ou quel module instancie les Gateways. Ajoutez vous-même un seul appel à gateway.addGateway(targetGateway).

Dans la stack où vous instanciez les Gateways, enregistrez la gateway cible comme cible de la gateway source :

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

Le nom de la cible Gateway (le gatewayName de la gateway cible par défaut) préfixe les noms d’action Cedar sur la gateway source — le format d’action est AgentCore::Action::"<gatewayTargetName>___<targetName>___<toolName>". Voir la section Rédaction de politiques. Gardez le nom de cible court et stable ; le modifier ultérieurement invalide toutes les politiques Cedar qui référencent l’ancien nom.

Pour remplacer le nom de cible par défaut, passez gatewayTargetName :

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

Le construct accorde au rôle d’exécution de la gateway source l’accès bedrock-agentcore:InvokeGateway à la gateway cible, et configure la cible avec iamCredentialProvider.service = 'bedrock-agentcore' afin que la gateway source signe les appels sortants en utilisant son propre rôle d’exécution. La cible est créée après la gateway cible et toutes ses propres cibles, car AgentCore récupère les outils de la cible lors de la création.

Politiques Cedar à travers les gateways chaînées

Section intitulée « Politiques Cedar à travers les gateways chaînées »

Chaque gateway dans la chaîne évalue son propre ensemble de politiques :

  1. La gateway source évalue l’appelant d’origine (par exemple, le rôle d’exécution d’un agent) par rapport à l’action préfixée, par exemple AgentCore::Action::"inner-gateway___my-mcp___add".
  2. La gateway cible évalue le rôle d’exécution de la gateway source par rapport à l’action interne, par exemple AgentCore::Action::"my-mcp___add".

Cela signifie qu’un appel d’outil à travers une chaîne de gateways doit être autorisé à chaque saut. Le permit-all.cedar par défaut autorise tout appelant dans le même compte AWS, ce qui inclut le rôle de la gateway source ; si vous écrivez des politiques plus restrictives sur la gateway cible, rappelez-vous que le principal qu’elle voit est le rôle de la gateway source, et non l’appelant d’origine.

L’exécution de la Gateway source localement avec :

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

démarre la gateway source locale, la gateway cible locale et chaque serveur MCP attaché à l’une ou l’autre, chacun sur son port local assigné. Les noms d’outils sont préfixés à chaque saut exactement comme déployés (<gateway-target-name>___<target-name>___<tool-name>), de sorte que les prompts d’agent et les noms d’action Cedar restent cohérents entre les exécutions locales et déployées.