2016-01-26 8 views
5

AWS S3バケットに画像があります。 <img>タグにAWS URLを挿入することで、この画像を自分のウェブサイトに含めることはできますか? URLには、「Amz-Signature」、「Amz-Credential」、「amz-security-token」などのパラメータが含まれています。S3バケット内の他のファイルに悪意のあるアクセスをすることはできますか?ウェブページ上のAWS S3バケット内の画像へのリンクを使用しても安全ですか?

URL:

https://s3.amazonaws.com/MyBucketName/FileName.jpg?X-Amz-Date=20160126T141139Z&X-Amz-Expires=300&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=Lots_of_letters_and_Numbers2&X-Amz-Credential=MYAMAZON_CREDENTIALS/20160126/us-east-1/s3/aws4_request&X-Amz-SignedHeaders=Host&x-amz-security-token=REALLY_LONG_SECURITYTOKEN 

また、私はAWS SDKを使用して、私のC#のコードから有効期限のURLを生成することができますような何か:。

var expiryUrlRequest = new GetPreSignedUrlRequest 
{ 
    BucketName = WebConfigurationManager.AppSettings["AWSBucketName"], 
    Key = fileName, 
    Expires = DateTime.Now.AddHours(3) 
}; 

これは、パラメータとして "AWSAccessKeyId" を持っているURLを生成する

これらのURLのいずれかは私のウェブページで安全に使用できますか?私のサイトでそれらを使用する際にどのようなリスクが伴いますか?

ありがとうございます。追加情報が必要な場合、または私が不明確な場合はお知らせください。

EDIT:私のアプリケーションをさらに深く理解するために、ユーザーはファイルをS3バケットにアップロードしています。私はSignalRを使用して、ユーザーが見るために自分のWebページにS3からのイメージを表示することによってイメージがバケツにあることを確認しています。

答えて

5

バケットを公開しないでください。そうすると、潜在的にuser1がuser2のアップロードされたファイルを見ることができます。

ユーザーは、事前に署名されたURLを使用して、特定の期間、単一のファイルを取得できます。プライベートとして

  1. マークS3バケット。
  2. GetPreSignedUrlRequestを使用して、ユーザーがダウンロードするファイルの事前署名済みURLを生成します。
  3. <img>タグにそのURLを使用してください。この技術を使用して

が安全である:

  1. ユーザー(あなたがGetPreSignedUrlRequestコールの一部として設定)の有効期限
  2. まで、あなたが許可した期間中にファイルをダウンロードすることができますのみURLに表示される資格情報は、URLの作成に使用された資格情報と同じ場合があります。しかし、彼らはユーザーを表示することは安全です。
  3. ユーザーはバケットから他のファイルをダウンロードすることはできません。

URLはハッシュ技術を使用してURLを変更できないようにしたり、他のファイルを取得するために悪用することはできません。

アクセスキーIDを表示する場合は、(a)S3からファイルをダウンロードするためのIAMユーザーを作成するか、(b)EC2インスタンスでIAMロールを使用して事前に署名されたURL

参考文献:グッド

+0

チップをありがとう。しかし、 'GetPreSignedUrlRequest'を使うと、' AWSAccessKeyId = 'と' Signature = 'パラメータを持つURLを返します。ユーザーにこの情報を提供するのは安全ですか? – user95227

+2

は、事前署名されたURLが動作する方法であり、AWSAccessKeyIdは一時的なものであり、署名はURLを変更できないようにするための手段です。あなたは確かにこれと一緒に行くことができます – Tom

+0

はい、「このテクニックは安全です」の項目#2で述べたように安全です。 –

0

まず第一に、バケットのコンテンツへのアクセスを制限する2つの方法があります。

  • プライベート - ユーザーがあなたのように同じように(そのファイルにアクセスするためのAWSの資格情報を必要とします答)
  • 公共 - 誰もがバケツのコンテンツにアクセスすることができます(https://myBucket.s3.amazonaws.com/myFolder/myFile.jpg
  • あなたは他のユーザーが画像にアクセスしたい場合は

(たとえば、ウェブサイトのURLを指定するなどして)バケツを公開としてマークする必要があります。

AWSの資格情報を使用してURLをどこにでも投稿しないでください!

+0

手を差し伸べるためにあなたに感謝知っています。ユーザーがバケット内の他のファイルにアクセスできるようにしたくありません。ファイル名を暗号化するだけで、公開するとユーザーがバケット内の他のファイルにアクセスできないようになると思いますか?このイメージを表示するには、セキュリティリスクの可能性があると思われるため、他の方法で表示します。 – user95227

+1

残念ながら、バケットが公開されている場合、そのバケットはすべてのファイルが公開されていることを意味します。ショーの機能を処理するための一時的な公開バケツを潜在的に持っていて、イメージを他のプライベートバケツに移動することもできます(ただし、イメージは明らかにユーザーに表示されなくなります)。 – Smajl

+0

また、バケットにアクセスできるようにIPアドレスのホワイトリストを指定できますが、バケット上で指定されたポリシーはすべてのコンテンツに適用されることに注意してください。 – Smajl

関連する問題