AWS JS SDK 突然抛出“访问密钥 ID 或安全令牌无效”。

Hnr*_*ppk 9 amazon-dynamodb aws-sdk aws-sdk-nodejs aws-sdk-js github-actions

最近是否有人注意到 AWS JS SDK 的行为发生了变化?

因为我在 Github Actions 中有一个 CI 管道,其中使用以下 docClient 设置启动本地 DynamoDB 并将其写入 DyanmoDB:

const docClient = new AWS.DynamoDB.DocumentClient({
  region: 'localhost',
  endpoint: 'http://localhost:8000',
  accessKeyId: 'DEFAULTACCESSKEY',
  secretAccessKey: 'DEFAULTSECRETKEY',
  convertEmptyValues: true,
});
Run Code Online (Sandbox Code Playgroud)

到目前为止,这也非常有效,只是从今天中午开始,这个错误就失败了。

我没有更改源代码中的任何内容,只是再次运行 CI 作业。

 UnrecognizedClientException: The Access Key ID or security token is invalid.
281
      at Request.extractError (node_modules/aws-sdk/lib/protocol/json.js:80:27)
282
      at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:106:20)
283
      at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:78:10)
284
      at Request.emit (node_modules/aws-sdk/lib/request.js:686:14)
Run Code Online (Sandbox Code Playgroud)

我在今天发布的 aws-sdk 包 (2.1409.0) 中找不到任何可以表明这一点的内容。

dom*_*egg 12

总览

如果您使用这些 NPM 软件包,请进行以下替换:

细节

如果您使用dynamodb-localhostserverless-dynamodb-local,您最近会遇到此错误,因为较新版本的 AWS DynamoDB Local(自 2023 年 6 月 28 日或版本 1.23.0 起)更改了验证访问密钥的方式。这些软件包会自动下载最新版本,因此它可能在您没有意识到的情况下已升级 - 导致事情明显失败而没有警告。

不幸的是,这些软件包似乎没有得到维护,NPM 已经两年多没有发布新版本了。

您可以改用aws-dynamodb-localserverless-dynamodb维护的分支。(免责声明:我是这个分叉的贡献者)。它是此软件包的直接替代品,并进行更新以修复此错误。

迁移大约需要 2 分钟,自述文件中有完整的指南。当然,这一切仍然是开源的并获得麻省理工学院的许可。这个新套餐的所有权属于一家注册慈善机构,该慈善机构致力于在未来维护该套餐,并对社区的捐款开放。

  • 圣牛,非常感谢。我已经想了几个小时了,为什么我复活的一个旧项目突然不再工作了...... (3认同)

lee*_*gan 9

自最新版本以来,对可以使用的访问密钥进行了强制执行:

\n

DynamoDB local version 2.0.0 and greater AWS_ACCESS_KEY_ID can contain the only letters (A\xe2\x80\x93Z, a\xe2\x80\x93z) and numbers (0\xe2\x80\x939).

\n

此外,如果您使用的是serverless-dynamodb-local等外部软件包,您可以升级到最新版本,因为它们都已被修改以处理 DynamoDB Local 中的此更改

\n

https://repost.aws/articles/ARc4hEkF9CRgOrw8kSMe6CwQ/troubleshooting-the-access-key-id-or-security-token-is-invalid-error-after-upgrading-dynamodb-local-to-version-2-0-或以上

\n