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.
Authentifiez-vous et autorisez avec Inbound Auth et Outbound Auth
Cette section explique comment implémenter l'authentification et l'autorisation pour l'exécution de votre agent à l'aide des jetons porteurs OAuth et JWT avec Identity. AgentCore Vous apprendrez à configurer des groupes d'utilisateurs Cognito, à configurer l'environnement d'exécution de votre agent pour l'authentification JWT (Inbound Auth) et à implémenter l' OAuth-based accès à des ressources tierces (Auth sortante).
Pour un exemple complet, voirhttps://github.com/awslabs/amazon-bedrock-agentcore-samples/
Pour plus d'informations sur l'utilisation d'OAuth avec un serveur MCP, voir Déployer des serveurs MCP dans Runtime. AgentCore
L' AgentCore environnement d'exécution Amazon Bedrock fournit deux mécanismes d'authentification pour les agents hébergés :
- Authentification IAM Sigv4
-
Le mécanisme d'authentification et d'autorisation par défaut qui fonctionne automatiquement sans configuration supplémentaire, comme les autres AWS API.
X-Amzn-Bedrock-AgentCore-Runtime-User-Id En-tête
Si votre solution nécessite que l'agent hébergé récupère les jetons OAuth pour le compte des utilisateurs finaux (à l'aide de l'attribution de code d'autorisation), vous pouvez spécifier l'identifiant de l'utilisateur en incluant l'
X-Amzn-Bedrock-AgentCore-Runtime-User-Iden-tête dans vos demandes. Cet en-tête utilise leGetWorkloadAccessTokenForUserIdchemin en interne.Note
L'appel InvokeAgentRuntime avec le
X-Amzn-Bedrock-AgentCore-Runtime-User-Id headerwill nécessitera une nouvelle action IAM :bedrock-agentcore:InvokeAgentRuntimeForUser, en plus de l'action existantebedrock-agentcore:InvokeAgentRuntime.Quand utiliser cet en-tête par rapport à l'authentification JWT Bearer Token
Cet en-tête est conçu pour les cas d'utilisation suivants :
-
Entreprises clientes dotées d'identifiants utilisateur gérés par le client : organisations qui gèrent leurs propres chaînes d'identité utilisateur et doivent les transmettre à Identity pour la liaison des informations AgentCore d'identification.
-
Scénarios de développement et de démarrage rapide : créateurs qui ne disposent pas encore d'un jeton IdP et qui ont besoin d'un moyen rapide de tester les flux d'informations d'identification à l'échelle de l'utilisateur.
Pour les déploiements de production dans lesquels un fournisseur d'identité est configuré, utilisez plutôt l'authentification JWT Bearer Token. Le chemin JWT (
GetWorkloadAccessTokenForJWT) valide l'émetteur, la signature et l'expiration du jeton, fournissant une preuve cryptographique de l'identité de l'utilisateur. Le cheminX-Amzn-Bedrock-AgentCore-Runtime-User-Idd'en-tête ne vérifie pas l'ID utilisateur par rapport à une identité d'utilisateur final authentifiée. Il dépend de la charge de travail de l'appelant pour transmettre la valeur correcte et de vos politiques IAM pour restreindre les personnes autorisées à la fournir.Meilleures pratiques de sécurité pour X-Amzn-Bedrock-AgentCore-Runtime-User-Id Header
Astuce
Pour une vue consolidée de toutes les recommandations de sécurité relatives à Runtime, consultez la section Bonnes pratiques en matière de sécurité pour AgentCore Runtime.
Étant donné AgentCore que la valeur d'en-tête est traitée comme un identifiant opaque sans la vérifier par rapport à une identité authentifiée, vous devez appliquer les contrôles suivants pour maintenir la limite de sécurité :
-
Restreindre l'autorisation IAM : seuls les principaux responsables de confiance doivent disposer de cette autorisation.
bedrock-agentcore:InvokeAgentRuntimeForUserÉtendez cette autorisation à des ressources d'exécution spécifiques à l'aide des conditions de ressources IAM. Ne l'accordez pas de manière générale par le biais de politiques gérées ou d'instructions de ressources génériques. -
Dériver l'identifiant utilisateur à partir du principal authentifié — La valeur de l'identifiant utilisateur doit être dérivée du contexte du principal authentifié (par exemple, identité de l'appelant IAM ou revendications de jeton utilisateur) plutôt que d'accepter des valeurs arbitraires fournies par le client. Cela empêche un utilisateur authentifié de se faire passer pour un autre utilisateur en spécifiant manuellement un autre utilisateur.
user-id -
Implémentez la journalisation des audits : enregistrez la relation entre le principal IAM authentifié (à partir du contexte SIGv4) et la
user-idvaleur transmise. Permet AWS CloudTrail de surveillerInvokeAgentRuntimeles appels qui incluent leruntimeUserIdparamètre. -
Refuser l'en-tête dans des contextes non fiables — Pour les environnements d'exécution où la délégation de l'identifiant utilisateur n'est pas nécessaire, refusez explicitement l'
bedrock-agentcore:InvokeAgentRuntimeForUseraction dans les politiques IAM pour empêcher l'acceptation de l'en-tête :{ "Statement": [ { "Sid": "DenyUserIdDelegation", "Effect": "Deny", "Action": "bedrock-agentcore:InvokeAgentRuntimeForUser", "Resource": "arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/*" } ] }
-
- Authentification par jeton JWT Bearer
-
Vous pouvez configurer l'environnement d'exécution de votre agent pour qu'il accepte les jetons JWT bearer en fournissant la configuration de l'autorisateur lors de la création de l'agent.
Cette configuration inclut :
-
URL de découverte : chaîne qui doit correspondre au modèle des URL
^.+/\.well-known/openid-configuration$de découverte d'OpenID Connect -
Audiences autorisées : liste des audiences autorisées qui seront validées par rapport à la valeur aud indiquée dans le jeton JWT
-
Clients autorisés - Une liste d'identifiants de clients autorisés qui seront validés par rapport à la réclamation client_id dans le jeton JWT
-
Étendues autorisées : liste des étendues autorisées qui seront validées par rapport à la portée revendiquée dans le jeton JWT. Le champ
allowedScopesd'autorisation sera configuré sous la forme d'une liste de chaînes. -
Réclamations personnalisées requises : liste des revendications requises qui seront validées par rapport au nom et à la valeur de la réclamation contenus dans le jeton JWT entrant. Pour plus de détails sur la configuration de l'autorisateur, voir Configurer l'autorisateur JWT entrant
-
Note
Un AgentCore environnement d'exécution peut prendre en charge l'authentification entrante basée sur IAM Sigv4 ou JWT Bearer Token, mais pas les deux simultanément. Vous pouvez toujours créer différentes versions de votre AgentCore environnement d'exécution et les configurer pour différents types d'autorisations entrantes. Lorsque vous créez un environnement d'exécution avec Amazon Bedrock AgentCore, une identité de charge de travail est créée automatiquement pour votre environnement d'exécution avec le service AgentCore Identity.
Rubriques
Restreindre les appels entrants IAM (Sigv4) à votre passerelle
Exemple d'autorisation entrante JWT et d'accès sortant OAuth
Étape 2 : Configuration AWS Groupe d'utilisateurs Cognito et ajout d'un utilisateur
Étape 3 (Facultatif) : configurez votre environnement d'exécution avec une AgentCore passerelle
Étape 5 : Utilisez le jeton du porteur pour invoquer votre agent
Étape 6 : configurer votre agent pour qu'il accède aux outils à l'aide d'OAuth
Étape 7 : (Facultatif) Propager un jeton JWT vers Runtime AgentCore
Restreindre les appels entrants IAM (Sigv4) à votre passerelle
Vous pouvez intégrer une AgentCore passerelle à votre AgentCore environnement d'exécution afin que celle-ci devienne le point d'entrée unique et régi du runtime, ce qui vous donne accès à une autorisation basée sur des règles, à Amazon Bedrock Guardrails, à des intercepteurs de demandes et de réponses et à une observabilité unifiée, le tout appliqué en dehors de l'environnement de l'agent. Pour en savoir plus sur la justification complète et sur la manière de configurer cela, consultez la section Intégrez votre environnement d'exécution à l'aide d'une AgentCore passerelle.
Mais cela n'est utile que si les appelants ne peuvent pas accéder directement au runtime en contournant la passerelle. Si votre environnement d'exécution utilise l'autorisation entrante IAM (Sigv4) par défaut, vous pouvez restreindre l'appel à la passerelle afin que le trafic n'atteigne le moteur d'exécution que par son intermédiaire. Pour ce faire, associez au runtime une politique basée sur les ressources qui limite l'invocation au rôle d'exécution de votre passerelle. La passerelle assume son rôle de service pour signer les demandes adressées au moteur d'exécution. Le rôle de passerelle est donc le principal qui invoque le moteur d'exécution. Autorisez ce rôle et ajoutez un rôle explicite Deny pour tous les autres principaux afin qu'aucune autre identité ne puisse invoquer le runtime, même avec une politique permissive basée sur l'identité. Pour plus d'informations sur les politiques d'exécution basées sur les ressources, consultez les politiques Resource-based relatives à Amazon Bedrock. AgentCore
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOnlyGatewayRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyGatewayExecutionRole" }, "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/RUNTIME_ID" }, { "Sid": "DenyOtherPrincipals", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/RUNTIME_ID", "Condition": { "ArnNotEquals": { "aws:PrincipalArn": "arn:aws:iam::111122223333:role/MyGatewayExecutionRole" } } } ] }
Astuce
Une politique explicite l'emporte Deny toujours sur toutes les politiquesAllow, y compris celles basées sur l'identité pour le même compte. Si vous Deny activezaws:PrincipalArn, seul le rôle d'exécution de votre passerelle peut invoquer le runtime, quelles que soient les autres autorisations disponibles sur votre compte.
Important
Restreindre le runtime au rôle d'exécution de la passerelle n'est efficace que si l'on contrôle qui peut assumer ce rôle. Tout principal pouvant assumer le rôle d'exécution de la passerelle peut invoquer le runtime comme s'il s'agissait de la passerelle. Verrouillez le rôle en ajoutant aws:SourceArn des aws:SourceAccount conditions à la politique de confiance du rôle d'exécution de la passerelle afin que seule votre passerelle puisse l'assumer. Le guide de prévention Confused Deputy présente la même technique que celle appliquée au rôle d'exécution d'un environnement d'exécution ; appliquez le même schéma ici, mais définissez la politique de confiance sur le rôle et la portée aws:SourceArn d'exécution de la passerelle sur l'ARN de votre passerelle.
Exemple d'autorisation entrante JWT et d'accès sortant OAuth
Ce guide explique le processus de configuration de l'environnement d'exécution de votre agent pour qu'il soit invoqué avec un jeton d'accès conforme à OAuth au format JWT. L'agent d'échantillonnage sera autorisé à l'aide de jetons d'accès AWS Cognito. Plus tard, vous découvrirez également comment le code d'agent peut récupérer des jetons Google pour le compte de l'utilisateur afin qu'il consulte Google Drive et récupère le contenu.
Ce que tu vas apprendre
Dans ce guide, vous allez apprendre à :
-
Configurez le groupe d'utilisateurs Cognito, ajoutez un utilisateur et obtenez un jeton porteur pour cet utilisateur
-
Configurez l'environnement d'exécution de votre agent pour utiliser le groupe d'utilisateurs Cognito à des fins d'autorisation
-
Configurez votre code d'agent pour récupérer les jetons OAuth au nom de l'utilisateur pour appeler les outils
Conditions préalables
Avant de commencer, assurez-vous d'avoir :
-
Un AWS compte avec les autorisations appropriées
-
Compréhension de base de la programmation Python
-
Connaissance des conteneurs Docker (pour un déploiement avancé)
-
Configuration réussie d'un agent de base avec runtime
-
La dernière AWS CLI et
jqinstallée -
Compréhension de base de l'autorisation OAuth, principalement des jetons porteurs JWT, des réclamations et des différents flux de subventions
Étape 1 : Créez votre projet d'agent
Utilisez la agentcore create commande pour configurer un projet vide. Vous ajoutez l' JWT-authorized agent après avoir créé les ressources Cognito à l'étape 2.
agentcore create --project-name OAuthAgentProject --no-agent cd OAuthAgentProject
Cette commande génère :
-
Fichier de configuration
agentcore/agentcore.json -
agentcore/aws-targets.jsonfichier cible de déploiement -
agentcore/cdk/projet d'infrastructure
Note
Conservez ce terminal OAuthAgentProject pour les commandes AgentCore CLI restantes.
Étape 2 : Configuration AWS Groupe d'utilisateurs Cognito et ajout d'un utilisateur
Pour configurer un groupe d'utilisateurs Cognito et créer un utilisateur, vous allez utiliser un script shell qui automatise le processus.
Pour plus d'informations, consultez Étape 2 : Importer les modules Identity et Auth.
Pour configurer le groupe d'utilisateurs Cognito et créer un utilisateur
-
Créez un fichier nommé
setup_cognito.shavec le contenu suivant:#!/bin/bash # Create User Pool and capture Pool ID directly export POOL_ID=$(aws cognito-idp create-user-pool \ --pool-name "MyUserPool" \ --policies '{"PasswordPolicy":{"MinimumLength":8}}' \ --region $REGION | jq -r '.UserPool.Id') # Create App Client and capture Client ID directly export CLIENT_ID=$(aws cognito-idp create-user-pool-client \ --user-pool-id $POOL_ID \ --client-name "MyClient" \ --no-generate-secret \ --explicit-auth-flows "ALLOW_USER_PASSWORD_AUTH" "ALLOW_REFRESH_TOKEN_AUTH" \ --region $REGION | jq -r '.UserPoolClient.ClientId') # Create User aws cognito-idp admin-create-user \ --user-pool-id $POOL_ID \ --username $USERNAME \ --region $REGION \ --message-action SUPPRESS > /dev/null # Set Permanent Password aws cognito-idp admin-set-user-password \ --user-pool-id $POOL_ID \ --username $USERNAME \ --password $PASSWORD \ --region $REGION \ --permanent > /dev/null # Authenticate User and capture Access Token export BEARER_TOKEN=$(aws cognito-idp initiate-auth \ --client-id "$CLIENT_ID" \ --auth-flow USER_PASSWORD_AUTH \ --auth-parameters USERNAME=$USERNAME,PASSWORD=$PASSWORD \ --region $REGION | jq -r '.AuthenticationResult.AccessToken') # Output the required values echo "Pool id: $POOL_ID" echo "Discovery URL: https://cognito-idp.$REGION.amazonaws.com/$POOL_ID/.well-known/openid-configuration" echo "Client ID: $CLIENT_ID" echo "Bearer Token: $BEARER_TOKEN"Ouvrez une fenêtre de terminal et définissez les variables d'environnement suivantes :
-
REGION— la AWS région que vous souhaitez utiliser -
USERNAME— le nom d'utilisateur du nouvel utilisateur -
PASSWORD— le mot de passe du nouvel utilisateurexport REGION=us-east-1 # Set your desired Region export USERNAME="user-name" export PASSWORD="password"Dans la fenêtre du terminal, exécutez le script :
source setup_cognito.shNotez le résultat du script. Vous aurez besoin de ces valeurs pour les prochaines étapes.
-
Ce script crée un groupe d'utilisateurs Cognito, un client de groupe d'utilisateurs, ajoute un utilisateur et génère un jeton porteur pour cet utilisateur. Le jeton est valide pendant 60 minutes par défaut.
Étape 3 (Facultatif) : configurez votre environnement d'exécution avec une AgentCore passerelle
Vous pouvez intégrer une AgentCore passerelle à votre AgentCore environnement d'exécution afin que celle-ci devienne le point d'entrée unique et régi du runtime, ce qui vous donne accès à une autorisation basée sur des règles, à Amazon Bedrock Guardrails, à des intercepteurs de demandes et de réponses et à une observabilité unifiée, le tout appliqué en dehors de l'environnement de l'agent. Pour en savoir plus sur la justification complète et sur la manière de configurer cela, consultez la section Intégrez votre environnement d'exécution à l'aide d'une AgentCore passerelle.
Si vous souhaitez lancer ce runtime, créez la passerelle dès maintenant, avant de déployer le runtime à l'étape suivante. Après le déploiement, vous allez ajouter le runtime en tant que cible de passerelle.
Pour vous assurer que les appelants ne peuvent pas contourner la passerelle, limitez le runtime pour qu'il n'accepte que les appels provenant de cette passerelle. Utilisez allowedWorkloadConfiguration comme décrit dans Autorisé WorkloadConfiguration : limitez l'invocation à votre passerelle. La AgentCore CLI ne configure pas ce champ. Utilisez l'API du AgentCore plan de contrôle.
Étape 4 : Déployez votre agent
Important
À compter du 13 octobre 2025, Amazon Bedrock AgentCore utilise un Service-Linked rôle (SLR) pour les autorisations d'identité de la charge de travail au lieu d'exiger la configuration manuelle des politiques IAM pour les nouveaux agents.
Détails du Service-Linked rôle :
-
Nom:
AWSServiceRoleForBedrockAgentCoreRuntimeIdentity -
Directeur du service :
runtime-identity.bedrock-agentcore.amazonaws.com -
Objectif : Gère l'identité de la charge de travail, les jetons d'accès et les informations d'identification OAuth
Assurez-vous que le rôle que vous utilisez pour appeler les API AgentCore de contrôle est autorisé à créer le Service-Linked rôle :
{ "Sid": "CreateBedrockAgentCoreIdentityServiceLinkedRolePermissions", "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::*:role/aws-service-role/runtime-identity.bedrock-agentcore.amazonaws.com/AWSServiceRoleForBedrockAgentCoreRuntimeIdentity", "Condition": { "StringEquals": { "iam:AWSServiceName": "runtime-identity.bedrock-agentcore.amazonaws.com" } } }
Avantage : Le Service-Linked rôle fournit automatiquement les autorisations nécessaires pour accéder à l'identité de la charge de travail sans nécessiter de configuration manuelle des politiques.
Pour plus d'informations sur le rôle lié à un service, voir Rôle lié à un service d'identité.
Vous allez maintenant déployer votre agent avec l'autorisation JWT à l'aide du groupe d'utilisateurs Cognito que vous avez créé. Vous devrez créer un agent avec une configuration d'autorisation. Le tableau suivant représente les différents paramètres de configuration de l'autorisateur et la manière dont nous les utilisons pour valider le jeton entrant.
| configuration_de l'autorisateur | réclamation sous forme de jeton décodé | Remarques |
|---|---|---|
|
url de découverte → émetteur |
bise |
L'URL de découverte doit pointer vers l'URL de l'émetteur. Cela devrait correspondre à la déclaration iss figurant dans le jeton décodé. |
|
Clients autorisés |
client_id |
client_id dans le jeton doit correspondre à l'un des clients autorisés spécifiés dans l'autorisateur |
|
Public autorisé |
aud |
L'une des valeurs en aud claim du jeton doit correspondre à l'une des audiences autorisées spécifiées dans l'autorisateur |
|
autorisé WorkloadConfiguration |
|
Facultatif. Au lancement, utilisé pour autoriser uniquement votre AgentCore passerelle à invoquer le runtime. Consultez la section Restreindre l'invocation à votre passerelle. |
Si client_id et aud sont tous deux fournis, l'autorisateur d'exécution de l'agent vérifiera les deux.
autorisé WorkloadConfiguration : limitez l'invocation à votre passerelle
Le allowedWorkloadConfiguration champ sur les customJWTAuthorizer limites des charges de travail de la chaîne d'identité de la demande qui sont autorisées à invoquer le runtime. Définissez la charge de travail autorisée pour votre passerelle afin que le moteur d'exécution n'accepte une demande que lorsque sa chaîne d'identité inclut cette passerelle. C'est ainsi qu'un environnement d'exécution OAuth (JWT) fait en sorte que le trafic n'arrive que via la passerelle que vous avez configurée à l'étape 3.
Vous indiquez les charges de travail autorisées à l'aide de l'un des champs suivants. Vous pouvez spécifier l'un ou les deux : une demande est acceptée si sa chaîne d'identité correspond à une entrée dans l'un ou l'autre des champs. Vous n'avez donc pas besoin de fournir les deux.
-
HostingEnvironments : liste des environnements d'hébergement dont les charges de travail sont autorisées à invoquer la cible. Chaque entrée est un objet avec un
arn. Au lancement, le seul environnement d'hébergement pris en charge est AgentCore Gateway. Chacunarndoit donc être un ARN AgentCore Gateway. -
WorkloadIdentities : liste des noms d'identité de charge de travail autorisés à invoquer la cible. Le nom d'identité d'une charge de travail n'est pas un ARN. Il s'agit du dernier segment de l'ARN d'identité de charge de travail de la passerelle, que vous pouvez trouver dans le
workloadIdentityDetailschamp deGetGatewayréponse. Par exemple, siworkloadIdentityDetails.workloadIdentityArnc'est le casarn:aws:bedrock-agentcore:us-east-1:111122223333:workload-identity-directory/default/workload-identity/my-gateway-workload-identity, le nom d'identité de la charge de travail estmy-gateway-workload-identity.
La configuration d'autorisation suivante limite l'appel à une AgentCore passerelle spécifique par son ARN. La spécification hostingEnvironments seule est la méthode la plus simple pour autoriser une passerelle :
{ "authorizerConfiguration": { "customJWTAuthorizer": { "discoveryUrl": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example/.well-known/openid-configuration", "allowedClients": ["your-client-id"], "allowedWorkloadConfiguration": { "hostingEnvironments": [ { "arn": "arn:aws:bedrock-agentcore:us-east-1:111122223333:gateway/my-gateway-id" } ] } } } }
Vous pouvez également identifier la passerelle par le nom d'identité de sa charge de travail ou spécifier les deux champs. Lorsque les deux sont présents, une demande est autorisée si elle correspond à une entrée dans l'un ou l'autre des champs. L'allowedWorkloadConfigurationextrait suivant autorise deux passerelles différentes, l'une identifiée par son ARN et l'autre par le nom d'identité de sa charge de travail :
"allowedWorkloadConfiguration": { "hostingEnvironments": [ { "arn": "arn:aws:bedrock-agentcore:us-east-1:111122223333:gateway/my-gateway-1-id" } ], "workloadIdentities": [ "my-gateway-2-workload-identity" ] }
Note
Au lancement, n'allowedWorkloadConfigurationest pris en charge que pour les cibles AgentCore Runtime, et les charges de travail autorisées sont les AgentCore passerelles.
Création et déploiement de l'environnement d'exécution de l'agent
Une fois la configuration de votre autorisateur prête, créez et déployez l'environnement d'exécution de l'agent. Les exemples suivants montrent comment procéder à l'aide de l' AgentCore interface de ligne de commande ou du AWS SDK pour Python (Boto3). Notez l'ARN d'exécution de l'agent figurant sur la sortie. Vous en aurez besoin pour appeler l'agent à l'étape suivante.
Exemple
Note
L'exemple AgentCore CLI configure l'autorisation JWT, mais il ne le fait pas. allowedWorkloadConfiguration Si vous présentez une passerelle au moteur d'exécution, utilisez l'API du AgentCore plan de contrôle pour ajouter ce champ.
Étape 5 : Utilisez le jeton du porteur pour invoquer votre agent
Maintenant que votre agent est déployé avec l'autorisation JWT, vous pouvez l'invoquer à l'aide du jeton porteur.
Note
Si vous avez connecté votre environnement d'exécution à une passerelle à l'étape 3, ajoutez le moteur d'exécution déployé en tant que cible de passerelle avant d'invoquer (voir Cibles AgentCore d'exécution), puis invoquez via le point de terminaison de la passerelle illustré dans les exemples suivants, plutôt que via le point de terminaison d'exécution.
Important
Important pour les utilisateurs existants : les agents créés avant le 13 octobre 2025 continueront à utiliser le rôle d'exécution d'agent pour les autorisations d'identité et nécessiteront que la politique précédente soit associée au rôle d'exécution de l'agent.
Nouveaux agents : pour les agents créés le 13 octobre 2025 ou après cette date, cette politique n'est pas requise car les autorisations sont gérées automatiquement par le Service-Linked rôle.
{ "Sid": "GetAgentAccessToken", "Effect": "Allow", "Action": [ "bedrock-agentcore:GetWorkloadAccessToken", "bedrock-agentcore:GetWorkloadAccessTokenForJWT", "bedrock-agentcore:GetWorkloadAccessTokenForUserId" ], # point to the workload identity for the runtime; the workload identity can be found in # the GetAgentRuntime response and has your agent name in it. "Resource": [ "arn:aws:bedrock-agentcore:region:account-id:workload-identity-directory/default", "arn:aws:bedrock-agentcore:region:account-id:workload-identity-directory/default/workload-identity/agentname-*" ] }
Invoquer l'agent
Récupérez un jeton porteur pour l'utilisateur que vous avez créé avec Amazon Cognito.
# use the password and other details used when you created the cognito user export TOKEN=$(aws cognito-idp initiate-auth \ --client-id "$CLIENT_ID" \ --auth-flow USER_PASSWORD_AUTH \ --auth-parameters USERNAME='testuser',PASSWORD='PASSWORD' \ --region us-east-1 | jq -r '.AuthenticationResult.AccessToken')
Passez à l'appel de l'agent en suivant le reste des instructions suivantes.
Invoquez l'agent avec OAuth.
Exemple
Réponses aux erreurs OAuth
OAuth-configured les agents suivent les normes d'authentification RFC 6749 (OAuth 2.0).
401 Non autorisé - Authentification manquante
Lorsqu'aucun jeton Bearer n'est fourni dans l'en-tête Authorization, la réponse est la suivante :
HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer resource_metadata="https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{ESCAPED_ARN}/invocations/.well-known/oauth-protected-resource?qualifier={QUALIFIER}"
L'resource_metadataURL de l' WWW-Authenticate en-tête pointe vers l'API PRM (Protected Resource Metadata). L'API PRM permet aux clients de découvrir quels serveurs d'autorisation protègent cet agent et leurs URL de point de terminaison OAuth.
Note
Vous devez pré-enregistrer votre client OAuth dans Cognito (via la AWS console ou l'interface de ligne de commande) pour obtenir un client_id avant d'utiliser les points de terminaison découverts. Amazon Cognito ne prend pas en charge l'enregistrement dynamique des clients (RFC 7591).
Étape 6 : configurer votre agent pour qu'il accède aux outils à l'aide d'OAuth
Dans cette section, vous allez apprendre à connecter votre code d'agent aux fournisseurs AgentCore d'informations d'identification pour un accès sécurisé à des ressources externes à l'aide de l'authentification OAuth2.
L'exemple suivant montre comment votre agent qui s'exécute dans Agent Runtime peut demander le consentement OAuth aux utilisateurs, leur permettant ainsi de s'authentifier avec leur compte Google et d'autoriser l'agent à accéder à leur contenu Google Drive.
Pour plus d'informations sur la configuration de l'identité, voir Commencer à utiliser AgentCore l'identité.
Étape 6.1 : Configuration des fournisseurs d'informations d'identification
Pour configurer un fournisseur d'informations d'identification Google, vous devez :
-
Enregistrez votre application auprès de Google pour obtenir l'identifiant et le secret du client
-
Créez un fournisseur d'informations d'identification OAuth à l'aide de l'interface de ligne de commande. AWS Remplacez
your-client-idetyour-client-secretpar votre identifiant client Google OAuth2 et votre code secret client actuels :OAUTH2_CREDENTIAL_PROVIDER_RESPONSE=$(aws bedrock-agentcore-control create-oauth2-credential-provider \ --name "google-provider" \ --credential-provider-vendor "GoogleOauth2" \ --oauth2-provider-config-input '{ "googleOauth2ProviderConfig": { "clientId": "your-client-id", "clientSecret": "your-client-secret" } }' \ --output json) OAUTH2_CALLBACK_URL=$(echo $OAUTH2_CREDENTIAL_PROVIDER_RESPONSE | jq -r '.callbackUrl') echo "OAuth2 Callback URL: $OAUTH2_CALLBACK_URL"Note
Obtenez le résultat
callbackUrlde la CreateOauth2CredentialProvider réponse et ajoutez l'URI à la liste des URI de redirection de votre application Google. L'URL de rappel doit ressembler à : https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/ ********-****-****-****-************
Assurez-vous que votre rôle d'invocation dispose des autorisations nécessaires pour accéder au fournisseur d'informations d'identification.
Étape 6.2 : Autoriser l'agent à lire le contenu de Google Drive
Créez un outil avec les annotations du SDK principal de l'agent, comme illustré dans l'exemple suivant, pour lancer automatiquement le processus OAuth en trois étapes. Lorsque votre agent invoque cet outil, les utilisateurs sont invités à ouvrir l'URL d'autorisation dans leur navigateur et à autoriser l'agent à accéder à leur Google Drive.
import asyncio from bedrock_agentcore.identity.auth import requires_access_token, requires_api_key # This annotation helps agent developer to obtain access tokens from external applications @requires_access_token( provider_name="google-provider", scopes=["https://www.googleapis.com/auth/drive.metadata.readonly"], # Google OAuth2 scopes auth_flow="USER_FEDERATION", # 3LO flow on_auth_url=lambda x: print("Copy and paste this authorization url to your browser: ", x), # prints authorization URL to console force_authentication=True, callback_url='insert_oauth2_callback_url_for_session_binding' ) async def read_from_google_drive(*, access_token: str): print(access_token) #You can see the access_token # Make API calls... main(access_token) asyncio.run(read_from_google_drive(access_token=""))
Note
Pour un exemple d'implémentation de serveur de rappel local permettant de gérer la liaison de session, reportez-vous à oauth2_callback_server.py sur GitHub
Que se passe-t-il dans les coulisses
Lorsque ce code s'exécute, le processus suivant se produit :
-
Agent Runtime autorise le jeton entrant en fonction de l'autorisateur configuré.
-
Agent Runtime échange ce jeton contre un jeton d'accès à la charge de travail via une
bedrock-agentcore:GetWorkloadAccessTokenForJWTAPI et le transmet au code de votre agent via l'en-têteWorkloadAccessTokende charge utile. -
Lors de l'appel à l'outil, votre agent utilise ce jeton d'accès à la charge de travail pour appeler l'API Token Vault
bedrock-agentcore:GetResourceOauth2Tokenet générer une URL d'authentification 3LO. -
Votre agent envoie cette URL à l'application cliente comme indiqué dans la
on_auth_urlméthode. -
L'application cliente présente cette URL à l'utilisateur, qui autorise l'agent à accéder à son Google Drive.
-
AgentCore Le service d'identité reçoit et met en cache en toute sécurité le jeton d'accès Google jusqu'à son expiration, ce qui permet à l'utilisateur de demander ultérieurement l'utilisation de ce jeton sans avoir à donner son consentement pour chaque demande.
Note
AgentCore Identity Service stocke le jeton d'accès Google dans le Token Vault AgentCore en utilisant l'identité de la charge de travail de l'agent et l'ID utilisateur (provenant du jeton JWT entrant, tel que le jeton AWS Cognito) comme clé de liaison, éliminant ainsi les demandes de consentement répétées jusqu'à l'expiration du jeton Google.
Étape 7 : (Facultatif) Propager un jeton JWT vers Runtime AgentCore
Vous pouvez éventuellement transmettre un en-tête Authorization à un AgentCore Runtime pour extraire les revendications. Cela peut être fait en utilisant la configuration de la liste d'autorisations de l'en-tête de demande. Pour de plus amples informations, veuillez consulter RequestHeaderConfiguration.
Étape 7.1 : modifiez le code de votre agent pour lire les en-têtes
Au cours de cette étape, vous apportez des modifications au code de votre agent afin de pouvoir décoder et extraire les revendications d'un jeton JWT à l'aide de la bibliothèque PyJWT.
Dépendances Python
Ajoutez PyJWT à l'agent généré : pyproject.toml
cd app/OAuthAgent uv add PyJWT cd ../..
Mettez à jour votre code d'agent
Modifiez app/OAuthAgent/main.py comme indiqué dans le code suivant. Vous pouvez ignorer la validation de la signature du jeton ici car AgentCore Runtime a déjà validé le jeton lors de l'autorisation entrante.
import jwt import json .... @app.entrypoint def invoke(payload, context): auth_header = context.request_headers.get('Authorization') if not auth_header: return None # Remove "Bearer " prefix if present token = auth_header.replace('Bearer ', '') if auth_header.startswith('Bearer ') else auth_header try: # Skip signature validation as agent runtime has validated the token already. claims = jwt.decode(token, options={"verify_signature": False}) app.logger.info("Claims: %s", json.dumps(claims)) except jwt.InvalidTokenError as e: app.logger.exception("Invalid JWT token: %s", e) .....
Étape 7.2 : Déploiement de l'agent mis à jour
La agentcore add agent commande de l'étape 4 a déjà configuré la liste d'autorisation des en-têtes de Authorization demande. Déployez la mise à jour du code :
agentcore deploy
Étape 7.3 : Invoquer votre agent
Invoquez votre agent à l'aide d'OAuth et vous devriez voir les réclamations dans les journaux de votre agent. CloudWatch
Résolution des problèmes
Comment résoudre les problèmes liés aux jetons
Si vous rencontrez des problèmes d'authentification par jeton, vous pouvez décoder le jeton pour inspecter son contenu :
echo "$TOKEN" | cut -d '.' -f2 | tr '_-' '/+' | awk '{ l=4 - length($0)%4; if (l<4) printf "%s", $0; for (i=0; i<l; i++) printf "="; print "" }' | base64 -D | jq
Cela produira la charge utile du jeton, qui ressemble à :
{ "sub": "subid", "iss": "https://cognito-idp.us-east-1.amazonaws.com/userpoolid", "client_id": "clientid", "origin_jti": "originjti", "event_id": "eventid", "token_use": "access", "scope": "aws.cognito.signin.user.admin", "auth_time": 1752275688, "exp": 1752279288, "iat": 1752275688, "jti": "jti", "username": "username" }
Lorsque vous résolvez des problèmes liés aux jetons, vérifiez les points suivants :
-
L'URL de l'émetteur pointée par l'URL de découverte dans l'autorisation de l'agent doit correspondre à la déclaration de l'émetteur figurant sur le jeton. Procédez comme suit pour confirmer qu'ils correspondent :
-
Sélectionnez l'URL de découverte que vous avez fournie dans la configuration de l'autorisateur lorsque vous avez créé l'agent, par exemple :
https://cognito-idp.us-east-1.amazonaws.com/us-east-1_nnnnnnnnn/.well-known/openid-configuration-
Vérifiez l'URL de l'émetteur -
"issuer": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_12345566". Cela devrait correspondre à la valeur déclarée de l'iss dans le jeton.
-
-
-
client_idla réclamation du jeton doit correspondre à l'une des entrées de l'autorisateur AllowedClients, si elle est fournie-
Notez l'identifiant client que vous avez fourni lors de la création de l'agent
-
Vérifiez que cela correspond à la réclamation client_id dans le jeton décodé
-
-
audla réclamation figurant dans le jeton doit correspondre à l'une desallowedAudienceentrées de l'autorisation, si elle est fournie-
Notez la liste d'audience que vous avez fournie lors de la création de l'agent
-
Vérifiez que cela correspond à l'
audaffirmation du jeton décodé
-
-
Les jetons ne sont valides que pendant quelques minutes (l'expiration par défaut d'Amazon Cognito est de 60 minutes). Récupérez un nouveau jeton si nécessaire.