Amazon Bedrock AgentCore Identity ahora admite la autenticación de cliente JWT de clave privada para agentes. Con la autenticación de cliente JWT de clave privada, sus agentes pueden autenticarse en el punto final de token de un proveedor de identidad descendente mediante una aserción de cliente de token web JSON (JWT) firmada en lugar de un secreto de cliente OAuth 2.0 compartido. Puede registrar una clave pública con su proveedor de identidad, mientras que la clave privada correspondiente permanece en un AWS Key Management Service (AWS KMS). Para autenticarse, AgentCore Identity utiliza AWS KMS para firmar la aserción y envía la aserción firmada al proveedor de identidad, que la verifica utilizando la clave pública que registró.
Esta publicación explica cómo funciona la autenticación de cliente JWT de clave privada en AgentCore Identity y revisa los flujos de concesión admitidos. Luego, explicaremos cómo crear una clave de firma de AWS KMS, registrar su clave pública con su proveedor de identidad, configurar un proveedor de credenciales en la consola de administración de AWS y revisar ejemplos de eventos de AWS CloudTrail que registran el acceso de su agente.
¿Cómo funciona?
El siguiente ejemplo ilustra el flujo de solicitudes. Considere un agente de atención al cliente que necesita leer el historial de pedidos de un cliente desde una API de pedidos internos protegida por su proveedor de identidad.
Figura 1: Ejemplo de flujo de solicitud para una solicitud de token de máquina a máquina, desde la llamada del agente hasta la API descendente
El siguiente diagrama ilustra el flujo de solicitudes:
El agente llama a GetResourceOauth2Token en AgentCore Identity para solicitar un token para la API de pedidos. AgentCore Identity lee el ID del cliente, el ARN de la clave KMS y el algoritmo de firma de su proveedor de credenciales. Crea una aserción de cliente JWT de corta duración con las notificaciones de carga útil requeridas (más cualquier encabezado o notificación de carga útil adicional que haya configurado, como un identificador de clave o una huella digital de certificado) y llama a kms:Sign contra su clave de firma asimétrica de KMS usando el algoritmo de firma que configuró (RS256, PS256 o ES256). AWS KMS firma la afirmación y devuelve la firma a AgentCore Identity. La clave privada nunca sale de KMS. AgentCore Identity publica la aserción firmada en el punto final del token de su proveedor de identidad con Grant_type=client_credentials y client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer. El proveedor de identidad verifica la firma con la clave pública que registró y devuelve un token de acceso a AgentCore Identity. AgentCore Identity devuelve el token de acceso a su agente. El agente llama a la API de pedidos con el token de acceso. La API de pedidos devuelve el historial de pedidos del cliente.
Resumen de los flujos de subvenciones respaldados
La autenticación JWT de clave privada funciona para los tres flujos de concesión:
Máquina a máquina (M2M): el agente actúa como sí mismo. No hay ningún usuario humano en la imagen. El agente necesita acceder a un recurso, por ejemplo, un trabajo en segundo plano que sincroniza datos o un servicio que cualquier agente de atención al cliente puede leer independientemente de quién lo activó. El token representa la identidad de la aplicación/agente. Utiliza la concesión client_credentials. El sujeto del token es el propio cliente. En nombre de (OBO): el agente actúa para un usuario específico, utilizando el token existente de ese usuario. Un usuario ya inició sesión en algún lugar y hay un token de usuario entrante. El agente necesita llamar a una API posterior como ese usuario, para que sus permisos e identidad se mantengan. AgentCore Identity intercambia el token de usuario entrante por un token descendente que representa al usuario, sin dejar de autenticarse con la aserción del cliente. Puede utilizar el intercambio de tokens RFC 8693 o la concesión de autorización JWT RFC 7523, según el proveedor de identidad. Acceso delegado por el usuario: el agente actúa en nombre de un usuario, pero el usuario otorga su consentimiento de forma interactiva primero. No existe ningún token preexistente para intercambiar. En cambio, el usuario pasa por un inicio de sesión/consentimiento interactivo (el código de autorización/flujo OAuth de tres etapas), aprobando lo que el agente puede hacer. Después del consentimiento, el agente obtiene un token que representa al usuario. Utiliza la concesión del código de autorización.
Requisitos previos
Esta publicación asume que tienes
Una cuenta de AWS con acceso a la Consola de administración de AWS a KMS, AgentCore y AWS CloudTrail. Un inquilino en su proveedor de identidad, donde puede registrar una clave pública para una aplicación. URL de descubrimiento e ID de cliente que los clientes utilizan para descubrir e integrar con su proveedor de identidad. Confirme el algoritmo de firma que requiere su proveedor de identidad para la autenticación del cliente JWT de clave privada. Confirme que AWS KMS y AgentCore Identity admiten el mismo algoritmo y especificación de clave. Permisos para cada parte del flujo: cree y configure la clave KMS: kms:CreateKey y kms:PutKeyPolicy. Exporte la clave pública para registrarse con su proveedor de identidad: kms:GetPublicKey. (Si su proveedor de identidad genera el par de claves y le proporciona el material de clave privada, también necesita kms:GetParametersForImport y kms:ImportKeyMaterial para importarlo a KMS). Cree el proveedor de credenciales: bedrock-agentcore-control:CreateOauth2CredentialProvider.
Empezando
Las siguientes secciones muestran cómo configurar la clave privada JWT como método de autenticación del cliente mediante la Consola de administración de AWS.
Paso 1: cree la clave de firma de KMS y registre la clave pública
Comience creando una clave KMS asimétrica que AgentCore Identity utilizará para firmar la aserción del cliente JWT. En este ejemplo, creamos la clave en KMS y exportamos la clave pública correspondiente al proveedor de identidad. Sin embargo, si su proveedor de identidad genera el par de claves y le proporciona el material de clave privada, puede importarlo a KMS.
Abra la consola de AWS KMS en la misma región de AWS que su proveedor de credenciales. Elija Claves administradas por el cliente y luego elija Crear clave. Para Tipo de clave, elija Asimétrica. Para Uso de claves, elija Firmar y verificar. Para Especificaciones clave, elija una especificación compatible con su algoritmo de firma. Este ejemplo utiliza ECC_NIST_P256 con el algoritmo de firma ES256. Elija Siguiente, ingrese un Alias y continúe con los pasos del administrador de claves y del permiso de uso de claves. En el paso Editar política de clave, agregue la siguiente declaración a la política de clave para otorgar permiso a AgentCore Identity para usar la clave, reemplazando 111122223333 con su ID de cuenta de AWS y con la región de AgentCore en uso. La condición kms:ViaService verifica que la clave solo se pueda utilizar cuando la solicitud se origina a través de AgentCore Identity:
Elija Finalizar. En la página de detalles de la clave, observe el ARN de la clave. Lo proporciona cuando crea el proveedor de credenciales. A continuación, exporte la clave pública y regístrela con su proveedor de identidad: en la página de detalles de la clave, elija la pestaña Clave pública y descargue la clave pública. KMS proporciona una clave pública codificada en DER. Convierta la clave pública al formato que requiere su proveedor (por ejemplo, un certificado X.509 para Microsoft Entra ID o una clave web JSON para Okta) y regístrela en su aplicación.
Paso 2: agregar un cliente OAuth
Abra la consola de Amazon Bedrock AgentCore. En el panel de navegación izquierdo, en Generar, elija Identidad. En la sección Autenticación saliente, elija Agregar autenticación saliente y luego elija Agregar cliente OAuth.
Figura 2: Agregar un cliente OAuth desde la consola AgentCore Identity
Paso 3: elija la clave privada JWT como método de autenticación del cliente
En la página Agregar cliente OAuth, en la sección Configuraciones del proveedor:
Para el tipo de configuración, elija URL de descubrimiento para que AgentCore Identity pueda recuperar la configuración de su proveedor automáticamente. (Elija Configuración manual si su proveedor no publica un punto final de descubrimiento). Para Método de autenticación del cliente, elija Clave privada JWT.
Figura 3: Selección de la clave privada JWT como método de autenticación del cliente
Paso 4: proporcione la URL de descubrimiento, el ID del cliente, la clave KMS y el algoritmo de firma
Para URL de descubrimiento, ingrese la URL donde su proveedor publica su configuración de OpenID Connect (que termina en .well-known/openid-configuration). Para ID de cliente, ingrese el identificador de cliente registrado en su proveedor de identidad. Para CMK, elija el ARN de su clave de firma KMS asimétrica. La clave debe haberse creado con SIGN_VERIFY como uso y estar en la misma región para que aparezca en la lista.
Nota: También puede utilizar una clave de otra cuenta en la misma región ingresando el ARN de esa clave. El acceso entre cuentas requiere permisos adicionales en ambas cuentas. Consulte Permitir que los usuarios de otras cuentas utilicen una clave KMS.
Para Algoritmo de firma, elija el algoritmo que su proveedor de identidad requiere para la clave privada JWT. Debe ser compatible con la especificación de su clave KMS:
Figura 4: Proporcionar la URL de descubrimiento, el ID del cliente, la clave KMS asimétrica y el algoritmo de firma
Paso 5: (Opcional) Agregue reclamos y luego cree el cliente
Si su proveedor de identidad requiere reclamos adicionales en la afirmación del cliente JWT, agréguelos aquí:
En Notificaciones de encabezado: opcional, elija Agregar notificación de encabezado para agregar notificaciones de encabezado específicas del proveedor, como un identificador de clave. Las claves reservadas alg y typ no se pueden configurar. En Reclamaciones de carga útil: opcional, elija Agregar reclamación de carga útil para agregar reclamaciones de carga útil específicas del proveedor. Las claves reservadas iss, sub, jti, exp, iat y nbf no se pueden configurar. Elija Agregar cliente OAuth. Verifique que el proveedor de credenciales se creó verificando que aparezca en la lista de autenticación saliente.
Figura 5: Agregar reclamos de encabezado y carga útil opcionales antes de crear el cliente
Ejemplos de registros de CloudTrail para el acceso del agente
Cuando un agente utiliza el proveedor de credenciales para obtener un token, las operaciones se registran en AWS CloudTrail para que pueda auditar cada acceso. Verá nombres de eventos como:
GetWorkloadAccessToken (fuente del evento bedrock-agentcore.amazonaws.com): el agente obtiene su token de identidad de carga de trabajo. Los requestParameters registran el nombre de la carga de trabajo, el bloque de recursos identifica la identidad de la carga de trabajo y el token devuelto se redacta:
GetResourceOauth2Token (fuente del evento bedrock-agentcore.amazonaws.com): el agente solicita un token de acceso para el recurso descendente. Los requestParameters muestran qué proveedor de credenciales, alcances y flujo de concesión se utilizaron, y el token entrante está redactado.
Firmar (fuente del evento kms.amazonaws.com): AgentCore Identity firma la aserción del cliente JWT con su CMK. Este es el evento que muestra que la clave privada JWT funciona: userIdentity.invokedBy, sourceIPAddress y userAgent son bedrock-agentcore.amazonaws.com, lo que confirma que AgentCore Identity llamó a kms:Sign en su nombre. Tenga en cuenta que el evento Firmar registra el nombre del algoritmo de firma KMS, no el nombre del algoritmo JWT que configuró.
Limpiar
Para evitar incurrir en cargos continuos y eliminar recursos que ya no necesita, limpie el proveedor de credenciales y la clave de firma KMS que creó en este tutorial.
Eliminar el proveedor de credenciales OAuth
Abra la consola de Amazon Bedrock AgentCore. En el panel de navegación izquierdo, en Generar, elija Identidad. En la sección Autenticación saliente, busque el proveedor de credenciales que creó. Seleccione el proveedor, elija Eliminar y confirme la eliminación.
Programar la eliminación de la clave KMS
Eliminar una clave KMS es irreversible y permanente. Una vez que se elimina la clave, ya no se pueden producir datos o firmas que dependan de ella, por lo que KMS requiere que programe la eliminación con un período de espera en lugar de eliminarla inmediatamente. Antes de programar la eliminación, confirme que ningún proveedor de credenciales o registro de proveedor de identidad ya haga referencia a la clave. Si no está seguro de si la clave todavía está en uso, considere deshabilitarla, lo que impide que se use y la mantiene recuperable.
Abra la consola de AWS KMS en la región donde creó la clave. Elija Claves administradas por el cliente y luego seleccione la clave de firma asimétrica que creó. Elija Acciones clave y luego elija Programar eliminación de claves. Introduce un periodo de espera de entre 7 y 30 días. Durante esta ventana, la clave está deshabilitada pero aún se puede recuperar cancelando la eliminación programada. Confirme que desea programar la eliminación de la clave.
Una vez transcurrido el período de espera, KMS elimina permanentemente la clave. Recuerde también eliminar o rotar la clave pública correspondiente que registró con su proveedor de identidad, para que ya no confíe en la clave retirada.
Conclusión
Al utilizar la autenticación de cliente JWT de clave privada en AgentCore Identity, puede brindarles a sus agentes una forma auditable y sin secretos de autenticarse ante proveedores de identidad. La clave de firma permanece en AWS KMS, cada operación de firma se registra en AWS CloudTrail y el mismo proveedor de credenciales se extiende a través de flujos M2M, en nombre de y delegados por el usuario. Para obtener ejemplos de un extremo a otro, incluido el registro de proveedores de identidad de Entra y Okta y flujos M2M y OBO, consulte los ejemplos de Amazon Bedrock AgentCore en GitHub.