Could not load credentials from any providers

TL;DR — AWS SDK for JavaScript v3 走遍了它整條預設憑證鏈 — 環境變數、SSO、共用的 config/credentials profile、web identity,以及容器/實例中繼資料端點 — 沒有一個產生出憑證。給這條鏈一個它能找到的來源(環境變數、aws configure、附掛的 role),或明確地將 credentials 傳給用戶端 — 對 DynamoDB Local 而言,那本來就應該是假的值。

這是什麼意思

CredentialsProviderError: Could not load credentials from any providers

每個 DynamoDB 請求都必須經 SigV4 簽署,因此在第一次呼叫前,SDK 會透過其 provider 鏈解析憑證。這個錯誤就是這條鏈的「什麼都沒找到」結果 — 它在任何對 DynamoDB 的網路呼叫前就觸發,是 boto3 Unable to locate credentials 的 JS v3 對應版本。它不是權限問題(那會是 AccessDeniedException)— 根本沒有任何身分。

為什麼會發生

  • 任何地方都沒設定憑證 — 環境中沒有 AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY、沒有 ~/.aws/credentials、沒有 role。
  • [default] profile 不存在 — 你只有具名 profile,但 AWS_PROFILE 沒設定,因此這條鏈尋找 [default] 卻什麼都找不到。
  • 行程看不到你 shell 的環境 — 服務管理器、cron 工作、容器或 IDE 啟動時未繼承你匯出的變數。
  • 執行環境中未附掛 role — 沒有預期 IAM role 的 ECS task、EC2 實例或 Lambda,因此中繼資料 provider 回傳空的。
  • 高負載下間歇發生:IMDS 節流 — 高並行工作負載猛打 EC2 實例中繼資料服務,可能偶發地讓憑證取得失敗(這個錯誤「隨機」出現的已知原因)。
  • 沒有身分來源的瀏覽器程式碼 — 前端呼叫需要 Cognito Identity Pool(或類似)憑證;瀏覽器中沒有環境憑證鏈。

如何修正

  1. 選一個憑證來源並端到端驗證它。 最快的檢查:在執行你程式碼的_同一個_環境(同一使用者、同一容器)中執行 aws sts get-caller-identity

  2. 本機開發: aws configure(寫入 [default]),或當你只用具名 profile 時設定 AWS_PROFILE=myprofile

  3. 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'}
    });
  4. 在 AWS 執行環境中,附掛 role — EC2 上的 instance profile、ECS/Fargate 上的 task role、Lambda 上的 execution role — 而非帶入金鑰。

  5. 在 EC2 上的高並行下,只建立一次用戶端(模組作用域),讓憑證被解析並快取,而非每個請求重新取得;SDK 重試加上共用用戶端可吸收 IMDS 的偶發狀況。

  6. 不要混用 SDK v2 與 v3 的憑證設定 — 設定你程式碼實際匯入的那個 SDK。

一旦憑證解析成功,瀏覽資料是確認整條管線最快的方式 — DynoTable 桌面應用程式以你的 AWS profile(以及 DynamoDB Local)連線並立即顯示你的表格。正在組合第一個查詢?從 DynamoDB Expression Builder 開始。

相關錯誤

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。