View a markdown version of this page

Autentica e autorizza con Inbound Auth e Outbound Auth - Fondamento Amazon AgentCore

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-Id Questa intestazione utilizza il percorso internamente. GetWorkloadAccessTokenForUserId

Nota

L'invocazione InvokeAgentRuntime con la X-Amzn-Bedrock-AgentCore-Runtime-User-Id header volontà richiede una nuova azione IAM:bedrock-agentcore:InvokeAgentRuntimeForUser, oltre all'azione esistente. bedrock-agentcore:InvokeAgentRuntime

Quando 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:InvokeAgentRuntimeForUser Ambita 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-id AWS CloudTrail Da utilizzare per monitorare le InvokeAgentRuntime chiamate 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 allowedScopes autorizzazione 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.

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.sh con 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 utente

      export 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.sh

      Annota 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

internal

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. arn Al momento del lancio, l'unico ambiente di hosting supportato è AgentCore Gateway, quindi ognuno arn deve 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 workloadIdentityDetails campo della risposta. GetGateway Ad esempio, se lo workloadIdentityDetails.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
AgentCore CLI

Per configurare e distribuire il tuo agente

  1. Aggiungi l'agente al progetto che hai creato nel passaggio 1. Il comando configura l'URL di rilevamento di Cognito, l'ID del cliente e l'intestazione della Authorization richiesta allowlist:

    agentcore add agent \ --name OAuthAgent \ --language Python \ --framework Strands \ --model-provider Bedrock \ --memory none \ --authorizer-type CUSTOM_JWT \ --discovery-url "https://cognito-idp.$REGION.amazonaws.com/$POOL_ID/.well-known/openid-configuration" \ --allowed-clients "$CLIENT_ID" \ --request-header-allowlist Authorization
  2. Implementa il tuo agente:

    agentcore deploy
  3. Annota l'ARN di runtime dell'agente dall'output. Ne avrai bisogno nel passaggio successivo.

Python
  1. import boto3 # Create the client client = boto3.client('bedrock-agentcore-control', region_name="us-east-1") # Call the CreateAgentRuntime operation response = client.create_agent_runtime( agentRuntimeName='HelloAgent', agentRuntimeArtifact={ 'containerConfiguration': { 'containerUri': '111122223333.dkr.ecr.us-east-1.amazonaws.com/my-agent:latest' } }, authorizerConfiguration={ "customJWTAuthorizer": { "discoveryUrl": 'COGNITO_DISCOVERY_URL', "allowedClients": ['COGNITO_CLIENT_ID'] } }, networkConfiguration={"networkMode":"PUBLIC"}, roleArn='arn:aws:iam::111122223333:role/AgentRuntimeRole', lifecycleConfiguration={ 'idleRuntimeSessionTimeout': 300, # 5 min, configurable 'maxLifetime': 1800 # 30 minutes, configurable }, )
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
Use cURL
  1. // Invoke with OAuth token export PAYLOAD='{"prompt": "hello what is 1+1?"}' export BEDROCK_AGENT_CORE_ENDPOINT_URL="https://bedrock-agentcore.us-east-1.amazonaws.com" # If you fronted the runtime with a gateway (Step 3), the core endpoint URL is now your gateway URL # export BEDROCK_AGENT_CORE_ENDPOINT_URL="https://${GATEWAY_ID}.gateway.bedrock-agentcore.us-east-1.amazonaws.com/${TARGET_NAME}" export INVOKE_URL="${BEDROCK_AGENT_CORE_ENDPOINT_URL}/runtimes/${ESCAPED_AGENT_ARN}/invocations?qualifier=DEFAULT" # If you fronted the runtime with a gateway (Step 3), the preceding URL works but there is also a simpler alternative: # export INVOKE_URL="${BEDROCK_AGENT_CORE_ENDPOINT_URL}/invocations" curl -v -X POST "${INVOKE_URL}" \ -H "Authorization: Bearer ${TOKEN}" \ -H "X-Amzn-Trace-Id: your-trace-id" \ -H "Content-Type: application/json" \ -H "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id: your-session-id" \ -d ${PAYLOAD}
