Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Autentica e autorizza con Inbound Auth e Outbound Auth
Questa sezione mostra come implementare l'autenticazione e l'autorizzazione per il runtime dell'agente utilizzando i token portanti OAuth e JWT con Identity. AgentCore Imparerai come configurare i pool di utenti Cognito, configurare il runtime dell'agente per l'autenticazione JWT (Inbound Auth) e implementare OAuth-based l'accesso a risorse di terze parti (outbound Auth).
Per un esempio completo, vedi. https://github.com/awslabs/amazon-bedrock-agentcore-samples/
Per informazioni sull'utilizzo di OAuth con un server MCP, vedi Distribuire server MCP in Runtime. AgentCore
Il AgentCore runtime di Amazon Bedrock fornisce due meccanismi di autenticazione per gli agenti ospitati:
- Autenticazione IAM Sigv4
-
Il meccanismo di autenticazione e autorizzazione predefinito che funziona automaticamente senza configurazioni aggiuntive, simile ad altre AWS API.
X-Amzn-Bedrock-AgentCore-Runtime-User-Id Intestazione
Se la soluzione richiede che l'agent ospitato recuperi i token OAuth per conto degli utenti finali (utilizzando Authorization Code Grant), è possibile specificare l'identificativo dell'utente includendo l'intestazione nelle richieste.
X-Amzn-Bedrock-AgentCore-Runtime-User-IdQuesta intestazione utilizza il percorso internamente.GetWorkloadAccessTokenForUserIdNota
L'invocazione InvokeAgentRuntime con la
X-Amzn-Bedrock-AgentCore-Runtime-User-Id headervolontà richiede una nuova azione IAM:bedrock-agentcore:InvokeAgentRuntimeForUser, oltre all'azione esistente.bedrock-agentcore:InvokeAgentRuntimeQuando utilizzare questa intestazione rispetto all'autenticazione JWT Bearer Token
Questa intestazione è progettata per i seguenti casi d'uso:
-
Clienti aziendali con identificativi utente gestiti dal cliente: organizzazioni che mantengono le proprie stringhe di identità utente e devono trasmetterle a Identity per l'associazione delle credenziali. AgentCore
-
Scenari di sviluppo e avvio rapido: sviluppatori che non dispongono ancora di un token IdP e necessitano di un percorso rapido per testare i flussi di credenziali con ambito utente.
Per le implementazioni di produzione in cui è configurato un provider di identità, utilizza invece l'autenticazione JWT Bearer Token. Esempio di autorizzazione in entrata JWT e accesso in uscita OAuth Il percorso JWT (
GetWorkloadAccessTokenForJWT) convalida l'emittente, la firma e la scadenza del token, fornendo una prova crittografica dell'identità dell'utente. Il percorso dell'X-Amzn-Bedrock-AgentCore-Runtime-User-Idheader non verifica l'UserID rispetto a un'identità autenticata dell'utente finale: si basa sul carico di lavoro chiamante per trasmettere il valore corretto e sulle politiche IAM per limitare chi può fornirlo.X-Amzn-Bedrock-AgentCore-Runtime-User-Id Best practice di sicurezza per Header
Suggerimento
Per una visione consolidata di tutti i consigli di sicurezza di Runtime, consulta le best practice di sicurezza per AgentCore Runtime.
Poiché AgentCore considera il valore dell'intestazione come un identificatore opaco senza verificarlo rispetto a un'identità autenticata, è necessario applicare i seguenti controlli per mantenere il limite di sicurezza:
-
Limita l'autorizzazione IAM: solo i principali fidati dovrebbero avere l'autorizzazione.
bedrock-agentcore:InvokeAgentRuntimeForUserAmbita questa autorizzazione a risorse di runtime specifiche utilizzando le condizioni delle risorse IAM. Non concederla in modo generalizzato tramite policy gestite o dichiarazioni di risorse con caratteri jolly. -
Ricava l'ID utente dal principale autenticato: il valore dell'ID utente deve essere derivato dal contesto dell'entità autenticata (ad esempio, l'identità del chiamante IAM o le dichiarazioni del token utente) anziché accettare valori arbitrari forniti dal client. Ciò impedisce a un utente autenticato di impersonare un altro utente specificandone manualmente un altro.
user-id -
Implementa la registrazione di controllo: registra la relazione tra il principale IAM autenticato (dal contesto Sigv4) e il valore passato.
user-idAWS CloudTrail Da utilizzare per monitorare leInvokeAgentRuntimechiamate che includono il parametro.runtimeUserId -
Nega l'intestazione in contesti non attendibili: per i runtime in cui non è necessaria la delega dell'ID utente, nega esplicitamente l'azione nelle politiche IAM per impedire che l'
bedrock-agentcore:InvokeAgentRuntimeForUserintestazione venga accettata:{ "Statement": [ { "Sid": "DenyUserIdDelegation", "Effect": "Deny", "Action": "bedrock-agentcore:InvokeAgentRuntimeForUser", "Resource": "arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/*" } ] }
-
- Autenticazione JWT Bearer Token
-
È possibile configurare il runtime dell'agente per accettare i token JWT Bearer fornendo la configurazione dell'autorizzazione durante la creazione dell'agente.
Questa configurazione include:
-
URL di scoperta: una stringa che deve corrispondere allo schema degli URL
^.+/\.well-known/openid-configuration$di rilevamento di OpenID Connect -
Destinatari consentiti: un elenco di segmenti di pubblico consentiti che verranno convalidati in base all'attestazione aud nel token JWT
-
Client consentiti: un elenco di identificatori di client consentiti che verranno convalidati rispetto all'attestazione client_id nel token JWT
-
Ambiti consentiti: un elenco di ambiti consentiti che verranno convalidati rispetto all'affermazione dell'ambito nel token JWT. Il campo di
allowedScopesautorizzazione verrà configurato come un elenco di stringhe. -
Dichiarazioni personalizzate obbligatorie: un elenco di attestazioni obbligatorie che verranno convalidate in base al nome e al valore dell'attestazione contenuti nel token JWT in entrata. Per i dettagli sulla configurazione dell'autorizzatore, vedi Configurare l'autorizzatore JWT in entrata Configurare l'autorizzatore JWT in entrata
-
Nota
Un AgentCore Runtime può supportare l'autenticazione in entrata basata su IAM Sigv4 o JWT Bearer Token, ma non entrambe contemporaneamente. Puoi sempre creare versioni diverse del tuo AgentCore Runtime e configurarle per diversi tipi di autorizzazione in entrata. Quando crei un runtime con Amazon Bedrock AgentCore, viene creata automaticamente una Workload Identity per il tuo runtime con AgentCore il servizio Identity.
Argomenti
Limita l'invocazione in entrata di IAM (Sigv4) al tuo gateway
Esempio di autorizzazione in entrata JWT e accesso in uscita OAuth
Fase 2: Configurazione AWS Crea un pool di utenti di Cognito e aggiungi un utente
Passaggio 3 (opzionale): anticipa il tuo runtime con un AgentCore Gateway
Passaggio 5: utilizza il token al portatore per invocare il tuo agente
Passaggio 6: configura il tuo agente per accedere agli strumenti tramite OAuth
Passaggio 7: (Facoltativo) Propaga un token JWT su Runtime AgentCore
Limita l'invocazione in entrata di IAM (Sigv4) al tuo gateway
Puoi configurare il tuo AgentCore Runtime con un AgentCore gateway in modo che il gateway diventi l'unico punto di accesso controllato al runtime, con autorizzazione basata su policy, Amazon Bedrock Guardrails, intercettori di richieste e risposte e osservabilità unificata, il tutto applicato all'esterno dell'ambiente dell'agente. Per una spiegazione completa e per sapere come configurarlo, consulta Front your runtime with an Gateway. AgentCore
Ma questo è utile solo se i chiamanti non riescono a raggiungere il runtime bypassando direttamente il gateway. Se il tuo runtime utilizza l'autorizzazione in entrata IAM (Sigv4) predefinita, puoi limitare l'invocazione al gateway in modo che il traffico raggiunga il runtime solo attraverso di esso. A tale scopo, allega al runtime una policy basata sulle risorse che limiti l'invocazione al ruolo di esecuzione del gateway. Il gateway assume il ruolo di servizio per firmare le richieste al runtime, quindi il ruolo del gateway è il principale che richiama il runtime. Consenti quel ruolo e aggiungi un esplicito Deny per ogni altro principale in modo che nessun'altra identità possa richiamare il runtime anche con una policy permissiva basata sull'identità. Per ulteriori informazioni sulle politiche basate sulle risorse sui runtime, consulta le politiche per Amazon Bedrock. Resource-based 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" } } } ] }
Suggerimento
Un criterio esplicito sostituisce Deny sempre qualsiasi policy, incluse quelle basate sull'identitàAllow, nello stesso account. Digitando l'opzione Deny si aws:PrincipalArn garantisce che solo il ruolo di esecuzione del gateway possa richiamare il runtime, indipendentemente dalle altre autorizzazioni esistenti nell'account.
Importante
La limitazione del runtime al ruolo di esecuzione del gateway è efficace solo quanto i controlli su chi può assumere quel ruolo. Qualsiasi principale che può assumere il ruolo di esecuzione del gateway può richiamare il runtime come se fosse il gateway. Blocca il ruolo aggiungendo aws:SourceArn aws:SourceAccount condizioni alla politica di fiducia del ruolo di esecuzione del gateway in modo che solo il gateway possa assumerlo. Le linee guida sulla prevenzione di Confused vice mostrano la stessa tecnica applicata al ruolo di esecuzione di un runtime; applicate lo stesso schema in questo caso, ma impostate la policy di trust sul ruolo e sull'ambito di esecuzione del gateway in base aws:SourceArn all'ARN del gateway.
Esempio di autorizzazione in entrata JWT e accesso in uscita OAuth
Questa guida illustra il processo di configurazione del runtime dell'agente in modo che venga richiamato con un token di accesso conforme a OAuth utilizzando il formato JWT. L'agente di esempio sarà autorizzato utilizzando i token di accesso Cognito. AWS Successivamente, scoprirai anche come il codice dell'agente può recuperare i token Google per conto dell'utente per controllare Google Drive e recuperare i contenuti.
Cosa imparerai
In questa guida, imparerai come:
-
Configura il pool di utenti di Cognito, aggiungi un utente e ottieni un token al portatore per l'utente
-
Configura il runtime dell'agente per utilizzare il pool di utenti Cognito per l'autorizzazione
-
Imposta il codice dell'agente per recuperare i token OAuth per conto dell'utente per chiamare gli strumenti
Prerequisiti
Prima di iniziare, assicurati di avere:
-
Un AWS account con le autorizzazioni appropriate
-
Conoscenza di base della programmazione Python
-
Familiarità con i contenitori Docker (per implementazioni avanzate)
-
Configurare correttamente un agente di base con runtime
-
La AWS CLI più recente e installata
jq -
Conoscenza di base dell'autorizzazione OAuth, principalmente dei token JWT bearer, dei claim e dei vari flussi di concessione
Fase 1: Crea il tuo progetto di agente
Usa il agentcore create comando per impostare un progetto vuoto. L' JWT-authorized agente viene aggiunto dopo aver creato le risorse Cognito nel passaggio 2.
agentcore create --project-name OAuthAgentProject --no-agent cd OAuthAgentProject
Questo genera:
-
File di configurazione
agentcore/agentcore.json -
agentcore/aws-targets.jsonfile di destinazione della distribuzione -
agentcore/cdk/progetto di infrastruttura
Nota
Tieni questo terminale acceso OAuthAgentProject per i restanti comandi AgentCore CLI.
Fase 2: Configurazione AWS Crea un pool di utenti di Cognito e aggiungi un utente
Per configurare un pool di utenti Cognito e creare un utente, utilizzerai uno script di shell che automatizza il processo.
Per ulteriori informazioni, consulta la Fase 2: Importazione dei moduli Identity e Auth.
Per configurare il pool di utenti di Cognito e creare un utente
-
Crea un file denominato
setup_cognito.shcon i seguenti contenuti:#!/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"Apri una finestra di terminale e imposta le seguenti variabili di ambiente:
-
REGION— la AWS regione che vuoi usare -
USERNAME— il nome utente per il nuovo utente -
PASSWORD— la password per il nuovo utenteexport REGION=us-east-1 # Set your desired Region export USERNAME="user-name" export PASSWORD="password"Nella finestra del terminale, esegui lo script:
source setup_cognito.shAnnota l'output dello script. Avrai bisogno di questi valori nei passaggi successivi.
-
Questo script crea un pool di utenti Cognito, un client del pool di utenti, aggiunge un utente e genera un token al portatore per l'utente. Per impostazione predefinita, il token è valido per 60 minuti.
Passaggio 3 (opzionale): anticipa il tuo runtime con un AgentCore Gateway
Puoi configurare il AgentCore runtime con un AgentCore gateway in modo che il gateway diventi l'unico punto di accesso controllato al runtime, offrendoti un'autorizzazione basata su policy, Amazon Bedrock Guardrails, intercettori di richieste e risposte e osservabilità unificata, il tutto applicato all'esterno dell'ambiente dell'agente. Per una spiegazione completa e per sapere come configurarlo, consulta Front your runtime with an Gateway. AgentCore
Se desideri anticipare questo runtime, crea subito il gateway, prima di distribuire il runtime nel passaggio successivo. Dopo la distribuzione, aggiungerai il runtime come destinazione del gateway.
Per assicurarti che i chiamanti non possano bypassare il gateway, limita il runtime in modo che accetti chiamate solo da quel gateway. Usa allowedWorkloadConfiguration come descritto in permessoWorkloadConfiguration: limita l'invocazione al tuo gateway. La AgentCore CLI non configura questo campo. Usa l'API del piano di AgentCore controllo.
Fase 4: Distribuisci il tuo agente
Importante
A partire dal 13 ottobre 2025, Amazon Bedrock AgentCore utilizza un Service-Linked ruolo (SLR) per le autorizzazioni di identità del carico di lavoro invece di richiedere la configurazione manuale delle policy IAM per i nuovi agenti.
I Service-Linked dettagli del ruolo:
-
Nome:
AWSServiceRoleForBedrockAgentCoreRuntimeIdentity -
Responsabile del servizio:
runtime-identity.bedrock-agentcore.amazonaws.com -
Scopo: gestisce i token di accesso all'identità del carico di lavoro e le credenziali OAuth
Assicurati che il ruolo che utilizzi per richiamare le API di AgentCore controllo disponga dell'autorizzazione per creare il ruolo: Service-Linked
{ "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" } } }
Vantaggio: il Service-Linked ruolo fornisce automaticamente le autorizzazioni necessarie per l'accesso all'identità del carico di lavoro senza richiedere la configurazione manuale delle policy.
Per informazioni dettagliate sul ruolo collegato al servizio, vedere Ruolo collegato al servizio Identity.
Ora distribuirai il tuo agente con l'autorizzazione JWT utilizzando il pool di utenti Cognito che hai creato. Dovrai creare un agente con configurazione di autorizzazione. La tabella seguente rappresenta i vari parametri di configurazione dell'autorizzatore e il modo in cui li utilizziamo per convalidare il token in entrata.
| authorizer_configuration | rivendicazione in token decodificato | Note |
|---|---|---|
|
url di scoperta → emittente |
bacio |
L'URL di scoperta deve puntare a un URL dell'emittente. Questo dovrebbe corrispondere all'attestazione iss nel token decodificato. |
|
Client consentiti |
client_id |
client_id nel token deve corrispondere a uno dei client consentiti specificati nell'autorizzatore |
|
Pubblico consentito |
aud |
Uno dei valori in aud claim from the token deve corrispondere a uno dei destinatari consentiti specificati nell'autorizzazione |
|
consentito WorkloadConfiguration |
|
Opzionale. All'avvio, utilizzato per consentire solo al AgentCore Gateway di richiamare il runtime. Vedi Limita l'invocazione al tuo gateway. |
Se vengono forniti sia client_id che aud, l'autorizzatore del runtime dell'agente verificherà entrambi.
consentitoWorkloadConfiguration: limita l'invocazione al tuo gateway
Il allowedWorkloadConfiguration campo sul campo customJWTAuthorizer limita i carichi di lavoro nella catena di identità della richiesta che possono richiamare il runtime. Imposta il carico di lavoro consentito sul tuo gateway in modo che il runtime accetti una richiesta solo quando la catena di identità include quel gateway: in questo modo un runtime OAuth (JWT) impone che il traffico arrivi solo attraverso il gateway configurato nel passaggio 3.
Fornisci i carichi di lavoro consentiti utilizzando uno dei seguenti campi. Puoi specificarne uno o entrambi: una richiesta viene accettata se la catena di identità corrisponde a una voce in uno dei due campi, quindi non è necessario fornirli entrambi.
-
HostingEnvironments: un elenco di ambienti di hosting i cui carichi di lavoro sono autorizzati a richiamare la destinazione. Ogni voce è un oggetto con un.
arnAl momento del lancio, l'unico ambiente di hosting supportato è AgentCore Gateway, quindi ognunoarndeve essere un AgentCore Gateway ARN. -
WorkloadIdentities: un elenco di nomi di identità del carico di lavoro a cui è consentito richiamare la destinazione. Il nome di identità del carico di lavoro non è un ARN. È il segmento finale dell'ARN di identità del carico di lavoro del gateway, che puoi trovare nel
workloadIdentityDetailscampo della risposta.GetGatewayAd esempio, se loworkloadIdentityDetails.workloadIdentityArnèarn:aws:bedrock-agentcore:us-east-1:111122223333:workload-identity-directory/default/workload-identity/my-gateway-workload-identity, allora il nome dell'identità del carico di lavoro è.my-gateway-workload-identity
La seguente configurazione dell'autorizzatore limita l'invocazione a un gateway specifico AgentCore tramite il relativo ARN. La hostingEnvironments sola specificazione è il modo più semplice per consentire un gateway:
{ "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" } ] } } } }
In alternativa, puoi identificare il gateway in base al nome identificativo del carico di lavoro o specificare entrambi i campi. Quando sono presenti entrambi, è consentita una richiesta se corrisponde a una voce in uno dei due campi. Lo allowedWorkloadConfiguration snippet seguente consente due gateway diversi, uno identificato dal relativo ARN e l'altro dal nome identificativo del carico di lavoro:
"allowedWorkloadConfiguration": { "hostingEnvironments": [ { "arn": "arn:aws:bedrock-agentcore:us-east-1:111122223333:gateway/my-gateway-1-id" } ], "workloadIdentities": [ "my-gateway-2-workload-identity" ] }
Nota
Al momento del lancio, allowedWorkloadConfiguration è supportato solo per i target AgentCore Runtime e i carichi di lavoro consentiti sono i Gateway. AgentCore
Crea e distribuisci il runtime dell'agente
Con la configurazione dell'autorizzazione pronta, crea e distribuisci il runtime dell'agente. Gli esempi seguenti mostrano come eseguire questa operazione con la AgentCore CLI o l' AWS SDK per Python (Boto3). Annota l'ARN di runtime dell'agente presente nell'output: ti servirà per richiamare l'agente nel passaggio successivo.
Esempio
Nota
L'esempio AgentCore CLI configura l'autorizzazione JWT, ma non lo configura. allowedWorkloadConfiguration Se utilizzi un gateway per il runtime, utilizza l'API AgentCore control-plane per aggiungere quel campo.
Passaggio 5: utilizza il token al portatore per invocare il tuo agente
Ora che il tuo agente è stato distribuito con l'autorizzazione JWT, puoi richiamarlo utilizzando il token al portatore.
Nota
Se nel passaggio 3 hai impostato il runtime con un gateway, aggiungi il runtime distribuito come destinazione del gateway prima di richiamarlo (vedi AgentCore Runtime targets) e quindi richiama tramite l'endpoint del gateway mostrato negli esempi che seguono, anziché l'endpoint di runtime.
Importante
Importante per gli utenti esistenti: gli agenti creati prima del 13 ottobre 2025 continueranno a utilizzare il ruolo di esecuzione dell'agente per le autorizzazioni di identità e richiederanno che la policy precedente sia associata al ruolo di esecuzione dell'agente.
Nuovi agenti: per gli agenti creati il 13 ottobre 2025 o dopo tale data, questa policy non è richiesta in quanto le autorizzazioni vengono gestite automaticamente dal ruolo. Service-Linked
{ "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-*" ] }
Richiama l'agente
Recupera un token al portatore per l'utente che hai creato con 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')
Procedi a richiamare l'agente con il resto delle seguenti istruzioni.
Richiama l'agente con OAuth.
Esempio
Risposte agli errori OAuth
OAuth-configured gli agenti seguono gli standard di autenticazione RFC 6749 (OAuth 2.0).
401 Non autorizzato - Autenticazione mancante
Quando non viene fornito alcun token Bearer nell'intestazione di autorizzazione, la risposta è:
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 nell' WWW-Authenticate intestazione punta all'API Protected Resource Metadata (PRM). L'API PRM consente ai clienti di scoprire quali server di autorizzazione proteggono questo agente e i relativi URL degli endpoint OAuth.
Nota
È necessario preregistrare il client OAuth in Cognito (tramite AWS Console o CLI) per ottenerne uno prima di utilizzare gli endpoint rilevati. client_id Amazon Cognito non supporta la registrazione dinamica dei client (RFC 7591).
Passaggio 6: configura il tuo agente per accedere agli strumenti tramite OAuth
In questa sezione, scoprirai come connettere il codice del tuo agente con i fornitori di AgentCore credenziali per un accesso sicuro alle risorse esterne utilizzando l'autenticazione OAuth2.
L'esempio seguente dimostra come l'agente in esecuzione in Agent Runtime può richiedere il consenso OAuth agli utenti, consentendo loro di autenticarsi con il proprio account Google e autorizzare l'agente ad accedere ai propri contenuti Google Drive.
Per ulteriori informazioni sulla configurazione dell'identità, consulta Guida introduttiva a Identity. AgentCore
Passaggio 6.1: Configurare i provider di credenziali
Per configurare un fornitore di credenziali Google, devi:
-
Registra la tua applicazione su Google per ottenere l'ID e il segreto del cliente
-
Crea un provider di credenziali OAuth utilizzando la CLI. AWS Sostituisci
your-client-ideyour-client-secretcon il tuo ID cliente Google OAuth2 e il tuo segreto client effettivi: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"Nota
Ottieni il codice
callbackUrldalla CreateOauth2CredentialProvider risposta e aggiungi l'URI all'elenco degli URI di reindirizzamento della tua applicazione Google. L'URL di callback dovrebbe essere il seguente: ********-******-******************** https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/
Assicurati che il tuo ruolo di chiamata disponga delle autorizzazioni necessarie per accedere al provider di credenziali.
Passaggio 6.2: abilita l'agente a leggere i contenuti di Google Drive
Crea uno strumento con le annotazioni dell'Agent Core SDK come mostrato nell'esempio seguente per avviare automaticamente il processo OAuth a tre fasi. Quando l'agente richiama questo strumento, agli utenti verrà richiesto di aprire l'URL di autorizzazione nel browser e di concedere il consenso all'agente per accedere al proprio 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=""))
Nota
Cosa succede dietro le quinte
Quando questo codice viene eseguito, si verifica il seguente processo:
-
Agent Runtime autorizza il token in entrata in base all'autorizzatore configurato.
-
Agent Runtime scambia questo token con un Workload Access Token tramite
bedrock-agentcore:GetWorkloadAccessTokenForJWTAPI e lo invia al codice dell'agente tramite l'intestazione del payload.WorkloadAccessToken -
Durante l'invocazione dello strumento, l'agente utilizza questo Workload Access Token per chiamare l'API
bedrock-agentcore:GetResourceOauth2TokenToken Vault e generare un URL di autenticazione 3LO. -
L'agente invia questo URL all'applicazione client come specificato nel metodo.
on_auth_url -
L'applicazione client presenta questo URL all'utente, che concede il consenso all'agente per accedere al proprio Google Drive.
-
AgentCore Il servizio di identità riceve e memorizza nella cache in modo sicuro il token di accesso di Google fino alla scadenza, consentendo alle successive richieste dell'utente di utilizzare questo token senza che l'utente debba fornire il consenso per ogni richiesta.
Nota
AgentCore Identity Service memorizza il token di accesso di Google nel AgentCore Token Vault utilizzando l'identità del carico di lavoro dell'agente e l'ID utente (dal token JWT in entrata, come il token AWS Cognito) come chiave vincolante, eliminando le richieste di consenso ripetute fino alla scadenza del token Google.
Passaggio 7: (Facoltativo) Propaga un token JWT su Runtime AgentCore
Facoltativamente, puoi passare un'intestazione di autorizzazione a un AgentCore Runtime per estrarre i claim. Questa operazione può essere eseguita utilizzando la configurazione allowlist dell'intestazione della richiesta. Per ulteriori informazioni, consulta RequestHeaderConfiguration.
Passaggio 7.1: modifica il codice dell'agente per leggere le intestazioni
In questo passaggio apporti modifiche al codice del tuo agente in modo da poter decodificare ed estrarre i claim da un token JWT utilizzando la libreria PyJWT.
Dipendenze Python
Aggiungi PyJWT all'agente generato: pyproject.toml
cd app/OAuthAgent uv add PyJWT cd ../..
Aggiorna il codice del tuo agente
Modifica app/OAuthAgent/main.py come mostrato nel codice seguente. Puoi saltare la convalida della firma del token qui perché AgentCore Runtime ha già convalidato il token durante l'autorizzazione in entrata.
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) .....
Passaggio 7.2: Distribuire l'agente aggiornato
Il agentcore add agent comando nel passaggio 4 ha già configurato l'header della Authorization richiesta allowlist. Distribuisci l'aggiornamento del codice:
agentcore deploy
Passaggio 7.3: richiama il tuo agente
Richiamate il vostro agente usando OAuth e dovreste vedere le affermazioni nei log del vostro agente. CloudWatch
Risoluzione dei problemi
Come eseguire il debug dei problemi relativi ai token
Se riscontri problemi con l'autenticazione del token, puoi decodificare il token per controllarne il contenuto:
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
Questo produrrà il payload del token, che è simile a:
{ "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" }
Per risolvere i problemi relativi ai token, verifica quanto segue:
-
L'URL dell'emittente a cui fa riferimento l'URL di scoperta nell'autorizzatore dell'agente deve corrispondere alla dichiarazione dell'emittente nel token. Effettua le seguenti operazioni per confermare che corrispondano:
-
Seleziona l'URL di rilevamento fornito nella configurazione dell'autorizzazione al momento della creazione dell'agente, ad esempio:
https://cognito-idp.us-east-1.amazonaws.com/us-east-1_nnnnnnnnn/.well-known/openid-configuration-
Controlla l'url dell'emittente -.
"issuer": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_12345566"Questo dovrebbe corrispondere al valore del claim iss nel token.
-
-
-
client_idil claim nel token deve corrispondere a una delle voci allowedClients dell'autore, se fornite-
Annota l'ID cliente che hai fornito quando hai creato l'agente
-
Verifica che corrisponda all'affermazione client_id nel token decodificato
-
-
audil claim nel token deve corrispondere a una delle voci dell'autorizzatoreallowedAudience, se fornito-
Annota l'elenco dei destinatari che hai fornito quando hai creato l'agente
-
Verifica che corrisponda al
audclaim nel token decodificato
-
-
I token sono validi solo per diversi minuti (la scadenza predefinita di Amazon Cognito è 60 minuti). Recupera un nuovo token se necessario.