2017-09-25 29 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

每當我在我的應用程序中使用密鑰時,下載過程似乎很完美。刪除角色的評論鍵後,列表似乎很完美,但下載不起作用。代碼沒有變化。 –