2013-10-19 7 views
10

amazon s3のホストされたファイルへの1回のダウンロードリンクを作成したいと思います。このリンクは、ファイルがダウンロードされると失効します。Amazon S3でワンタイムダウンロードリンクを作成するにはどうすればよいですか?

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

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

可能であれば、IPアドレスまたはCookieで制限する方が効率的かどうか疑問に思うでしょうか?

+0

自己ホストされたWebサイトでファイルをホストし、PHP –

答えて

12

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

+1

のようなサーバー側のスクリプト言語でダウンロードを処理することをお勧めします。これは私のsitatuionにはどのように動くかについての情報この? – Muggles

+0

私はあなたがPHPを使用して参照してください。私はそれでプログラムはしませんが、AmazonにはSDKがあり、createPresignedUrlメソッドを使用する必要があります。 http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html#_createPresignedUrl –

+0

に記載されています。したがって、あなたのWebページにはあなたのURLへのリンクが含まれていますサイト。そのURLをクリックすると、あなたが作成したあらかじめ署名されたURLにリダイレクト応答が送信され、1分程度で期限切れになります。 –

3

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

  • ユーザーが1つのタイムURLを望んでいる、彼らはあなたの「1つの タイムURLジェネレータ」サービスにリクエストを送信します。

    は、次の手順を考えてみましょう。

  • あなたのサービスは「ワンタイムURL」を生成し、それをユーザーに返します。 urlは、ユーザーが望むS3リソースへの1対1のマッピングです。
  • ユーザーが「ワンタイムURL」を要求すると、サービスはAWSフェデレーションユーザー機能を使用して一時的ユーザーを作成し、一時的ユーザーの代わりにS3 presigned URLを生成します。
  • サービスはユーザーに応答を返し、予約済みURLにリダイレクトします。
  • ユーザーは、リダイレクトに従って、ファイルのダウンロードを開始します。
  • サービスは、一時的なユーザーを削除します。 (あるいは、それが期限切れにすることができます。)
+0

オープンソースプロジェクトにはどのような機能がありますか? –

+0

@Stefこれを試してください:https://github.com/joshpangell/single-use –

+0

@AviParshanには、同様のJavaライブラリがありますか? – sinu

0

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

署名したURLを使用してください。このユーザーのみがこのURLを使用できます。

+1

リンクの内容を要約してください。 – SilentMonk

+0

答えにもっと多くのリンクを入力してください。何らかの理由でリンクがオフラインになると、回答全体が役に立たなくなる可能性があります。 –

関連する問題