Unable to locate credentials (boto3 / DynamoDB)
TL;DR — boto3/botocore ist seine komplette Credential-Provider-Kette durchgegangen — Umgebungsvariablen, gemeinsame ~/.aws/credentials, Config-Profil, Container-/Instanzrolle — und hat nichts gefunden. Ohne Anmeldedaten kann es den DynamoDB-Request nicht signieren. Gib der Kette eine Credential-Quelle, die sie findet: aws configure, Umgebungsvariablen, ein Profil oder eine IAM-Rolle.
Was es bedeutet
botocore.exceptions.NoCredentialsError: Unable to locate credentialsVor jedem DynamoDB-Aufruf muss das SDK einen Access Key + Secret auflösen, um den Request mit SigV4 zu signieren. Dieser Fehler wird bei diesem Schritt ausgelöst: kein Credential-Provider hat etwas zurückgegeben. Er passiert, bevor der Request gesendet wird — es ist keine Berechtigungsverweigerung (das wäre AccessDeniedException), es ist das Fehlen jeglicher Identität.
Warum es passiert
- Keine Anmeldedaten konfiguriert —
aws configurewurde nie ausgeführt und es existiert keine~/.aws/credentials. - Umgebungsvariablen fehlen —
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYsind nicht in der Umgebung des Prozesses gesetzt (häufig bei Cron-Jobs, Containern, CI). - Falsches oder fehlendes Profil — du hast
--profile foo(oderAWS_PROFILE=foo) referenziert, aber dieses Profil ist nicht in der Credentials-/Config-Datei. - Keine Instanz-/Container-Rolle — auf EC2/ECS/Lambda ohne angehängte IAM-Rolle, sodass der Metadaten-Provider nichts zurückgibt.
- Das Home eines anderen Users — als Service-Konto ausgeführt, dessen
~/.awsnicht die von dir bearbeitete Datei enthält. - Session-Token abgelaufen/nicht vorhanden bei einem Setup mit temporären Anmeldedaten.
So behebst du es
- Konfiguriere ein Profil für lokale Entwicklung:
aws configure # writes ~/.aws/credentials + ~/.aws/config - Oder setze Umgebungsvariablen für den Prozess:
export AWS_ACCESS_KEY_ID=... export AWS_SECRET_ACCESS_KEY=... export AWS_DEFAULT_REGION=us-east-1 - Auf EC2/ECS/Lambda hänge eine IAM-Rolle an — das SDK übernimmt sie automatisch aus den Instanz-/Container-Metadaten; backe keine Schlüssel ein.
- Verifiziere, dass die Identität auflöst, bevor du deinen Code ausführst:
aws sts get-caller-identity - Zeige auf das richtige Profil — übergib
profile_nameanboto3.Session(...)oder setzeAWS_PROFILE. - Gegen DynamoDB Local funktionieren beliebige Platzhalter-Schlüssel — übergib Dummy-
aws_access_key_id/aws_secret_access_key, damit die Kette nicht leer ist.
Ein schneller Gegencheck außerhalb deines Codes: DynoTable verbindet sich mit denselben AWS-Profilen — wenn es deine Tabellen auflistet, existieren die Credentials, und das Problem ist, welche Quelle dein Prozess liest.
DynoTable + Local
DynoTable resolves credentials the same way as the CLI — wenn it connects but boto3 does not, your process is reading a different home directory or missing AWS_PROFILE. Konfiguriere Profile unter Einstellungen → Profile and run Verbindung testen; switch with ⌘P.
Für Local, add a profile with dummy keys and endpoint http://localhost:8000. Siehe Mit AWS verbinden und Installation. Confirm with a test query in the Query Builder.
Quellen
- Credentials — Boto3 documentation (verifiziert 2026-07-13)
- Error handling — Boto3 documentation (verifiziert 2026-07-13)
FAQ
Wie behebe ich "Unable to locate credentials" in boto3?
Gib der Credential-Provider-Kette etwas zu finden: führe aws configure aus, um ~/.aws/credentials zu schreiben, setze AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY in der Umgebung des Prozesses oder hänge auf EC2/ECS/Lambda eine IAM-Rolle an. Verifiziere dann mit aws sts get-caller-identity.
Ist "Unable to locate credentials" dasselbe wie AccessDeniedException? Nein. NoCredentialsError wird lokal ausgelöst, bevor der Request gesendet wird, weil kein Credential-Provider etwas zurückgegeben hat. AccessDeniedException kommt von AWS nach der Authentifizierung, wenn einer gültigen Identität die IAM-Berechtigung für die Aktion fehlt.
So reproduzierst du es
Ruf DynamoDB auf, ohne dass irgendwo in der Kette Anmeldedaten auflösbar sind — keine Umgebungsvariablen, keine gemeinsame Credentials-Datei, kein Profil, keine Instanzrolle:
import boto3
boto3.client('dynamodb', region_name='us-east-1').list_tables()Echte Ausgabe:
NoCredentialsError: Unable to locate credentialsDie Meldung ist berüchtigt knapp: Sie nennt keinen einzigen der Orte, an denen boto3 gesucht hat. Genau das macht diesen Fehler schwierig — und deshalb schlägt es das Raten, die Kette der Reihe nach abzuarbeiten: Umgebung, dann gemeinsame Datei, dann Profil, dann Rolle.
Verwandte Fehler
- The security token included in the request is invalid — Anmeldedaten wurden gefunden, aber AWS hat sie abgelehnt.
- AccessDeniedException — gültige Identität, aber keine IAM-Berechtigung für die Aktion.
- Missing region in config
- Learn: DynamoDB Local betreiben — Dummy-Anmeldedaten gegen einen lokalen Endpoint.
Referenzen
- Credentials — Boto3 documentation
- Error handling — Boto3 documentation
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.
Am 2026-07-26 gegen boto3 1.43.56 / botocore 1.43.56 reproduziert — die Ausgabe oben ist wortgetreu.