nodejs 客户端 s3 getSignedUrl 给出指定使用 AWS KMS 托管密钥进行服务器端加密的请求需要 AWS 签名版本 4

tmp*_*dev 5 amazon-s3 node.js

我使用以下代码生成 s3 存储桶的预签名 url

  const presignedUrl = s3.getSignedUrl('getObject', {
    Bucket: config.parsedResumeDestination,
    Key: tmpKey,
    Expires: 60 * 60 * 60 // 1 hour
  });
Run Code Online (Sandbox Code Playgroud)

但是,当我在浏览器上复制生成的网址时,出现以下错误

Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4

我看到了以下解决方案How to generated AWS S3 pre-signed URL using Signature version 4,但是 aws 的 NodeJS 客户端似乎没有此属性。有人可以告诉我这里出了什么问题吗?

Pyt*_*ays 3

当您构造 s3 服务对象时,传入signatureVersion.

这是一种方法:

const AWS = require("aws-sdk");
const s3 = new AWS.S3({
  signatureVersion: "v4",
  ...credentials
})
Run Code Online (Sandbox Code Playgroud)

构建 AWS 服务对象时有很多选项,而且它们大多是通用的: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor-property