Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Autentica y autoriza con Autenticación entrante y Autenticación saliente
En esta sección, se muestra cómo implementar la autenticación y la autorización en el tiempo de ejecución de los agentes mediante los tokens portadores de OAuth y JWT con identidad. AgentCore Aprenderás a configurar los grupos de usuarios de Cognito, configurar el tiempo de ejecución de tus agentes para la autenticación con JWT (autenticación entrante) e implementar el OAuth-based acceso a recursos de terceros (autenticación saliente).
Para ver un ejemplo completo, consulte https://github.com/awslabs/amazon-bedrock-agentcore-samples/
Para obtener información sobre el uso de OAuth con un servidor MCP, consulta Cómo implementar servidores MCP en tiempo de ejecución. AgentCore
Amazon Bedrock AgentCore Runtime proporciona dos mecanismos de autenticación para los agentes alojados:
- Autenticación Sigv4 de IAM
-
El mecanismo de autenticación y autorización predeterminado que funciona automáticamente sin configuración adicional, de forma similar a otras AWS API.
X-Amzn-Bedrock-AgentCore-Runtime-User-Id Encabezado
Si tu solución requiere que el agente hospedado recupere los tokens de OAuth en nombre de los usuarios finales (mediante la concesión de códigos de autorización), puedes especificar el identificador de usuario incluyendo el
X-Amzn-Bedrock-AgentCore-Runtime-User-Idencabezado en tus solicitudes. Este encabezado usa laGetWorkloadAccessTokenForUserIdruta internamente.nota
Para invocar InvokeAgentRuntime con el
X-Amzn-Bedrock-AgentCore-Runtime-User-Id headerse requerirá una nueva acción de IAM:bedrock-agentcore:InvokeAgentRuntimeForUser, además de la acción existentebedrock-agentcore:InvokeAgentRuntime.¿Cuándo usar este encabezado en lugar de la autenticación con JWT Bearer Token?
Este encabezado está diseñado para los siguientes casos de uso:
-
Clientes empresariales con identificadores de usuario gestionados por el cliente: organizaciones que mantienen sus propias cadenas de identidad de usuario y necesitan pasarlas a AgentCore Identity para vincular las credenciales.
-
Escenarios de desarrollo e inicio rápido: desarrolladores que aún no tienen un token de IdP disponible y necesitan una ruta rápida para probar los flujos de credenciales por usuario.
Para las implementaciones de producción en las que tengas configurado un proveedor de identidad, usa en su lugar la autenticación JWT Bearer Token. La ruta JWT (
GetWorkloadAccessTokenForJWT) valida el emisor, la firma y la caducidad del token, y proporciona una prueba criptográfica de la identidad del usuario. La ruta delX-Amzn-Bedrock-AgentCore-Runtime-User-Idencabezado no compara el ID de usuario con la identidad de un usuario final autenticado; depende de la carga de trabajo de la llamada para transferir el valor correcto y de tus políticas de IAM para restringir quién puede proporcionarlo.Mejores prácticas de seguridad para el encabezado X-Amzn-Bedrock-AgentCore-Runtime-User-Id
sugerencia
Para obtener una vista consolidada de todas las recomendaciones de seguridad en Runtime, consulte las prácticas recomendadas de seguridad para AgentCore Runtime.
Dado que AgentCore trata el valor del encabezado como un identificador opaco sin verificarlo con una identidad autenticada, debe aplicar los siguientes controles para mantener el límite de seguridad:
-
Restrinja el permiso de IAM: solo los directores de confianza deben tener el permiso.
bedrock-agentcore:InvokeAgentRuntimeForUserAmplíe este permiso a recursos de ejecución específicos mediante las condiciones de los recursos de IAM. No lo conceda de forma generalizada mediante políticas administradas o declaraciones de recursos comodín. -
Derive el identificador de usuario del principal autenticado: el valor del identificador de usuario debe derivarse del contexto del principal autenticado (por ejemplo, las solicitudes de identidad de la persona que llama de IAM o de los tokens de usuario), en lugar de aceptar valores arbitrarios proporcionados por el cliente. De este modo, se evita que un usuario autenticado se haga pasar por otro usuario especificando manualmente otro.
user-id -
Implemente el registro de auditoría: registre la relación entre el principal de IAM autenticado (desde el contexto de SigV4) y el valor que se está transfiriendo.
user-idAWS CloudTrail Utilícelo para supervisarInvokeAgentRuntimelas llamadas que incluyen el parámetro.runtimeUserId -
Denegar el encabezado en contextos que no sean de confianza: en tiempos de ejecución en los que no sea necesaria la delegación de identificadores de usuario, rechace la
bedrock-agentcore:InvokeAgentRuntimeForUseracción de forma explícita en las políticas de IAM para evitar que se acepte el encabezado:{ "Statement": [ { "Sid": "DenyUserIdDelegation", "Effect": "Deny", "Action": "bedrock-agentcore:InvokeAgentRuntimeForUser", "Resource": "arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/*" } ] }
-
- Autenticación con el token JWT Bearer
-
Puedes configurar el tiempo de ejecución de tu agente para que acepte los tokens portadores de JWT configurando el autorizador durante la creación del agente.
Esta configuración incluye:
-
URL de detección: cadena que debe coincidir con el patrón de las URL de detección
^.+/\.well-known/openid-configuration$de OpenID Connect -
Audiencias permitidas: una lista de las audiencias permitidas que se validará comparándola con la afirmación aud del token de JWT
-
Clientes permitidos: una lista de identificadores de clientes permitidos que se validarán con la afirmación client_id del token de JWT
-
Ámbitos permitidos: una lista de ámbitos permitidos que se validará comparándola con la afirmación de alcance del token de JWT. El campo
allowedScopesde autorización se configurará como una lista de cadenas. -
Declaraciones personalizadas obligatorias: una lista de las notificaciones obligatorias que se validará con el nombre y el valor de la reclamación incluidos en el token de JWT entrante. Para obtener más información sobre la configuración del autorizador, consulta Configurar el autorizador JWT entrante
-
nota
Un AgentCore Runtime puede admitir la autenticación entrante basada en IAM Sigv4 o JWT Bearer Token, pero no ambas a la vez. Siempre puedes crear diferentes versiones de tu AgentCore Runtime y configurarlas para diferentes tipos de autorización entrante. Cuando crea un tiempo de ejecución con Amazon Bedrock AgentCore, se crea automáticamente una identidad de carga de trabajo para su tiempo de ejecución con el servicio AgentCore Identity.
Temas
Restrinja la invocación entrante de IAM (SIGv4) a su puerta de enlace
Ejemplo de autorización entrante de JWT y acceso saliente de OAuth
Paso 2: Configurar AWS Grupo de usuarios de Cognito y adición de un usuario
Paso 3 (opcional): mejora tu tiempo de ejecución con un AgentCore Gateway
Paso 6: Configure su agente para que acceda a las herramientas mediante OAuth
Paso 7: (opcional) Propagar un token de JWT a Runtime AgentCore
Restrinja la invocación entrante de IAM (SIGv4) a su puerta de enlace
Puede configurar su AgentCore entorno de ejecución con una AgentCore puerta de enlace para que ésta se convierta en el punto de entrada único y controlado al tiempo de ejecución, lo que le permitirá disponer de autorizaciones basadas en políticas, barreras de protección de Amazon Bedrock, interceptores de solicitudes y respuestas y una observabilidad unificada, todo ello aplicado fuera del entorno del propio agente. Para conocer todos los motivos y saber cómo configurarlo, consulte Front your runtime with an Gateway. AgentCore
Pero esto solo es útil si las personas que llaman no pueden acceder directamente al motor de ejecución sin pasar por la puerta de enlace. Si tu motor de ejecución usa la autorización entrante predeterminada de IAM (SIGv4), puedes restringir la invocación a la puerta de enlace para que el tráfico llegue al tiempo de ejecución únicamente a través de ella. Para lograrlo, adjunta al tiempo de ejecución una política basada en los recursos que restrinja la invocación a la función de ejecución de la puerta de enlace. La puerta de enlace asume su función de servicio para firmar las solicitudes en el tiempo de ejecución, por lo que la función de puerta de enlace es el principal que invoca el tiempo de ejecución. Permita esa función y añada una función explícita Deny para cada otra entidad principal, de modo que ninguna otra identidad pueda invocar el tiempo de ejecución, incluso con una política permisiva basada en la identidad. Para obtener más información sobre las políticas de tiempos de ejecución basadas en recursos, consulte las políticas de 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" } } } ] }
sugerencia
Una política explícita Deny siempre prevalece sobre cualquier política de la misma cuentaAllow, incluidas las políticas basadas en la identidad. Al activarla, se aws:PrincipalArn garantiza que solo la Deny función de ejecución de la puerta de enlace pueda invocar el tiempo de ejecución, independientemente de los otros permisos que existan en su cuenta.
importante
Restringir el tiempo de ejecución a la función de ejecución de la puerta de enlace es tan importante como los controles sobre quién puede asumir esa función. Cualquier director que pueda asumir la función de ejecución de la puerta de enlace puede invocar el tiempo de ejecución como si fuera la puerta de enlace. Bloquee el rol añadiendo aws:SourceArn aws:SourceAccount condiciones a la política de confianza del rol de ejecución de la puerta de enlace para que solo su puerta de enlace pueda asumirlo. La guía de prevención de los diputados confundidos muestra la misma técnica que se aplica a la función de ejecución de un tiempo de ejecución; aplica el mismo patrón aquí, pero establece la política de confianza para la función de ejecución de la puerta de enlace y el alcance del aws:SourceArn ARN de la puerta de enlace.
Ejemplo de autorización entrante de JWT y acceso saliente de OAuth
En esta guía, se explica el proceso de configurar el tiempo de ejecución de un agente para que se invoque con un token de acceso compatible con OAuth que utilice el formato JWT. El agente de muestra se autorizará mediante AWS los tokens de acceso de Cognito. Más adelante, también aprenderás cómo el código del agente puede recuperar los tokens de Google en nombre del usuario para comprobar Google Drive y buscar el contenido.
Qué aprenderás
En esta guía, aprenderás cómo:
-
Configure el grupo de usuarios de Cognito, añada un usuario y obtenga un token de portador para el usuario
-
Configure el tiempo de ejecución de su agente para usar el grupo de usuarios de Cognito para la autorización
-
Configura tu código de agente para obtener los tokens de OAuth en nombre del usuario para acceder a las herramientas
Requisitos previos
Antes de empezar, asegúrese de que tiene lo siguiente:
-
Una AWS cuenta con los permisos adecuados
-
Comprensión básica de la programación en Python
-
Familiaridad con los contenedores Docker (para una implementación avanzada)
-
Configure correctamente un agente básico con tiempo de ejecución
-
La AWS CLI más reciente y la
jqinstalada -
Conocimientos básicos sobre la autorización de OAuth, principalmente los tokens portadores de JWT, las solicitudes y los distintos flujos de subvenciones
Paso 1: Crea tu proyecto de agente
Usa el agentcore create comando para configurar un proyecto vacío. Añada el JWT-authorized agente después de crear los recursos de Cognito en el paso 2.
agentcore create --project-name OAuthAgentProject --no-agent cd OAuthAgentProject
Esto genera:
-
Archivo de configuración de la
agentcore/agentcore.json -
agentcore/aws-targets.jsonarchivo de destino de despliegue -
agentcore/cdk/proyecto de infraestructura
nota
Mantenga este terminal abierto OAuthAgentProject para los comandos restantes de la AgentCore CLI.
Paso 2: Configurar AWS Grupo de usuarios de Cognito y adición de un usuario
Para configurar un grupo de usuarios de Cognito y crear un usuario, utilizarás un script de shell que automatiza el proceso.
Para obtener más información, consulta el paso 2: Importar los módulos de identidad y autenticación.
Para configurar el grupo de usuarios de Cognito y crear un usuario
-
Cree un archivo denominado
setup_cognito.shcon el siguiente contenido:#!/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"Abra una ventana de terminal y defina las siguientes variables de entorno:
-
REGION— la AWS región que desea usar -
USERNAME— el nombre de usuario del nuevo usuario -
PASSWORD— la contraseña del nuevo usuarioexport REGION=us-east-1 # Set your desired Region export USERNAME="user-name" export PASSWORD="password"En la ventana del terminal, ejecute el script:
source setup_cognito.shObserve el resultado del script. Necesitará estos valores en los pasos siguientes.
-
Este script crea un grupo de usuarios de Cognito, un cliente de grupo de usuarios, agrega un usuario y genera un token portador para el usuario. El token es válido durante 60 minutos de forma predeterminada.
Paso 3 (opcional): mejora tu tiempo de ejecución con un AgentCore Gateway
Puede configurar su AgentCore tiempo de ejecución con una AgentCore puerta de enlace para que ésta se convierta en el punto de entrada único y controlado al tiempo de ejecución, lo que le proporcionará una autorización basada en políticas, barreras de protección de Amazon Bedrock, interceptores de solicitudes y respuestas y una observabilidad unificada, todo ello fuera del entorno del propio agente. Para conocer todos los motivos y saber cómo configurarlo, consulte Front your runtime with an Gateway. AgentCore
Si desea anticipar este tiempo de ejecución, cree la puerta de enlace ahora, antes de implementar el tiempo de ejecución en el siguiente paso. Tras la implementación, añadirá el tiempo de ejecución como destino de puerta de enlace.
Para asegurarte de que las personas que llaman no puedan eludir la puerta de enlace, restringe el tiempo de ejecución para que solo acepte las invocaciones desde esa puerta de enlace. allowedWorkloadConfigurationUtilízalo como se describe en PermitidoWorkloadConfiguration: restringe la invocación a tu puerta de enlace. La AgentCore CLI no configura este campo. Utilice la API del AgentCore plano de control.
Paso 4: Despliegue su agente
importante
A partir del 13 de octubre de 2025, Amazon Bedrock AgentCore utilizará un Service-Linked rol (SLR) para los permisos de identidad de las cargas de trabajo en lugar de requerir la configuración manual de políticas de IAM para los nuevos agentes.
Detalles Service-Linked del rol:
-
Nombre:
AWSServiceRoleForBedrockAgentCoreRuntimeIdentity -
Director del servicio:
runtime-identity.bedrock-agentcore.amazonaws.com -
Propósito: administra la carga de trabajo, la identidad, los tokens de acceso y las credenciales de OAuth
Asegúrese de que el rol que usa para invocar las API AgentCore de control tenga permiso para crear el rol: 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" } } }
Ventaja: el Service-Linked rol proporciona automáticamente los permisos necesarios para acceder a la identidad de la carga de trabajo sin necesidad de configurar manualmente las políticas.
Para obtener información detallada sobre el rol vinculado al servicio, consulte el rol vinculado al servicio de identidad.
Ahora desplegará su agente con la autorización de JWT mediante el grupo de usuarios de Cognito que creó. Tendrá que crear un agente con la configuración del autorizador. La siguiente tabla representa los distintos parámetros de configuración del autorizador y cómo los utilizamos para validar el token entrante.
| authorizer_configuration | reclamación en un token decodificado | Notas |
|---|---|---|
|
URL de descubrimiento → emisor |
iss |
La URL de descubrimiento debe apuntar a la URL del emisor. Debe coincidir con la afirmación iss del token decodificado. |
|
Clientes permitidos |
client_id |
El client_id del token debe coincidir con uno de los clientes permitidos especificados en el autorizador |
|
Audiencia permitida |
aud |
Uno de los valores de aud que reclama el token debe coincidir con uno de los públicos permitidos especificados en el autorizador |
|
permitido WorkloadConfiguration |
|
Opcional. En el momento del lanzamiento, se usa para permitir que solo tu AgentCore Gateway invoque el motor de ejecución. Consulta Restringir la invocación a tu puerta de enlace. |
Si se proporcionan tanto client_id como aud, el autorizador del tiempo de ejecución del agente verificará ambos.
permitidoWorkloadConfiguration: restringe la invocación a tu puerta de enlace
El allowedWorkloadConfiguration campo correspondiente customJWTAuthorizer restringe qué cargas de trabajo de la cadena de identidad de la solicitud pueden invocar el tiempo de ejecución. Configura la carga de trabajo permitida en tu puerta de enlace para que el motor de ejecución acepte una solicitud solo cuando su cadena de identidad incluya esa puerta de enlace. De esta forma, un motor de ejecución de OAuth (JWT) hace que el tráfico llegue solo a través de la puerta de enlace que configuraste en el paso 3.
Las cargas de trabajo permitidas se proporcionan mediante cualquiera de los siguientes campos. Puedes especificar uno o ambos. Se acepta una solicitud si su cadena de identidad coincide con una entrada de cualquiera de los campos, por lo que no es necesario que proporciones ambos campos.
-
HostingEnvironments: una lista de entornos de alojamiento cuyas cargas de trabajo pueden invocar el destino. Cada entrada es un objeto con un.
arnEn el momento del lanzamiento, el único entorno de alojamiento compatible es AgentCore Gateway, por lo que cada unoarndebe ser un ARN de AgentCore Gateway. -
WorkLoadIdentities: una lista de nombres de identidades de cargas de trabajo que pueden invocar el destino. El nombre de identidad de una carga de trabajo no es un ARN. Es el segmento final del ARN de la identidad de carga de trabajo de la puerta de enlace, que puede encontrar en el
workloadIdentityDetailscampo de laGetGatewayrespuesta. Por ejemplo, siworkloadIdentityDetails.workloadIdentityArnesarn:aws:bedrock-agentcore:us-east-1:111122223333:workload-identity-directory/default/workload-identity/my-gateway-workload-identityasí, el nombre de la identidad de la carga de trabajo esmy-gateway-workload-identity.
La siguiente configuración del autorizador restringe la invocación a una AgentCore puerta de enlace específica mediante su ARN. La forma más sencilla de hostingEnvironments permitir una puerta de enlace es especificarla por sí sola:
{ "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" } ] } } } }
Como alternativa, puede identificar la puerta de enlace por su nombre de identidad de carga de trabajo o especificar ambos campos. Cuando ambos están presentes, se permite una solicitud si coincide con una entrada de cualquiera de los campos. El siguiente allowedWorkloadConfiguration fragmento permite dos puertas de enlace diferentes: una identificada por su ARN y otra por el nombre de identidad de la carga de trabajo:
"allowedWorkloadConfiguration": { "hostingEnvironments": [ { "arn": "arn:aws:bedrock-agentcore:us-east-1:111122223333:gateway/my-gateway-1-id" } ], "workloadIdentities": [ "my-gateway-2-workload-identity" ] }
nota
En el momento del lanzamiento, solo allowedWorkloadConfiguration se admite para los objetivos de AgentCore tiempo de ejecución y las cargas de trabajo permitidas son las pasarelas. AgentCore
Cree e implemente el tiempo de ejecución del agente
Con la configuración del autorizador lista, cree e implemente el tiempo de ejecución del agente. Los siguientes ejemplos muestran cómo hacerlo con la AgentCore CLI o el AWS SDK para Python (Boto3). Observe el ARN en tiempo de ejecución del agente que aparece en el resultado; lo necesitará para invocar al agente en el siguiente paso.
ejemplo
nota
El ejemplo de la AgentCore CLI configura la autorización de JWT, pero no la configura. allowedWorkloadConfiguration Si inicias el tiempo de ejecución con una puerta de enlace, usa la API del AgentCore plano de control para agregar ese campo.
Paso 5: Usa el token de portador para invocar a tu agente
Ahora que tu agente está desplegado con la autorización de JWT, puedes invocarlo con el token portador.
nota
Si en el paso 3 configuraste tu tiempo de ejecución con una puerta de enlace, agrega el tiempo de ejecución desplegado como destino de puerta de enlace antes de invocar (consulta los objetivos de tiempo de AgentCore ejecución) y, a continuación, invoca a través del punto final de la puerta de enlace que se muestra en los ejemplos siguientes, en lugar de hacerlo desde el punto final del tiempo de ejecución.
importante
Importante para los usuarios actuales: los agentes creados antes del 13 de octubre de 2025 seguirán utilizando la función de ejecución de agentes para los permisos de identidad y deberán adjuntar la política anterior a la función de ejecución del agente.
Agentes nuevos: para los agentes creados a partir del 13 de octubre de 2025, esta política no es obligatoria, ya que el Service-Linked rol gestiona automáticamente los permisos.
{ "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-*" ] }
Invoca al agente
Obtenga un token de portador para el usuario que creó 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')
Proceda a invocar al agente con el resto de las instrucciones siguientes.
Invoca al agente con OAuth.
ejemplo
Respuestas de error de OAuth
OAuth-configured los agentes siguen los estándares de autenticación RFC 6749 (OAuth 2.0).
401 No autorizado: falta la autenticación
Si no se proporciona ningún token de portador en el encabezado de autorización, la respuesta es:
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}"
La resource_metadata URL del WWW-Authenticate encabezado apunta a la API de metadatos de recursos protegidos (PRM). La API PRM permite a los clientes descubrir qué servidores de autorización protegen a este agente y sus URL de punto final de OAuth.
nota
Debe registrar previamente su cliente de OAuth en Cognito (mediante la AWS consola o la CLI) para obtener una antes de usar los puntos de enlace descubiertos. client_id Amazon Cognito no admite el registro dinámico de clientes (RFC 7591).
Paso 6: Configure su agente para que acceda a las herramientas mediante OAuth
En esta sección, aprenderás a conectar tu código de agente con los proveedores de AgentCore credenciales para acceder de forma segura a los recursos externos mediante la autenticación OAuth2.
En el siguiente ejemplo, se muestra cómo un agente que se ejecuta en Agent Runtime puede solicitar a los usuarios el consentimiento de OAuth, lo que les permite autenticarse con su cuenta de Google y autorizar al agente a acceder a su contenido de Google Drive.
Para obtener más información sobre la configuración de la identidad, consulta Cómo empezar a usar la identidad. AgentCore
Paso 6.1: Configurar los proveedores de credenciales
Para configurar un proveedor de credenciales de Google, debes:
-
Registra tu aplicación en Google para obtener el ID y el secreto del cliente
-
Crea un proveedor de credenciales de OAuth mediante la CLI. AWS
your-client-idSustitúyalo por su ID de cliente yyour-client-secretsecreto de cliente actuales de Google OAuth2: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
Obténgalo
callbackUrlde la CreateOauth2CredentialProvider respuesta y añádelo a la lista de URI de redireccionamiento de tu aplicación de Google. La URL de la llamada debería tener el siguiente aspecto: https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/ ********-****-************
Asegúrese de que su función de invocación tenga los permisos necesarios para acceder al proveedor de credenciales.
Paso 6.2: Permita que el agente lea el contenido de Google Drive
Crea una herramienta con las anotaciones principales del SDK del agente, como se muestra en el siguiente ejemplo, para iniciar automáticamente el proceso de OAuth en tres etapas. Cuando tu agente invoque esta herramienta, se les pedirá a los usuarios que abran la URL de autorización en su navegador y den su consentimiento para que el agente acceda a 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
¿Qué ocurre entre bastidores
Cuando se ejecuta este código, se produce el siguiente proceso:
-
Agent Runtime autoriza el token entrante de acuerdo con el autorizador configurado.
-
Agent Runtime intercambia este token por un token de acceso a la carga de trabajo a través de la
bedrock-agentcore:GetWorkloadAccessTokenForJWTAPI y lo envía al código del agente a través del encabezado de carga útil.WorkloadAccessToken -
Durante la invocación de la herramienta, tu agente usa este token de acceso a la carga de trabajo para llamar a la API de Token Vault
bedrock-agentcore:GetResourceOauth2Tokeny generar una URL de autenticación de 3LO. -
El agente envía esta URL a la aplicación cliente tal y como se especifica en el
on_auth_urlmétodo. -
La aplicación cliente presenta esta URL al usuario, quien otorga su consentimiento para que el agente acceda a su Google Drive.
-
AgentCore El servicio de identidad recibe y almacena en caché de forma segura el token de acceso de Google hasta que caduque, lo que permite que las solicitudes posteriores del usuario usen este token sin necesidad de que el usuario dé su consentimiento para cada solicitud.
nota
AgentCore Identity Service almacena el token de acceso de Google en la bóveda de AgentCore tokens utilizando la identidad de la carga de trabajo del agente y el ID de usuario (del token JWT entrante, como el token de AWS Cognito) como clave vinculante, lo que elimina las solicitudes de consentimiento repetidas hasta que caduque el token de Google.
Paso 7: (opcional) Propagar un token de JWT a Runtime AgentCore
Si lo desea, puede pasar un encabezado de autorización a un AgentCore Runtime para extraer las notificaciones. Esto se puede hacer mediante la configuración de lista de permitidos del encabezado de la solicitud. Para obtener más información, consulte RequestHeaderConfiguration.
Paso 7.1: Modifique el código de su agente para leer los encabezados
En este paso, realizas cambios en tu código de agente para poder decodificar y extraer las reclamaciones de un token de JWT mediante la biblioteca PyJWT.
Dependencias de Python
Agregue PyJWT a los agentes generados: pyproject.toml
cd app/OAuthAgent uv add PyJWT cd ../..
Actualiza tu código de agente
app/OAuthAgent/main.pyModifícalo como se muestra en el siguiente código. Aquí puedes omitir la validación de la firma del token porque AgentCore Runtime ya validó el token durante la autorización 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) .....
Paso 7.2: Despliegue el agente actualizado
El agentcore add agent comando del paso 4 ya configuró la lista de permitidos del encabezado de la Authorization solicitud. Implemente la actualización del código:
agentcore deploy
Paso 7.3: Invoca a tu agente
Invoca a tu agente mediante OAuth y verás las reclamaciones en los registros de inicio de sesión de tu agente. CloudWatch
Resolución de problemas
Cómo depurar problemas relacionados con los tokens
Si tienes problemas con la autenticación del token, puedes decodificarlo para inspeccionar su contenido:
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
Esto generará la carga útil del token, que tiene un aspecto similar al siguiente:
{ "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" }
Cuando resuelvas problemas con los tokens, comprueba lo siguiente:
-
La URL del emisor a la que apunta la URL de descubrimiento en el autorizador del agente debe coincidir con la afirmación del emisor en el token. Haga lo siguiente para confirmar que coinciden:
-
Seleccione la URL de descubrimiento que proporcionó en la configuración del autorizador al crear el agente, por ejemplo:
https://cognito-idp.us-east-1.amazonaws.com/us-east-1_nnnnnnnnn/.well-known/openid-configuration-
Compruebe la URL del emisor -.
"issuer": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_12345566"Debe coincidir con el valor nominal que aparece en el token.
-
-
-
client_idLa afirmación del token debe coincidir con una de las entradas de AllowedClients del autorizador, si se proporciona-
Anota el identificador de cliente que proporcionaste al crear el agente
-
Confirma que coincide con la afirmación client_id del token decodificado
-
-
audla afirmación del token debe coincidir con una de las entradas del autorizadorallowedAudience, si se proporciona-
Anota la lista de audiencias que proporcionaste cuando creaste el agente
-
Confirma que coincide con la
audafirmación del token decodificado
-
-
Los tokens solo son válidos durante varios minutos (la caducidad predeterminada de Amazon Cognito es de 60 minutos). Obtenga un token nuevo si es necesario.