在
aws-sdk v2
对于 javascript,我们使用以下方式实例化 s3 客户端:
var s3 = new AWS.S3({
accessKeyId: 'YOUR-ACCESSKEYID' ,
secretAccessKey: 'YOUR-SECRETACCESSKEY' ,
s3ForcePathStyle: true,
signatureVersion: 'v4'
});
在这里您可以看到可以指定
signatureVersion
。
在
v3
中,您使用以下方法实例化客户端:
import { S3Client } from '@aws-sdk/client-s3';
credentials = {
accessKeyId: <ACCESS_KEY>,
secretAccessKey: <SECRET_ACCESS_KEY>
}
const client = new S3Client({
region: 'us-east-1',
credentials: credentials,
forcePathStyle: true,
})
文档对于如何执行此操作不是很清楚(并且没有示例)。我如何在 sdk 版本(v3)中为客户端指定
signatureVersion
?
我刚刚从旧的 s3 客户端迁移到新的 s3 客户端。
我之前曾经指定
signatureVersion: 'v4'
因为这个问题(我们必须上传带有空格的文件)。
自从迁移以来我没有遇到过这个问题,所以我认为可以安全地假设他们默认使用版本 4 签名。
而且由于它们没有公开
signatureVersion
配置选项,我想说也可以安全地假设您 不能 使用新 SDK 使用签名版本 2。
--
[编辑] 检查他们的文档:https://docs.aws.amazon.com/AmazonS3/latest/API/bucket-policy-s3-sigv4-conditions.html
"AWS" identifies Signature Version 2
"AWS4-HMAC-SHA256" identifies Signature Version 4
因此您应该能够检查
X-Amz-Algorithm
查询参数来确定。
在此页面他们说:
对于所有 AWS 区域,AWS 开发工具包默认使用签名版本 4 对请求进行身份验证。使用 2016 年 5 月之前发布的 AWS 开发工具包时,您可能需要请求签名版本 4,如下表所示。
自从 v3 SDK 于 2020 年发布以来,它应该使用签名版本 4。