web-dev-qa-db-ja.com

Amazon S3でワンタイムダウンロードリンクを作成するにはどうすればよいですか?

Amazon s3がホストするファイルへの1回限りのダウンロードリンクを作成します。このリンクは、ファイルがダウンロードされると期限切れになります。

このファイルを引き続きホストしたいのですが、訪問者はファイルを一度しかダウンロードできません。

私がこれを必要とするシナリオは、次のとおりです。ユーザーがファイルの料金を支払うファイルダウンロードWebサイトがあります。ユーザーがファイルをウェブサイト(およびAmazon s3)から一度だけダウンロードできるようにしたい。また、ユーザーが他の人と直接ダウンロードリンクを共有できないようにしたい。

これが不可能な場合は、可能であればIPアドレスまたはCookieで制限する方が効率的ですか?

17
Muggles

リンクを1回だけ使用できるようにS3に指示する方法はありません。ただし、指定された時間までしか使用できないリンクを作成できます。私がすることは、リクエスターを数分で期限切れになるS3リンクにリダイレクトすることです。そのため、リクエスターはそれを共有する時間がありません。ブラウザーがリダイレクト応答を受信して​​それに従う時間があれば、有効期限を数秒でも非常に短くすることができます。

20
Charles Engelke

「ワンタイムURLジェネレーター」サービス(ウェブサイトまたはREST APIのいずれかの形式)を作成し、awsフェデレーションユーザー機能を利用してこれを実現できます。

次の手順を検討してください。

  • ユーザーが1回限りのURLを必要とする場合、ユーザーは「1回限りのURLジェネレーター」サービスにリクエストを送信します。
  • サービスは「ワンタイムURL」を生成し、それをユーザーに返します。 URLは、ユーザーが希望するS3リソースへの1対1のマッピングです。
  • ユーザーが「ワンタイムURL」にリクエストを行うと、サービスはAWSフェデレーションユーザー機能を使用して一時ユーザーを作成し、一時ユーザーに代わってS3署名済みURLを生成します。
  • サービスは応答をユーザーに送り返し、署名済みのURLにリダイレクトします。
  • ユーザーはリダイレクトに従い、ファイルのダウンロードを開始します。
  • 次に、サービスは一時ユーザーを削除します。 (または期限切れにします。)
4
okwap

http://docs.aws.Amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateCFSignatureCodeAndExamples.html

署名付きURLを使用します。このユーザーのみがこのURLを使用できます。 AWS SDKにも依存しています

0
Christian