No se pueden localizar las credenciales (boto3 / DynamoDB)
TL;DR: boto3/botocore recorrió toda su cadena de proveedores de credenciales (env vars, ~/.aws/credentials compartido, perfil de configuración, rol de contenedor/instancia) y no encontró nada. Sin credenciales significa que no puede firmar la solicitud DynamoDB. Proporcione a la cadena una fuente de credenciales que pueda encontrar: aws configure, variables de entorno, un perfil o un rol IAM.
Qué significa
botocore.exceptions.NoCredentialsError: Unable to locate credentialsAntes de cualquier llamada a DynamoDB, el SDK debe resolver una clave de acceso + un secreto para firmar la petición con SigV4. Este error se lanza en ese paso: ningún proveedor de credenciales devolvió nada. Ocurre antes de que se envíe la petición. Es la ausencia de cualquier identidad, no una denegación de permisos (eso sería AccessDeniedException).
Por qué ocurre
- Sin credenciales configuradas — nunca se ejecutó
aws configurey no existe ningún~/.aws/credentials. - Faltan las variables de entorno —
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYno están establecidas en el entorno del proceso (habitual en tareas cron, contenedores, CI). - Perfil equivocado o ausente — referenciaste
--profile foo(oAWS_PROFILE=foo) pero ese perfil no está en el archivo de credenciales/configuración. - Sin rol de instancia/contenedor — en EC2/ECS/Lambda sin un rol de IAM adjunto, así que el proveedor de metadatos no devuelve nada.
- Home de un usuario diferente — ejecutar como una cuenta de servicio cuyo
~/.awsno contiene el archivo que editaste. - Token de sesión caducado/ausente en una configuración de credenciales temporales.
Cómo solucionarlo
- Configura un perfil para el desarrollo local:
aws configure # writes ~/.aws/credentials + ~/.aws/config - O establece variables de entorno para el proceso:
export AWS_ACCESS_KEY_ID=... export AWS_SECRET_ACCESS_KEY=... export AWS_DEFAULT_REGION=us-east-1 - En EC2/ECS/Lambda, adjunta un rol de IAM — el SDK lo recoge automáticamente de los metadatos de instancia/contenedor; no incrustes claves.
- Verifica que la identidad se resuelve antes de ejecutar tu código:
aws sts get-caller-identity - Apunta al perfil correcto — pasa
profile_nameaboto3.Session(...)o estableceAWS_PROFILE. - Contra DynamoDB Local, cualquier clave de marcador de posición funciona — pasa
aws_access_key_id/aws_secret_access_keyficticios para que la cadena no esté vacía.
DynoTable + Local
DynoTable resuelve las credenciales igual que la CLI — si él conecta y boto3 no, tu proceso está leyendo otro directorio home o le falta AWS_PROFILE. Configura los perfiles en Ajustes → Perfiles y ejecuta Test Connection; cambia entre ellos con ⌘P.
Para Local, añade un perfil con claves ficticias y el endpoint http://localhost:8000. Consulta Conectar con AWS e Instalación. Confírmalo con una consulta de prueba en el Query Builder.
Fuentes
- Credentials — Boto3 documentation (verificado el 2026-07-13)
- Error handling — Boto3 documentation (verificado el 2026-07-13)
FAQ
¿Cómo soluciono "Unable to locate credentials" en boto3?
Dale a la cadena de proveedores de credenciales algo que encontrar: ejecuta aws configure para escribir ~/.aws/credentials, establece AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY en el entorno del proceso, o adjunta un rol de IAM en EC2/ECS/Lambda. Luego verifica con aws sts get-caller-identity.
¿Es "Unable to locate credentials" lo mismo que AccessDeniedException? No. NoCredentialsError se lanza localmente antes de enviar la petición, porque ningún proveedor de credenciales devolvió nada. AccessDeniedException viene de AWS tras la autenticación, cuando una identidad válida carece de permiso de IAM para la acción.
Reproducirlo
Llama a DynamoDB sin credenciales resolubles en ningún punto de la cadena — sin variables de entorno, sin archivo de credenciales compartido, sin perfil, sin rol de instancia:
import boto3
boto3.client('dynamodb', region_name='us-east-1').list_tables()Salida real:
NoCredentialsError: Unable to locate credentialsEl mensaje es célebremente escueto: no nombra ninguno de los sitios donde boto3 buscó. Esa es toda la dificultad de este error, y la razón por la que recorrer la cadena en orden — entorno, luego archivo compartido, luego perfil, luego rol — es mejor que adivinar.
Errores relacionados
- The security token included in the request is invalid — se encontraron credenciales pero AWS las rechazó.
- AccessDeniedException — identidad válida, pero sin permiso de IAM para la acción.
- Falta la región en la configuración
- Aprende: Running DynamoDB Local — credenciales ficticias contra un endpoint local.
Referencias
- Credentials — Boto3 documentation
- Error handling — Boto3 documentation
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.
Reproducido el 2026-07-26 contra boto3 1.43.56 / botocore 1.43.56 — la salida de arriba es literal.