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 credentials

Antes 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 configure y no existe ningún ~/.aws/credentials.
  • Faltan las variables de entornoAWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY no están establecidas en el entorno del proceso (habitual en tareas cron, contenedores, CI).
  • Perfil equivocado o ausente — referenciaste --profile foo (o AWS_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 ~/.aws no contiene el archivo que editaste.
  • Token de sesión caducado/ausente en una configuración de credenciales temporales.

Cómo solucionarlo

  1. Configura un perfil para el desarrollo local:
    aws configure     # writes ~/.aws/credentials + ~/.aws/config
  2. 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
  3. En EC2/ECS/Lambda, adjunta un rol de IAM — el SDK lo recoge automáticamente de los metadatos de instancia/contenedor; no incrustes claves.
  4. Verifica que la identidad se resuelve antes de ejecutar tu código:
    aws sts get-caller-identity
  5. Apunta al perfil correcto — pasa profile_name a boto3.Session(...) o establece AWS_PROFILE.
  6. Contra DynamoDB Local, cualquier clave de marcador de posición funciona — pasa aws_access_key_id/aws_secret_access_key ficticios 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

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 credentials

El 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

Referencias

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.

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.