Could not load credentials from any providers
TL;DR — AWS SDK for JavaScript v3 は、デフォルトの認証情報チェーン全体 — 環境変数、SSO、共有 config/credentials プロファイル、web identity、コンテナ/インスタンスメタデータエンドポイント — をたどりましたが、いずれも認証情報を生み出しませんでした。チェーンに見つけられるソース(環境変数、aws configure、アタッチされたロール)を与えるか、credentials をクライアントに明示的に渡してください。DynamoDB Local ではいずれにせよダミー値であるべきです。
意味
CredentialsProviderError: Could not load credentials from any providersすべての DynamoDB リクエストは SigV4 署名される必要があるため、最初の呼び出しの前に SDK はプロバイダーチェーンを通じて認証情報を解決します。このエラーはチェーンの「何も見つからなかった」結果です。DynamoDB へのネットワーク呼び出しの前に発生し、boto3 の Unable to locate credentials の JS v3 版です。これは権限の問題ではなく(それは AccessDeniedException になります)、アイデンティティがまったく存在しません。
発生する理由
- どこにも認証情報が設定されていない — 環境に
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYがなく、~/.aws/credentialsもなく、ロールもない。 [default]プロファイルが存在しない — 名前付きプロファイルしかないのにAWS_PROFILEが設定されていないため、チェーンは[default]を探して何も見つけられない。- プロセスがシェルの環境を見ていない — エクスポートした変数を継承しないサービスマネージャー、cron ジョブ、コンテナ、IDE の起動。
- ランタイムにロールがアタッチされていない — 期待される IAM ロールのない ECS タスク、EC2 インスタンス、Lambda。メタデータプロバイダーが何も返さない。
- 負荷時に断続的: IMDS のスロットリング — 高並行性のワークロードが EC2 インスタンスメタデータサービスを叩くと、認証情報の取得が散発的に失敗することがある(このエラーが「ランダムに」現れる既知の原因)。
- アイデンティティソースのないブラウザコード — フロントエンドの呼び出しには Cognito Identity Pool(または同等の)認証情報が必要。ブラウザには環境的なチェーンがありません。
修正方法
1つの認証情報ソースを選び、端から端まで検証します。 最速のチェック: コードを実行するのと 同じ 環境(同じユーザー、同じコンテナ)で
aws sts get-caller-identity。ローカル開発:
aws configure([default]を書き込む)、または名前付きプロファイルのみを使う場合はAWS_PROFILE=myprofileを設定。DynamoDB Local / LocalStack: チェーンに頼らず、エンドポイントとともに明示的なダミー認証情報を渡します:
import {DynamoDBClient} from '@aws-sdk/client-dynamodb'; const client = new DynamoDBClient({ region: 'local', endpoint: 'http://localhost:8000', credentials: {accessKeyId: 'local', secretAccessKey: 'local'} });AWS ランタイムでは、ロールをアタッチします — EC2 のインスタンスプロファイル、ECS/Fargate のタスクロール、Lambda の実行ロール — キーを出荷する代わりに。
EC2 で高並行性の場合、クライアントを一度だけ(モジュールスコープで)作成し、認証情報がリクエストごとに再取得されるのではなく解決されキャッシュされるようにします。SDK のリトライと共有クライアントが IMDS の一時的な不具合を吸収します。
SDK v2 と v3 の認証情報設定を混在させないでください — コードが実際にインポートしている SDK を設定します。
認証情報が解決したら、データを閲覧するのがパイプライン全体を確認する最速の方法です — DynoTable は AWS プロファイルで接続し(DynamoDB Local にも対応)、CLI と同じ方法で ~/.aws から認証情報を解決して、テーブルをすぐに表示します。
DynoTable で調べる
DynoTable がテーブルを一覧できるなら認証情報は解決しています — 問題は、プロセスがどのソースを読んでいるかです。Settings → Profiles で同じプロファイルを追加して Test Connection を実行し、アプリを動かしているのと同じシェルでの aws sts get-caller-identity の結果と比べてください。
Local の場合は、プロファイルにエンドポイント http://localhost:8000 とダミーの local/local の認証情報を設定します。AWS に接続するとインストールを参照してください。接続できたら ⌘K でテーブルを開きます。クエリビルダーからテストクエリを実行して、署名が通ることを確かめましょう。
出典
- Set credentials in Node.js — AWS SDK for JavaScript v3 (2026-07-13 時点で検証)
- AWS SDKs and Tools standardized credential providers (2026-07-13 時点で検証)
関連するエラー
- Unable to locate credentials (boto3) — Python での同じ失敗。
- The security token included in the request is invalid — 認証情報は見つかったが拒否された。
- 設定にリージョンがない
- Learn: Running DynamoDB Local
参考資料
- Set credentials in Node.js — AWS SDK for JavaScript v3 Developer Guide (the default credential provider chain)
- AWS SDKs and Tools standardized credential providers — AWS SDKs and Tools Reference Guide
- AWS Signature Version 4 for API requests — IAM User Guide (why every request needs signed credentials)
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。