在aws sdk版本3中指定s3客户端的签名版本

juz*_*ode 7 amazon-s3 amazon-web-services node.js aws-sdk-js

aws-sdk v2JavaScript 中,我们使用以下方法实例化 s3 客户端:

var s3  = new AWS.S3({
          accessKeyId: 'YOUR-ACCESSKEYID' ,
          secretAccessKey: 'YOUR-SECRETACCESSKEY' ,
          s3ForcePathStyle: true,
          signatureVersion: 'v4'
});  
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到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,
    })  
Run Code Online (Sandbox Code Playgroud)

该文档对于如何执行此操作不是很清楚(并且没有示例)。我如何signatureVersion在 sdk 版本(v3)中为客户端指定?

Gus*_*Bus 3

我刚刚从旧的 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
Run Code Online (Sandbox Code Playgroud)

因此,您应该能够检查X-Amz-Algorithm查询参数来确定。