通过签名URL下载时拒绝访问

时间:2017-09-25 15:06:13

标签: amazon-web-services amazon-s3

我正在使用IAM角色从我的EC2实例访问S3。但在我的应用程序中,我创建了一个用于下载文件的签名URL。但是,当用户尝试下载文件时,它会显示访问被拒绝错误。

var AWS = require('aws-sdk');
var s3 = new AWS.S3();

//key=file path
var params = {Bucket: bucket, Key: prefix+'/'+key, Expires: 240}
var url = s3.getSignedUrl('getObject', params)
console.log(req.cookies.s, 'got', url) // expires in 60 seconds
res.redirect(url)

2 个答案:

答案 0 :(得分:4)

您提供签名网址并导致Access Denied错误的事实表明签名网址无效

一些可能的原因:

  • 签名网址构造错误(您没有向我们展示您的代码,因此我们无法确定这一点)
  • 用于生成签名URL的凭据没有访问对象的权限(签名URL是一种授权临时,有限使用凭据的方法,但基础凭据必须具有访问权限资源)
  • 签名网址的时间段已过期(但这会产生不同的错误消息)
  • 对象不存在(这很可能,因为Access Denied建议这样做,而不是显示与签名网址相关的错误)

答案 1 :(得分:0)

感谢@john的回答指出Access Denied的主要问题是签名的URL无效。

我想添加另一件事,以帮助解决此问题。 即使您没有正确的存储桶凭据,您仍然可以生成签名的URL

这就是让我陷入困境的地方,因为我不认为我成功生成URL时的凭据不正确。