2017-09-25 20 views
0

私はECAMインスタンスからS3にアクセスするためにIAMロールを使用しています。しかし、私のアプリケーションでは、ファイルをダウンロードするための署名付き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オブジェクトをパブリックにしてみてください。 Ref:http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html –

+0

コードを表示できますか?署名されたURLはこれを処理する正しい方法です。あなたが望んでいることが分かっていない限り、バケツを一般公開することを強くお勧めします。 – stdunbar

+0

アップロードされたファイルはpublicに設定する必要があります。さもなければ、あなたのアプリはアップロードされたファイルを公開するようにいくつかのaclを持たなければならない。 – Ayoub

答えて

1

あなたが署名されたURLを提供していると、彼らはAccess Deniedエラーになるという事実は、署名付きURLが有効ではないと言います。

いくつかの潜在的な理由:

  • 署名付きURLは間違って署名を生成するために使用(あなたが私達にあなたのコードを示さなかったので、我々はこれを決定することはできません)
  • 信任状を構築しましたURLにはオブジェクトにアクセスするためのアクセス許可がありません(署名付きURLは、資格情報の一時的な制限付き使用を許可する方法ですが、基になる資格情報にはリソースへのアクセス権が必要です)
  • tim署名されたURLの電子期間が期限切れ(ただし、これは別のエラーメッセージが表示されます)
  • Access Deniedではなく署名付きURLに関連するエラーを表示するよりも、このことを示唆しているので、オブジェクトは、かなり可能性が高い(存在しません。 )
+0

アプリケーションでキーを使用するたびに、ダウンロードプロセスは完璧なようです。役割を持つコメントキーを削除した後、リストは完璧に見えるものの、ダウンロードは機能しません。コードに変更はありません。 –

関連する問題