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 credentialsPrima 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 configurata —
aws configurenon è mai stato eseguito e non esiste alcun~/.aws/credentials. - Variabili Env mancanti —
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYnon sono impostati nell'ambiente del processo (comune nei processi cron, contenitori, CI). - Profilo errato o mancante: hai fatto riferimento a
--profile foo(oAWS_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
~/.awsnon contiene il file che hai modificato. - Token di sessione scaduto/assente per una configurazione di credenziali temporanee.
Come risolverlo
- Configura un profilo per lo sviluppatore locale:
aws configure # writes ~/.aws/credentials + ~/.aws/config - Oppure imposta env vars per il processo:
export AWS_ACCESS_KEY_ID=... export AWS_SECRET_ACCESS_KEY=... export AWS_DEFAULT_REGION=us-east-1 - Su EC2/ECS/Lambda, allega un ruolo IAM: l'SDK lo preleva automaticamente dai metadati dell'istanza/contenitore; non infornare le chiavi.
- Verifica le risoluzioni dell'identità prima di eseguire il codice:
aws sts get-caller-identity - Punta sul profilo giusto: passa
profile_nameaboto3.Session(...)o impostaAWS_PROFILE. - Contro DynamoDB Local, qualsiasi chiave segnaposto funziona: passa il fittizio
aws_access_key_id/aws_secret_access_keyin 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
- Credenziali: documentazione Boto3 (verificato il 13-07-2026)
- Gestione degli errori: documentazione Boto3 (verificato il 13-07-2026)
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 credentialsIl 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
- Il token di sicurezza incluso nella richiesta non è valido — le credenziali sono state trovate ma AWS le hanno rifiutate.
- AccessDeniedException — identità valida, ma nessuna autorizzazione IAM per l'azione.
- Regione mancante nella configurazione
- Impara: Running DynamoDB Local — credenziali fittizie su un endpoint locale.
Riferimenti
- Credenziali: documentazione Boto3
- Gestione degli errori: documentazione di Boto3
- Gestione degli errori con DynamoDB - Guida per sviluppatori di Amazon DynamoDB
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.