2011-06-18 6 views
10
私はに行けば、そのようなことをレールのアプリで後ろの私のS3のドキュメントを保護したいと思い

:前の表示にRailsの実装

www.myapp.com/attachment/5ユーザーを認証する必要があり、その/ドキュメントをダウンロードします。

私はstackoverflowで同様の質問を読んだことがありますが、私は良い結論を見たことがわかりません。

私が読んだところでは、S3文書を「保護する」ためにできることがいくつかあります。

1)URLを難読化します。私はこれをしました。私はこれが良いことだと思うので誰もURLを推測することはできません。たとえば、S3 URLが明白な場合は、URLを「歩く」ことは簡単です(https://s3.amazonaws.com/myapp.com/attachments/1/document.doc)。 URLが: https://s3.amazonaws.com/myapp.com/7ca/6ab/c9d/db2/727/f14/document.docの方がはるかに優れているようです。 これは素晴らしいことですが、電子メールやウェブサイト経由でURLを渡す問題は解決しません。私にとってRails 3, paperclip + S3 - Howto Store for an Instance and Protect Access をしかし、これはURLでもちょうど時間の短い期間(露出しているため優れたソリューションではありません、)と別のユーザーは、おそらく時間に再利用することができます:

2)ここに示すように、期限切れURLを使用しますすぐにURLコピーに時間をかけすぎることなく、ダウンロードできるように時間を調整する必要があります。ちょうど間違った解決策のように思えます。

3)アプリケーションを介してドキュメントのダウンロードをプロキシします。最初はsend_file:http://www.therailsway.com/2009/2/22/file-downloads-done-rightを使用しようとしましたが、これらのファイルはサーバー上の静的/ローカルファイルのみで、別のサイト(S3/AWS)を経由して配信することはできません。私はsend_dataを使用してドキュメントをアプリケーションにロードしてすぐにドキュメントをユーザに提供することができます。このソリューションの問題点は明らかです.2倍の帯域幅と2倍の時間(ドキュメントをアプリケーションにロードしてからユーザーに戻す)です。

#3の完全なセキュリティを提供しますが、追加の帯域幅と読み込み時間を必要としないソリューションを探しています。それはBasecampが(認証を介して)自分のアプリの背後にあるドキュメントを「保護」しているように見えますが、私は他のサイトも同様のことをしていると思いますが、彼らは#3のソリューションを使用しているとは思わない。

提案をいただければ幸いです。

UPDATE:リファラに基づいてファイルへのアクセスを制御するためにアマゾンバケットポリシーを使用)

4:

私は第四溶液で行きました http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?UsingBucketPolicies.html

AGAIN UPDATE:

ウェル#4は、ブラウザの開発ツールを使用して簡単に処理できます。だから私はまだ固い解決策を探しています。

答えて

0

私は3番に投票します。これは唯一真に安全なアプローチです。これは、有効期限まで有効なS3 URLにユーザーを渡すためです。巧妙なユーザーは唯一の問題であるが、あなたのアプリケーションに影響を与えますか? おそらく、リスクを最小限に抑える有効期限を低く設定できますか? この記事からの抜粋を見てみましょう: Accessing private objects from a browser

をすべて民間のオブジェクトは、S3 サーバーへ 認証されたGETリクエストを経由してアクセス可能です。あなたは のように、このオブジェクトのための 認証されたURLを生成することができます。デフォルトでは 認証URLを

S3Object.url_for('beluga_baby.jpg', 'marcel_molina') 

をそれらが生成された後5分 を期限切れ。 expires_inオプション::私が持っている

+0

ポストに感謝します。それは私の#2の解決策ではありませんか?私はそれが実行可能だが、それは本当に安全なアプローチではないように思える。何らかの理由で、私はそれが穴を残すように感じます(たとえそれがやや小さかったとしても)。二重帯域幅の問題なしに私の#3を実装する方法に関する提案はありますか? –

+0

それはあなたが得ることができるように安全に近いです。あなたはこれを取得するために何らかの種類のリバースプロキシを使用することができるかもしれませんが、帯域幅はこれでどこかで使用されるつもりです。タイムアウトを1分に設定するだけです。 –

+0

私は、RoRからの認証に基づいてリダイレクトできるいくつかのapacheプラグインに関連する解決策がいくつか欠けていたと思っていました。タイムアウトは(あなたが設定しようとするウィンドウの大きさに関係なく)まだいくつかのレベルの不安定さを許していませんか?それにもかかわらず、私はこれがちょうど2つの答えかもしれないことに同意します。他に誰もチャイムしていない場合、私はあなたを正しい答えとして設定します。ありがとうございました。 –

0

となりまし に対する秒数を持つオプションを満了し、または :

有効期限オプションは、絶対と エポックがあるため、時間のいずれか を指定することができます似たようなことをやろうとしている途中です。帯域幅を2倍にしたくなければ、これが可能な唯一の方法はS3がそれを実行できるようにすることです。今私は公開されたURLについて完全にあなたと付き合っています。あなたはどんな選択肢も考え出すことができましたか?

私はこの点で有用であるかもしれない何かを見つける - AWSポリシーの一部を作成する必要があり、その後、これを生成するために使用することができるように、ユーザーが、自分のIPとAWSのセッションをログインするとhttp://docs.aws.amazon.com/AmazonS3/latest/dev/AuthUsingTempFederationTokenRuby.html

を署名されたURLしたがって、リクエストのソースが異なるIPになるため、誰かが署名の一致しないURLを取得します。これが理にかなっていて、十分に安全であるかどうかを教えてください。

関連する問題