2017-09-25 26 views
0

我正在使用IAM角色从我的EC2实例访问S3。但在我的应用程序中,我创建了一个用于下载文件的签名URL。但是,当用户尝试下载文件时,它显示访问被拒绝错误。通过签名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) 
+0

尝试与'AWS S3 Bucket Policy'结合公开您的s3对象。参考:http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html –

+0

你能展示一些代码吗?签名的URL是处理这个问题的正确方法。我强烈建议不要向公众开放你的存储桶,除非你确定这是你想要的。 – stdunbar

+0

上传的文件必须设置为公共。否则,你的应用程序应该有一些acl设置上传文件公开 – Ayoub

回答

1

您提供已签署的网址,他们导致Access Denied错误的事实说签名的URL无效

一些可能原因:

  • 的签名网址是错误组建(你没告诉我们你的代码,所以我们不能确定这一点)
  • 凭据用于生成签名URL没有访问对象的权限(一个签名的URL是一种授权临时的有限使用凭证的方式,但底层的凭证必须能够访问资源)
  • tim用于签名的URLë时间已过(但这将导致不同的错误信息)
  • 对象不存在(这是相当容易的,因为Access Denied表明这一点,而不是显示与所述签名URL的错误)
+0

每当我在我的应用程序中使用密钥时,下载过程似乎很完美。删除角色的评论键后,列表似乎很完美,但下载不起作用。代码没有变化。 –