Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Sessions politiques et propagation de l'identité
Grâce aux politiques temporelles, vous pouvez définir des règles en fonction des événements passés survenus au cours d'une session, et pas seulement de la demande en cours. Vous pouvez appliquer des contraintes telles que :
-
« Autoriser au maximum 5 appels d'outils par session »
-
« Bloquer l'accès à l'outil B sauf si l'outil A a été appelé en premier dans cette session »
-
« Refuser les appels d'API externes après l'accès à des données sensibles au cours de cette session »
Une session de politique regroupe plusieurs appels Gateway en une seule session logique. La session est la limite au-delà de laquelle les règles de politique temporelle sont évaluées.
Rubriques
Comment ça marche
-
Votre application transmet un identifiant de session lors des demandes adressées à la passerelle à l'aide de l'
x-amzn-bedrock-agentcore-policy-session-iden-tête. -
La passerelle lie la session à l'identité authentifiée de l'appelant (principal).
-
À chaque appel, la passerelle évalue les politiques temporelles par rapport à l'historique cumulé des actions au cours de cette session.
-
Dans les scénarios à sauts multiples (Gateway → Runtime → Gateway), la plateforme propage automatiquement la session et l'identité de l'appelant via un en-tête géré par le service.
X-Amz-Bedrock-AgentCore-Identity-WATVotre code d'agent n'a pas besoin de gérer cet en-tête. Il le AgentCore gère de manière transparente.
Important
Multi-hop les scénarios ne fonctionnent qu'au sein d'un seul AWS compte et d'une seule région. AgentCore ne prend pas en charge les scénarios multi-sauts qui traversent des comptes ou des régions.
Transmission de l'ID de session politique
Incluez l'x-amzn-bedrock-agentcore-policy-session-iden-tête de vos demandes adressées à la passerelle. Vous devez générer l'identifiant de session et l'envoyer à chaque demande, en commençant par votre première demande. La passerelle ne génère pas d'identifiant de session en votre nom. La valeur est une chaîne qui identifie la session, et nous recommandons un UUIDv4. Envoyez le même identifiant pour chaque demande au cours de la même session.
Si vous omettez l'en-tête ou si vous envoyez une valeur vide, la passerelle n'établit pas de session. Si le moteur de politique associé contient une politique temporelle, les demandes sans identifiant de session échouent avec une erreur de validation.
Pour connaître le format accepté et la manière dont la passerelle le valide, consultez la section Vérification des en-têtes et déploiements hors environnement d'exécution.
Première demande (crée la session) :
curl -X POST \ https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "x-amzn-bedrock-agentcore-policy-session-id: 12345678-1234-1234-1234-123456789012" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "PaymentTool___transfer_funds", "arguments": { "amount": 500, "recipient": "account-789" } } }'
Demandes suivantes (continuer la session) :
curl -X POST \ https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "x-amzn-bedrock-agentcore-policy-session-id: 12345678-1234-1234-1234-123456789012" \ -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "PaymentTool___transfer_funds", "arguments": { "amount": 600, "recipient": "account-456" } } }'
Si votre politique temporelle limite chaque session à un transfert, la deuxième demande présentée dans l'exemple précédent sera refusée.
Exemple Python :
import requests import uuid GATEWAY_URL = "https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp" ACCESS_TOKEN = "YOUR_ACCESS_TOKEN" # Generate or reuse a session ID for the conversation session_id = str(uuid.uuid4()) # for example, "12345678-1234-1234-1234-123456789012" def call_tool(tool_name, arguments, session_id): headers = { "Content-Type": "application/json", "Authorization": f"Bearer {ACCESS_TOKEN}", "x-amzn-bedrock-agentcore-policy-session-id": session_id } payload = { "jsonrpc": "2.0", "id": "request-1", "method": "tools/call", "params": { "name": tool_name, "arguments": arguments } } response = requests.post(GATEWAY_URL, headers=headers, json=payload) return response.json() # First call - allowed result1 = call_tool( "PaymentTool___transfer_funds", {"amount": 500, "recipient": "account-789"}, session_id ) print(result1) # Success # Second call in same session - may be denied by temporal policy result2 = call_tool( "PaymentTool___transfer_funds", {"amount": 600, "recipient": "account-456"}, session_id ) print(result2) # Denied if rate-limit policy applies
Cycle de vie des sessions
| Propriété | Value |
|---|---|
|
Création |
Implicite lors de la première demande avec l'ID de session |
|
Délai d'inactivité |
24 heures à compter de la dernière activité |
|
Clôture explicite |
Non pris en charge ; les sessions expirent naturellement |
|
Durée de vie maximale |
Limité par un délai d'inactivité |
Propagation d'identité dans des scénarios à sauts multiples
Dans les architectures agentiques, une requête passe souvent par plusieurs AgentCore primitives :
User -> Gateway1 -> Runtime (agent) -> Gateway1 (tool call) -> Target
Pour que les politiques temporelles fonctionnent à travers ces sauts, l'identité de session doit être préservée. AgentCoregère cela automatiquement à l'aide de la chaîne d'identité de charge de travail (WIC) :
-
Au niveau de la passerelle d'origine : la passerelle crée un jeton d'accès à la charge de travail (WAT) qui intègre le
sessionIdetcallerPrincipal(l'identité de l'appelant d'origine). -
Passerelle → Runtime : le WAT est transmis via l'
X-Amz-Bedrock-AgentCore-Identity-WATen-tête interne. -
Runtime → Gateway (appel d'outil) : Runtime échange le WAT entrant contre un nouveau WAT (extension de chaîne), préservant automatiquement le
sessionIdetcallerPrincipal. Le WAT étendu est estampillé sur la demande sortante. -
Passerelle de réception : évalue les politiques temporelles par rapport à la même session, en préservant la continuité.
Ce que cela signifie pour vous :
-
Il vous suffit de
x-amzn-bedrock-agentcore-policy-session-idtransmettre la demande initiale à la passerelle. La plateforme gère la propagation vers tous les sauts en aval. -
Votre code d'agent n'a pas besoin de lire, de modifier ou de transférer l'
X-Amz-Bedrock-AgentCore-Identity-WATen-tête. Ceci est géré par AgentCore l'infrastructure (Runtime, Gateway et le service AgentCore Identity). -
L'identifiant de session se trouve à l'intérieur du WAT et ne peut pas être falsifié ou falsifié par des intermédiaires.
End-to-end débit :
User Gateway1 Runtime Gateway1 Target | POST /mcp | | | | | + session-id X | | | | | + Authorization| | | | |---------------->| | | | | | mint WAT1 | | | | | (sid=X, cpn=user) | | | | | forward + WAT1 | | | | |------------------>| | | | | |exchange WAT1->WAT2| | | | | (sid=X preserved) | | | | | tool call + WAT2 | | | | |------------------>| | | | | | evaluate temporal| | | | | policy, session X| | | | | forward | | | | |----------------->|
Considérations importantes
-
Les ID de session sont gérés par le client. Vous choisissez quand créer une nouvelle session plutôt que de poursuivre une session existante. Un nouvel identifiant de session signifie une nouvelle limite d'évaluation de la politique temporelle.
-
L'
X-Amz-Bedrock-AgentCore-Identity-WATen-tête est interne. Ne définissez, ne modifiez pas ou ne supprimez pas cet en-tête dans le code de votre agent. AgentCore le gère de bout en bout. -
Multi-gateway scénarios (Gateway1 → Runtime → Gateway2) : L'état de la session se propage automatiquement via le WAT. Gateway2 évalue ses propres politiques temporelles à l'aide du même ID de session.
-
authorizerType=NONEles passerelles ne fournissent pas d'isolation de session par appelant. Lorsqu'aucune authentification n'est configurée, la passerelle n'a aucune identité d'appelant à laquelle lier la session. Tous les appelants qui fournissent le même identifiant de session partagent un seul flux d'événements de politique temporelle. Les actions d'un appelant sont prises en compte dans les limites de débit ou les contraintes de séquençage d'un autre. La politique temporelle sur les passerelles non authentifiées est purement consultative : elle peut imposer des limites globales (par exemple, « au maximum 100 appels vers cet outil par session ») mais ne peut pas distinguer ou isoler les appelants individuels. Pour isoler chaque appelant, configurez votre passerelle avecCUSTOM_JWTouAWS_IAMauthentification.
Utilisation de l'ID de session avec les SDK
Vous pouvez transmettre l'ID de session de politique via n'importe quel client qui prend en charge les en-têtes personnalisés sur les requêtes Gateway. Les exemples suivants montrent comment l'inclure lors de l'utilisation du SDK MCP Python et des agents Strands.
Utilisez la même valeur d'ID de session pour tous les appels d'une même session logique. Lorsqu'une nouvelle conversation démarre, générez un nouvel identifiant de session.
Client MCP (SDK Python) :
Lorsque vous utilisez le SDK MCP Python avec un transport HTTP streamable, incluez l'ID de session dans les en-têtes de connexion :
from mcp import ClientSession from mcp.client.streamable_http import streamablehttp_client import asyncio SESSION_ID = "12345678-1234-1234-1234-123456789012" async def call_with_session(gateway_url, token, tool_name, arguments): headers = { "Authorization": f"Bearer {token}", "x-amzn-bedrock-agentcore-policy-session-id": SESSION_ID } async with streamablehttp_client(url=gateway_url, headers=headers) as (read, write, _): async with ClientSession(read, write) as session: await session.initialize() result = await session.call_tool(name=tool_name, arguments=arguments) return result result = asyncio.run(call_with_session( "https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp", "YOUR_TOKEN", "PaymentTool___transfer_funds", {"amount": 500, "recipient": "account-789"} ))
Agents Strands :
Lorsque vous utilisez des agents Strands avec une AgentCore passerelle comme source d'outil, transmettez l'ID de session dans les en-têtes de transport du client MCP. Tous les appels d'outils effectués par l'agent au cours de la session concernent la même session, et les politiques temporelles évaluent l'historique complet.
from strands.tools.mcp.mcp_client import MCPClient from mcp.client.streamable_http import streamablehttp_client SESSION_ID = "12345678-1234-1234-1234-123456789012" def create_transport(mcp_url, access_token): return streamablehttp_client( mcp_url, headers={ "Authorization": f"Bearer {access_token}", "x-amzn-bedrock-agentcore-policy-session-id": SESSION_ID } ) mcp_client = MCPClient(lambda: create_transport(gateway_url, token)) with mcp_client: result = mcp_client.call_tool_sync( tool_use_id="tool-1", name="PaymentTool___transfer_funds", arguments={"amount": 500, "recipient": "account-789"} )
Real-world cas d'utilisation des clients
Les scénarios suivants illustrent la manière dont les politiques temporelles permettent de relever les défis courants en matière de sécurité et de conformité dans les applications agentiques.
Services financiers — limitation des taux de transfert
Une application fintech permet aux utilisateurs finaux d'effectuer des virements bancaires via un agent conversationnel. Sans politique temporelle, un agent compromis ou en boucle pourrait exécuter un nombre illimité de transferts en une seule session. Avec une limite de débit limitée à chaque session, la passerelle applique un nombre maximum de transferts par session :
User: "Transfer $500 to Alice" -> Allowed (1 of 3) User: "Transfer $200 to Bob" -> Allowed (2 of 3) User: "Transfer $1000 to Charlie" -> Allowed (3 of 3) User: "Transfer $50 to Dave" -> DENIED by temporal policy
Chaque session utilisateur utilise son propre identifiant de session. La limite de débit est réinitialisée lorsqu'une nouvelle session démarre, car un nouvel identifiant de session crée une nouvelle limite d'évaluation.
Soins de santé — contrôles des escalades
Un agent de santé accède aux dossiers des patients et peut également envoyer des messages à des systèmes de notification externes. Une politique temporelle impose qu'une fois que les données du patient ont été consultées, aucun appel d'API externe n'est autorisé pour le reste de la session. Cela empêche l'exfiltration de données même si les instructions de l'agent sont manipulées en cours de session :
Agent: calls PatientRecords___read_chart -> Allowed Agent: calls ExternalAPI___send_notification -> DENIED (sensitive data was accessed in this session)
La contrainte ne réside pas dans l'outil lui-même, mais send_notification est autorisé dans les sessions qui n'accèdent jamais aux données des patients. La politique tient compte de ce qui s'est passé plus tôt au cours de cette session particulière.
DevOps — contraintes de séquençage
Un agent de déploiement doit suivre une séquence obligatoire : les tests doivent réussir avant de procéder au déploiement. Une politique temporelle applique ce qui ne Deploy peut être appelé qu'après avoir RunTests été appelé au cours de la même session :
Agent: calls Deploy___to_production -> DENIED (RunTests not yet called in this session) Agent: calls RunTests___execute -> Allowed Agent: calls Deploy___to_production -> Allowed (RunTests was called earlier in this session)
Cela garantit la séquence de déploiement, quelle que soit la manière dont l'agent est invité ou quelle structure d'orchestration le contrôle.
Multi-tenant SaaS — application du budget par utilisateur
Une plateforme SaaS héberge des agents d'IA pour plusieurs utilisateurs finaux derrière un identifiant d'application partagé (CUSTOM_JWTavec des sub demandes par utilisateur via des flux On-Behalf-Of (OBO)). La session de chaque utilisateur reçoit un identifiant de session unique. Comme la passerelle lie la session à la fois à l'ID de session et au principal authentifié, les sessions des différents utilisateurs sont automatiquement isolées. Une politique temporelle impose « au maximum 100$ d'appels d'outils par session », évalués indépendamment par utilisateur, même si tout le trafic arrive via le même identifiant d'application.
Choix de la portée de la session : sessions larges par rapport à des sessions restreintes
L'ID de session que vous fournissez détermine la limite d'évaluation des politiques temporelles. Le choix du bon scope affecte à la fois la sécurité et la facilité d'utilisation :
| Stratégie | Modèle d'identifiant de session | Avantages | Inconvénients |
|---|---|---|---|
|
Per-conversation (recommandé) |
Nouvel UUID par conversation utilisateur |
Limite naturelle ; limites de débit réinitialisées entre les conversations ; modèle mental clair de l'utilisateur |
L'agent doit démarrer une nouvelle session pour obtenir de nouvelles limites |
|
Per-user (large) |
ID stable par utilisateur (par exemple, hachage de l'ID utilisateur) |
Les politiques s'appliquent à toutes les conversations ; elles sont utiles pour l'application quotidienne du budget |
Les limites ne sont jamais réinitialisées dans le TTL (24 heures) ; elles sont partagées entre des tâches non liées |
|
Per-request (étroit) |
Nouvel UUID par demande |
Chaque demande est indépendante |
Les politiques temporelles sont effectivement désactivées : aucun historique à évaluer |
|
Per-task |
UUID par tâche logique (par exemple, « traiter cette commande ») |
Les politiques s'appliquent à un flux de travail spécifique ; s'adaptent aux tâches des agents en plusieurs étapes |
L'application doit gérer le mappage des tâches → ID de session |
Conseils :
-
Commencez par une conversation par conversation. Il s'agit de la solution idéale pour la plupart des cas d'utilisation d'agents interactifs.
-
Utilisez-le par utilisateur lorsque vous avez besoin d'une application interconversation (par exemple, « pas plus de 10 transferts par jour, quel que soit le nombre de conversations »).
-
N'utilisez jamais la méthode par demande, sauf si vous souhaitez intentionnellement ne pas effectuer d'évaluation de la politique temporelle.
-
Évitez les sessions trop étendues (par exemple, un identifiant de session pour tous les utilisateurs) : cela regroupe toutes les actions des appelants dans un seul flux d'événements et vide de tout sens les limites de débit par utilisateur.
Vérification des en-têtes et déploiements non liés à l'exécution
Comment la passerelle vérifie l'ID de session
Lorsque la passerelle reçoit l'x-amzn-bedrock-agentcore-policy-session-iden-tête, elle effectue la validation suivante :
-
Contrôle du format : la valeur doit être comprise entre 1 et 128 caractères, contenant uniquement des caractères alphanumériques et des tirets ().
[A-Za-z0-9-]Une valeur mal formée ou surdimensionnée est rejetée avec HTTP 400. L'en-tête n'est jamais utilisé ou reflété sans passer cette vérification. -
Liaison principale : sur les passerelles authentifiées (
CUSTOM_JWTouAWS_IAM), la passerelle lie la session à l'identité authentifiée de l'appelant. Deux appelants différents fournissant le même identifiant de session obtiennent des sessions isolées ; l'identité fait partie de la clé de session. -
Création implicite : les sessions n'ont pas besoin d'être préenregistrées. La première demande avec un ID de session donné crée implicitement la session. Aucun appel d'API « créer une session » distinct n'est requis.
Si vous appelez directement la passerelle (sans AgentCore Runtime)
Lorsque votre application appelle directement le point de terminaison de la passerelle (par exemple, un service principal effectuant des requêtes HTTP vers l'URL de la passerelle), vous gérez vous-même l'ID de session :
-
Générez un identifiant de session (nous vous recommandons
uuid4) au début de chaque conversation logique. -
Incluez
x-amzn-bedrock-agentcore-policy-session-id: <your-session-id>en tant qu'en-tête HTTP sur chaque demande de cette conversation. -
Stockez l'ID de session côté client pendant la durée de la conversation afin que les demandes suivantes fassent référence à la même session.
Aucune configuration, autorisation ou appel d'API supplémentaire n'est nécessaire. La passerelle crée la session lors de la première utilisation et l'expire après 24 heures d'inactivité.
Si vos demandes passent par AgentCore Runtime
Lorsque les appels empruntent le chemin Utilisateur → Passerelle → Runtime (agent) → Gateway (appel d'outil), il vous suffit de transmettre l'ID de session de la demande initiale à la première passerelle. La plateforme intègre l'ID de session dans le jeton d'accès à la charge de travail (WAT) et le propage automatiquement à travers tous les sauts en aval. Votre code d'agent n'a pas besoin de lire, de stocker ou de transférer l'ID de session : il arrive à la passerelle de réception de manière transparente.
À propos du jeton d'accès à la charge de travail (WAT)
Le jeton d'accès à la charge de travail est un jeton opaque AWS signé qui contient le contexte d'identité d'une demande lorsqu'elle circule entre les AgentCore services. Lorsque la politique temporelle est active, le WAT contient :
-
L'ID de session : relie tous les sauts d'une demande à sauts multiples à la même session de politique temporelle.
-
L'appelant principal : préservation de l'identité de l'appelant d'origine afin que les passerelles en aval puissent lier correctement la session.
-
La chaîne de charge de travail : liste ordonnée des AgentCore services que la demande a parcourus (par exemple,
[Gateway, Runtime, Gateway]).
Le WAT est de courte durée (TTL de 15 minutes), signé cryptographiquement par le service AgentCore d'identité et opaque pour tous les participants. Il ne peut pas être falsifié, falsifié ou décodé par les appelants ou les intermédiaires.
Vous n'interagissez pas directement avec le WAT. Il est porté sur l'X-Amz-Bedrock-AgentCore-Identity-WATen-tête interne, qui est entièrement géré par la plateforme. Cette explication est fournie afin que vous compreniez comment fonctionne la continuité de session entre les sauts. Vous n'avez aucune action à effectuer concernant le WAT.
Pour plus de détails sur l'identité de la charge de travail et les jetons d'accès, voir Obtenir un jeton d'accès à la charge de travail et Comprendre les identités de la charge de travail.