Impossibile individuare le credenziali (boto3 / DynamoDB)

TL;DR: boto3/botocore ha percorso l'intera catena di provider di credenziali (var env, ~/.aws/credentials condiviso, profilo di configurazione, ruolo contenitore/istanza) e non ha trovato nulla. Nessuna credenziale significa che non può firmare la richiesta DynamoDB. Fornisci alla catena una fonte di credenziali che può trovare: "aws configure", env vars, un profilo o un ruolo IAM.

Cosa significa

botocore.exceptions.NoCredentialsError: Unable to locate credentials

Prima di qualsiasi chiamata DynamoDB, l'SDK deve risolvere una chiave di accesso + segreto per firmare la richiesta con SigV4. In questo passaggio viene generato questo errore: nessun provider di credenziali ha restituito nulla. Avviene prima che la richiesta venga inviata. Si tratta dell'assenza di identità, non di una negazione delle autorizzazioni (che sarebbe AccessDeniedException).

Perché succede

  • Nessuna credenziale configurataaws configure non è mai stato eseguito e non esiste alcun ~/.aws/credentials.
  • Variabili Env mancantiAWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY non sono impostati nell'ambiente del processo (comune nei processi cron, contenitori, CI).
  • Profilo errato o mancante: hai fatto riferimento a --profile foo (o AWS_PROFILE=foo) ma quel profilo non è presente nel file credenziali/config.
  • Nessun ruolo istanza/contenitore: su EC2/ECS/Lambda senza un ruolo IAM allegato, quindi il provider di metadati non restituisce nulla.
  • Home di un utente diverso: in esecuzione come account di servizio il cui ~/.aws non contiene il file che hai modificato.
  • Token di sessione scaduto/assente per una configurazione di credenziali temporanee.

Come risolverlo

  1. Configura un profilo per lo sviluppatore locale:
    aws configure     # writes ~/.aws/credentials + ~/.aws/config
  2. Oppure imposta env vars per il processo:
    export AWS_ACCESS_KEY_ID=...
    export AWS_SECRET_ACCESS_KEY=...
    export AWS_DEFAULT_REGION=us-east-1
  3. Su EC2/ECS/Lambda, allega un ruolo IAM: l'SDK lo preleva automaticamente dai metadati dell'istanza/contenitore; non infornare le chiavi.
  4. Verifica le risoluzioni dell'identità prima di eseguire il codice:
    aws sts get-caller-identity
  5. Punta sul profilo giusto: passa profile_name a boto3.Session(...) o imposta AWS_PROFILE.
  6. Contro DynamoDB Local, qualsiasi chiave segnaposto funziona: passa il fittizio aws_access_key_id/aws_secret_access_key in modo che la catena non sia vuota.

DynoTable + Local

DynoTable risolve le credenziali allo stesso modo della CLI: se si connette ma boto3 no, il processo sta leggendo una directory home diversa o manca AWS_PROFILE. Configura i profili in Impostazioni → Profili ed esegui Test connessione; cambia con ⌘P.

Per Locale, aggiungi un profilo con chiavi fittizie ed endpoint "http://localhost:8000". Consulta Connetti a AWS e Installa. Confermare con una query di prova nel Builder di query.

Fonti

FAQ

Come posso risolvere il problema "Impossibile individuare le credenziali" in boto3? Fornisci qualcosa da trovare alla catena del fornitore di credenziali: esegui aws configure per scrivere ~/.aws/credentials, imposta AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY nell'ambiente del processo o collega un ruolo IAM su EC2/ECS/Lambda. Quindi verifica con "aws sts get-caller-identity".

"Impossibile individuare le credenziali" è uguale a AccessDeniedException? No. NoCredentialsError viene generato localmente prima che la richiesta venga inviata, perché nessun provider di credenziali ha restituito nulla. AccessDeniedException proviene da AWS dopo l'autenticazione, quando un'identità valida non dispone dell'autorizzazione IAM per l'azione.

Riproducilo

Chiama DynamoDB senza credenziali risolvibili in nessun punto della catena: nessuna variabile di ambiente, nessun file di credenziali condiviso, nessun profilo, nessun ruolo di istanza:

import boto3
boto3.client('dynamodb', region_name='us-east-1').list_tables()

Produzione reale:

NoCredentialsError: Unable to locate credentials

Il messaggio è notoriamente conciso: non nomina nessuno dei luoghi in cui boto3 ha guardato. Questa è tutta la difficoltà di questo errore, e perché lavorare la catena in ordine (ambiente, quindi file condiviso, quindi profilo, quindi ruolo) è meglio di indovinare.

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale AWS collegata sopra.

Riprodotto il 26-07-2026 rispetto a boto3 1.43.56 / botocore 1.43.56 — l'output sopra è letterale.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.