Use Python
  1. Poiché boto3 non supporta l'invocazione con token al portatore, dovrai utilizzare un client HTTP come la libreria delle richieste in Python.

    Per invocare il tuo agente con un token al portatore

  2. Crea uno script Python denominato invoke_agent.py con il seguente contenuto:

    import requests import urllib.parse import json import os # Configuration Constants REGION_NAME = "AWS_REGION" # === Agent Invocation Demo === invoke_agent_arn = "YOUR_AGENT_ARN_HERE" auth_token = os.environ.get('TOKEN') print(f"Using Agent ARN from environment: {invoke_agent_arn}") # URL encode the agent ARN escaped_agent_arn = urllib.parse.quote(invoke_agent_arn, safe='') # Construct the URL — invoke the runtime directly url = f"https://bedrock-agentcore.{REGION_NAME}.amazonaws.com/runtimes/{escaped_agent_arn}/invocations?qualifier=DEFAULT" # If you are fronting the runtime with a gateway (see Step 3), invoke through # the gateway target instead (replace GATEWAY_ID and my-target): # url = f"https://GATEWAY_ID.gateway.bedrock-agentcore.{REGION_NAME}.amazonaws.com/my-target/invocations" # Set up headers headers = { "Authorization": f"Bearer {auth_token}", "X-Amzn-Trace-Id": "your-trace-id", "Content-Type": "application/json", "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id": "testsession123" } # Enable verbose logging for requests import logging logging.basicConfig(level=logging.DEBUG) logging.getLogger("urllib3.connectionpool").setLevel(logging.DEBUG) invoke_response = requests.post( url, headers=headers, data=json.dumps({"prompt": "Hello what is 1+1?"}) ) # Print response in a safe manner print(f"Status Code: {invoke_response.status_code}") print(f"Response Headers: {dict(invoke_response.headers)}") # Handle response based on status code if invoke_response.status_code == 200: response_data = invoke_response.json() print("Response JSON:") print(json.dumps(response_data, indent=2)) elif invoke_response.status_code >= 400: print(f"Error Response ({invoke_response.status_code}):") error_data = invoke_response.json() print(json.dumps(error_data, indent=2)) else: print(f"Unexpected status code: {invoke_response.status_code}") print("Response text:") print(invoke_response.text[:500])
  3. Sostituisci AWS_REGION con la AWS regione che stai utilizzando. dal passaggio 3.

  4. Sostituiscilo YOUR_AGENT_ARN_HERE con l'ARN effettivo di runtime dell'agente indicato nella Fase 3.

  5. Esegui lo script :

    python invoke_agent.py

Risposte agli errori OAuth

OAuth-configured gli agenti seguono gli standard di autenticazione RFC 6749 (OAuth 2.0). Quando manca l'autenticazione, il servizio restituisce una risposta 401 Unauthorized con un' WWW-Authenticate intestazione (per RFC 7235), che consente ai client di scoprire gli endpoint del server di autorizzazione tramite l'API. GetRuntimeProtectedResourceMetadata

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:

  1. Registra la tua applicazione su Google per ottenere l'ID e il segreto del cliente

  2. Crea un provider di credenziali OAuth utilizzando la CLI. AWS Sostituisci your-client-id e your-client-secret con 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 callbackUrl dalla 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

Per un esempio di implementazione del server di callback locale per gestire l'associazione delle sessioni, consulta oauth2_callback_server.py su GitHub

Cosa succede dietro le quinte

Quando questo codice viene eseguito, si verifica il seguente processo:

  1. Agent Runtime autorizza il token in entrata in base all'autorizzatore configurato.

  2. Agent Runtime scambia questo token con un Workload Access Token tramite bedrock-agentcore:GetWorkloadAccessTokenForJWT API e lo invia al codice dell'agente tramite l'intestazione del payload. WorkloadAccessToken

  3. Durante l'invocazione dello strumento, l'agente utilizza questo Workload Access Token per chiamare l'API bedrock-agentcore:GetResourceOauth2Token Token Vault e generare un URL di autenticazione 3LO.

  4. L'agente invia questo URL all'applicazione client come specificato nel metodo. on_auth_url

  5. L'applicazione client presenta questo URL all'utente, che concede il consenso all'agente per accedere al proprio Google Drive.

  6. 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 aud claim 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.