La seguridad token incluida en la solicitud no es válida
TL;DR: Tus credenciales AWS son incorrectas, están caducadas o el SDK está leyendo un conjunto diferente de lo que crees. Actualice/verifique la clave de acceso + secreto (y la sesión token si usa credenciales temporales) y confirme qué perfil/fuente el SDK está usando realmente.
Qué significa
UnrecognizedClientException: The security token included in the request is invalid.AWS rechazó tus credenciales en la autenticación — antes de comprobar los permisos. Esto es distinto de AccessDeniedException, que significa que las credenciales son válidas pero carecen de permiso. Aquí las propias credenciales no se aceptan. El nombre de la excepción varía según la herramienta: la AWS CLI muestra el mismo mensaje bajo InvalidClientTokenId, y la referencia de errores de DynamoDB redacta su entrada de UnrecognizedClientException como "The Access Key ID or security token is invalid." — todos significan que la autenticación falló.
Por qué ocurre
- Credenciales temporales caducadas — una sesión de STS/SSO o un token de rol asumido agotó su tiempo, o tienes una clave de acceso sin el
AWS_SESSION_TOKENrequerido. - Claves incorrectas o parciales — una errata, una clave de acceso rotada/eliminada, o
AWS_ACCESS_KEY_IDestablecida sin unaAWS_SECRET_ACCESS_KEYque coincida. - Un
AWS_SESSION_TOKENobsoleto que quedó en el entorno de una sesión anterior. - Apuntar credenciales reales a DynamoDB Local (o viceversa) — Local acepta cualquier clave ficticia pero un endpoint real no aceptará marcadores de posición.
- Desfase de reloj en la máquina lo bastante grande como para invalidar la firma de la petición.
Cómo solucionarlo
- Verifica que las credenciales funcionan:
aws sts get-caller-identity. Si eso también falla, es problema de las credenciales, no de DynamoDB. - Renueva las credenciales temporales — vuelve a ejecutar
aws sso login/ vuelve a asumir el rol, y asegúrate de queAWS_SESSION_TOKENesté establecido para las claves temporales. - Limpia las variables de entorno obsoletas — un
AWS_SESSION_TOKEN/AWS_ACCESS_KEY_IDantiguo en tu shell anula tu perfil. Elimínalas o establece el perfil correcto (aws configure listmuestra qué fuente está ganando). - Para DynamoDB Local, usa credenciales de marcador de posición y apunta al endpoint local:
const client = new DynamoDBClient({ region: 'local', endpoint: 'http://localhost:8000', credentials: {accessKeyId: 'local', secretAccessKey: 'local'} }); - Comprueba que el reloj de la máquina sea preciso (sincronizado por NTP) si todo lo demás parece correcto.
Desde DynoTable
DynoTable resuelve tu perfil de ~/.aws de nuevo en cada conexión,
así que un nuevo inicio de sesión, una rotación de claves o una variable de entorno
limpiada se recogen sin reiniciar la app. Pulsa ⌘P para ver qué perfil
está activo y si su punto de credenciales está verde — un punto rojo significa
Sign in (SSO) o Reconnect antes de que ninguna llamada a tabla funcione.
Para DynamoDB Local, añade un perfil con endpoint http://localhost:8000 y claves
de marcador de posición alfanuméricas (ver
Running DynamoDB Local); usar claves reales de AWS contra
Local dispara este mismo error.
FAQ
¿Qué significa "The security token included in the request is invalid"? AWS rechazó tus credenciales en la autenticación, antes de comprobar los permisos. Las claves son incorrectas, están rotadas o parciales, un token de sesión temporal está caducado u obsoleto, o el SDK está leyendo una fuente de credenciales distinta de la que crees.
¿Cómo depuro un token de seguridad inválido?
Ejecuta aws sts get-caller-identity — si eso también falla, es problema de las credenciales, no de DynamoDB. Renueva las credenciales temporales (aws sso login o vuelve a asumir el rol), asegúrate de que AWS_SESSION_TOKEN esté establecido para las claves temporales, y limpia las variables de entorno obsoletas que anulen tu perfil.
Reproducirlo
Este no necesita credenciales válidas ni un motor local — la autenticación falla antes que la autorización, así que es el servicio DynamoDB real el que responde a una clave deliberadamente falsa:
import boto3
boto3.client(
'dynamodb',
region_name='us-east-1',
aws_access_key_id='AKIAIOSFODNN7EXAMPLE',
aws_secret_access_key='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
).list_tables()Salida real:
UnrecognizedClientException: The security token included in the request is invalid. [HTTP 400]Una clave estructuralmente malformada (not-a-key) devuelve el mismo mensaje, y esa es la trampa práctica: el error te dice que la credencial fue rechazada, nunca por qué. Una errata, una clave de acceso eliminada, una clave de la cuenta equivocada y una clave que nunca existió acaban todas aquí de forma idéntica. Compáralo con token de seguridad caducado, que sí se distingue, y fíjate en el emparejamiento: el código que viaja por el cable es UnrecognizedClientException mientras que el mensaje habla de un "security token", así que buscar el mensaje y hacer grep de la clase en tu manejador necesitan cadenas distintas.
Errores relacionados
- AccessDeniedException — credenciales válidas, permiso ausente.
- Falta la región en la configuración
- Aprende: Running DynamoDB Local — credenciales de marcador de posición contra un endpoint local.
Fuentes
- Troubleshooting errors for the AWS CLI — AWS CLI User Guide (verificado 2026-07-13)
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide (verificado 2026-07-13)
- DynamoDB local usage notes — Amazon DynamoDB Developer Guide (verificado 2026-07-13)
Reproducido el 2026-07-26 contra el servicio DynamoDB en vivo en us-east-1 mediante boto3 1.43.56 — la salida de arriba es literal.