amazon-web-services - 使用预签名 URL“SignatureDoesNotMatch”获取 AWS S3 对象
问题描述
我在爱尔兰地区创建了一个存储桶,并阻止了所有公共访问。此外,我创建了一个脚本来生成一个预签名的 URL 来获取对象。出于某种原因,我总是收到 SignatureDoesNotMatch 错误。我无法理解其背后的原因。下面是我的代码:
let getPresignedUrl = async () => {
const AWS = require('aws-sdk');
const s3 = new AWS.S3({apiVersion: '2006-03-01', region: 'eu-west-1'});
console.log(`Starting...`);
const params = {Bucket: 'mybucket', Key: 'potato.jpeg', Expires: 300};
const url = await s3.getSignedUrlPromise('getObject', params);
console.log('The URL is', url); // expires in 60
};
getPresignedUrl();
这是我收到的消息
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<AWSAccessKeyId>key</AWSAccessKeyId>
<StringToSign>GET 1603525258 /mybucket/potato.jpeg</StringToSign>
</Error>
解决方案
尝试修改这个:
const s3 = new AWS.S3({apiVersion: '2006-03-01', region: 'eu-west-1'});
对此:
const s3 = new AWS.S3({apiVersion: '2006-03-01', region: 'eu-west-1', signatureVersion: 'v4'});
推荐阅读
- sql - 仅当它是日期值时才转换为日期时间
- c# - C# .NET 项目无法从环境变量中指定的路径获取 DLL
- excel - Laravel:如何将自定义刀片表下载为 excel
- css - Vue 在计算动态路由时会丢失所有的 css 和图像
- node.js - 节点js中的远程调度
- google-analytics - 如何调试调试视图中缺少的 Google Analytics 4 事件
- javascript - 我想将此传单地图多边形更改为折线,这是传单地图代码。我正在尝试让我的地图框显示坐标
- python - 在 Airflow 2 [Cloud Composer] 中导入自定义插件
- sql - concat(日期,字符串)的Postgres排序
- reverse-engineering - 料斗拆装机 ASM