AWS JavaScript SDK v3:SignatureDoesNotMatch:我们计算的请求签名与您提供的签名不匹配

问题描述 投票:0回答:1

我正在尝试设置一个将文件上传到 S3 存储桶的 node.js 应用程序。我不断收到此错误:

SignatureDoesNotMatch :我们计算的请求签名与您提供的签名不匹配。

我不确定这是什么意思,但似乎与身份验证或权限有关?为了简单起见,我尝试使用此代码来简单地返回存储桶列表:

import { S3Client, ListBucketsCommand } from "@aws-sdk/client-s3";
import { Upload } from "@aws-sdk/lib-storage";

const s3Client = new S3Client({
  region: "us-west-2",
  credentials: {
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  },
});

try {
  const data = await s3Client.send(new ListBucketsCommand({}));
  console.log("Success", data.Buckets);
} catch (err) {
  console.log("Error", err);
}

对于

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
值,我使用的是通过以下步骤设置的 IAM 用户:

我尝试了使用 AWS CLI 配置访问密钥的各种方法,手动添加配置文件,最后直接将它们指定为环境变量并将它们传递到

S3Client()
构造函数中。如果我使用 AWS Extension for VS Code 并使用
AWS: Connect to AWS > Profile:s3-uploader-user
连接我的本地配置文件,我可以看到美国西部(俄勒冈州)> S3 > test-bucket 下列出的存储桶。我可以使用用户界面中的上传按钮来上传图像。这确认我有足够的权限上传文件。在我的代码中,我记录了 env 变量的值,以确保在调用 s3client.send() 命令时它们设置正确。

amazon-web-services amazon-s3 aws-sdk-js aws-sdk-nodejs aws-permissions
1个回答
0
投票

我很尴尬地说,问题是我设置了一个脚本来读取容器中的机密,但该脚本无法正常工作,并且它清空了

AWS_SECRET_ACCESS_KEY
的值。虽然我知道直接在代码中指定密钥/秘密不是最佳实践,但很高兴知道它有效。

© www.soinside.com 2019 - 2024. All rights reserved.