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 credentials

Vor 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 konfiguriertaws configure wurde nie ausgeführt und es existiert keine ~/.aws/credentials.
  • Umgebungsvariablen fehlenAWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY sind nicht in der Umgebung des Prozesses gesetzt (häufig bei Cron-Jobs, Containern, CI).
  • Falsches oder fehlendes Profil — du hast --profile foo (oder AWS_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 ~/.aws nicht die von dir bearbeitete Datei enthält.
  • Session-Token abgelaufen/nicht vorhanden bei einem Setup mit temporären Anmeldedaten.

So behebst du es

  1. Konfiguriere ein Profil für lokale Entwicklung:
    aws configure     # writes ~/.aws/credentials + ~/.aws/config
  2. Oder setze Umgebungsvariablen für den Prozess:
    export AWS_ACCESS_KEY_ID=...
    export AWS_SECRET_ACCESS_KEY=...
    export AWS_DEFAULT_REGION=us-east-1
  3. 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.
  4. Verifiziere, dass die Identität auflöst, bevor du deinen Code ausführst:
    aws sts get-caller-identity
  5. Zeige auf das richtige Profil — übergib profile_name an boto3.Session(...) oder setze AWS_PROFILE.
  6. 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

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 credentials

Die 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

Referenzen

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.

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.