Unable to locate credentials (boto3 / DynamoDB)

TL;DR — boto3/botocore は認証情報プロバイダーチェーン全体 — 環境変数、共有の ~/.aws/credentials、config のプロファイル、コンテナ/インスタンスのロール — を辿りましたが、何も見つかりませんでした。認証情報がなければ DynamoDB のリクエストに署名できません。チェーンが見つけられる認証情報のソースを与えてください: aws configure、環境変数、プロファイル、または IAM ロールです。

意味

botocore.exceptions.NoCredentialsError: Unable to locate credentials

DynamoDB を呼び出す前に、SDK は SigV4 で署名するためのアクセスキーとシークレットを解決しなければなりません。このエラーはその段階で発生します — どの認証情報プロバイダーも何も返さなかった のです。リクエストが送信される前に起こります。これは権限の拒否(それは AccessDeniedException です)ではなく、アイデンティティがまったく存在しないということです。

発生する理由

  • 認証情報が未設定aws configure を一度も実行しておらず、~/.aws/credentials も存在しない。
  • 環境変数の欠落 — プロセスの環境に AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY が設定されていない(cron ジョブ、コンテナ、CI でよくあります)。
  • 誤ったプロファイル、またはプロファイルの欠落--profile foo(または AWS_PROFILE=foo)を指定したのに、そのプロファイルが credentials/config ファイルにない。
  • インスタンス/コンテナのロールがない — IAM ロールをアタッチしていない EC2/ECS/Lambda では、メタデータのプロバイダーが何も返しません。
  • 別ユーザーのホーム — サービスアカウントとして実行しており、その ~/.aws に編集したファイルがない。
  • 一時認証情報の構成で セッショントークンが期限切れ、または存在しない。

修正方法

  1. ローカル開発向けに プロファイルを設定します:
    aws configure     # writes ~/.aws/credentials + ~/.aws/config
  2. またはプロセスに環境変数を設定します:
    export AWS_ACCESS_KEY_ID=...
    export AWS_SECRET_ACCESS_KEY=...
    export AWS_DEFAULT_REGION=us-east-1
  3. EC2/ECS/Lambda では IAM ロールをアタッチします — SDK がインスタンス/コンテナのメタデータから自動で拾います。キーを埋め込まないでください。
  4. コードを実行する前に アイデンティティが解決することを確認します:
    aws sts get-caller-identity
  5. 正しいプロファイルを指しますboto3.Session(...)profile_name を渡すか、AWS_PROFILE を設定します。
  6. DynamoDB Local に対しては どんなプレースホルダーのキーでも動きます — チェーンが空にならないよう、ダミーの aws_access_key_id/aws_secret_access_key を渡してください。

コードの外で手早く確認する方法もあります: DynoTable は同じ AWS のプロファイルで接続します — DynoTable がテーブルを一覧できるなら認証情報は存在しており、問題はプロセスがどのソースを読んでいるかです。

DynoTable + Local

DynoTable は CLI と同じやり方で認証情報を解決します — DynoTable は接続できるのに boto3 が接続できないなら、プロセスが別のホームディレクトリを読んでいるか、AWS_PROFILE が抜けています。Settings → Profiles でプロファイルを設定して Test Connection を実行し、切り替えは ⌘P で行ってください。

Local の場合は、ダミーのキーとエンドポイント http://localhost:8000 でプロファイルを追加します。AWS に接続するインストールを参照してください。確認はクエリビルダーのテストクエリで行いましょう。

出典

よくある質問

boto3 の「Unable to locate credentials」はどう直せばよいですか? 認証情報プロバイダーチェーンが見つけられるものを与えてください。aws configure を実行して ~/.aws/credentials を書き出す、プロセスの環境に AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY を設定する、あるいは EC2/ECS/Lambda で IAM ロールをアタッチする、のいずれかです。その後 aws sts get-caller-identity で確認しましょう。

「Unable to locate credentials」は AccessDeniedException と同じですか? いいえ。NoCredentialsError は、どの認証情報プロバイダーも何も返さなかったために、リクエストが送信される前にローカルで発生します。AccessDeniedException は認証の後に AWS から返るもので、有効なアイデンティティにそのアクションの IAM 権限がない場合です。

再現方法

チェーンのどこからも認証情報を解決できない状態で DynamoDB を呼び出します — 環境変数なし、共有の認証情報ファイルなし、プロファイルなし、インスタンスロールなしです。

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

実際の出力:

NoCredentialsError: Unable to locate credentials

このメッセージはそっけないことで有名です。boto3 が探した場所を1つも挙げてくれません。それがこのエラーの難しさのすべてであり、だからこそ推測するより、チェーンを順番に — 環境変数、次に共有ファイル、次にプロファイル、次にロール — 潰していく方が勝ります。

関連するエラー

参考資料

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

2026-07-26 に boto3 1.43.56 / botocore 1.43.56 で再現しました — 上記の出力はそのままの逐語です。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。