Could not load credentials from any providers
TL;DR — AWS SDK for JavaScript v3 走遍了它的整条默认凭证链——环境变量、SSO、共享 config/credentials profile、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]profile 不存在——你只有命名的 profile,但没有设置AWS_PROFILE,因此链去找[default]却什么都没找到。- 进程看不到你 shell 的环境——一个服务管理器、cron 任务、容器或 IDE 启动,没有继承你导出的变量。
- 运行时中没有附加角色——一个没有预期 IAM 角色的 ECS 任务、EC2 实例或 Lambda,因此元数据提供者返回空。
- 高负载下的间歇性问题:IMDS 限流——高并发工作负载猛烈请求 EC2 实例元数据服务,会导致凭证获取偶发失败(这个错误"随机"出现的一个已知原因)。
- 没有身份来源的浏览器代码——前端调用需要 Cognito Identity Pool(或类似)凭证;浏览器中没有环境凭证链。
如何修复
选定一个凭证来源并端到端地验证它。 最快的检查:在运行你代码的_同一个_环境(同一用户、同一容器)中执行
aws sts get-caller-identity。本地开发:
aws configure(写入[default]),或者当你只用命名 profile 时设置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 profile 连接(以及 DynamoDB Local)并立即显示你的表,它从 ~/.aws 解析凭证的方式与 CLI 完全相同。
在 DynoTable 中检查
如果 DynoTable 列出你的表,则凭据解析 — 问题在于你的进程读取哪个源。在“设置”→“配置文件”下添加相同的配置文件,运行 Test Connection,并在你的应用程序使用的同一 shell 中与 aws sts get-caller-identity 进行比较。对于本地,在配置文件上使用虚拟 local/local 凭据设置端点 http://localhost:8000。参见连接 AWS和安装。连接后用⌘K打开表格。通过 Query Builder 运行测试查询以确认签名有效。
来源
- Set credentials in Node.js — AWS SDK for JavaScript v3(2026-07-13 验证)
- AWS SDKs and Tools standardized credential providers(2026-07-13 验证)
相关错误
- 找不到凭证(boto3)——Python 中同样的失败。
- The security token included in the request is invalid——找到了凭证,但被拒绝。
- 配置中缺少 region
- 学习: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 官方文档。