2016-12-23 10 views
0

ユーザーがブラウザからS3バケットに直接ファイルをアップロードできるようにしたい。私は、サーバー上でポリシー文書に署名するためのいくつかの推奨事項を見てきました。また、サーバー上にあらかじめ署名されたURLを作成してクライアントに戻すことを推奨するものもありました。セキュリティで保護されたブラウザベースのS3アップロード:署名されたポリシーのdocまたは予約済みのURL?

たとえば、このDjangoのREST Frameworkライブラリは、両方のオプションを提供: https://github.com/bodylabs/drf-to-s3

をセキュリティの観点からメリット/デメリットは何ですか?

答えて

1

セキュリティの観点からは意味がありません。

署名付きURLはPUTで、署名付きポリシー文書はPOSTとなります。

リバースエンジニアリングには計算上実行不可能な署名アルゴリズムを使用します。

両方を使用すると、書き込み/上書きできるバケットとキーを制限できます。 POSTは柔軟性があり、目的のオブジェクトのキーをプレフィックスと一致させる(ポリシーを介して)ことができます。

両方に期限切れメカニズムがあります。

両方とも、(署名によって認可された)意図されたアクション以外のアクションが実行されるように要求を変更することができないという意味で、改ざんの影響を受けません。

POSTアップロードのメリットの1つは、ポリシー文書でアップロードの有効なサイズ範囲を指定できることです。 PUTは、サーバーによって署名されたヘッダーのリストにContent-Lengthヘッダーを含めることによって、サイズを指定するか、または正確なサイズをバイト単位で指定する必要があります。これには、署名バージョン4を使用する必要があります(古いS3領域では、しかし、わずかに簡単に実装するが、すべての領域がV4をサポートしています。)

一つは、プロセス/フローの観点から、あなたに最も理にかなっているかを決定し、それは、本当には、ボンネットの下にやっているかを理解し、何の保障があってはなりません他のものよりも一つを好む関係の理由。

+0

私はboto3ライブラリはバケットにデータを書き込む前に署名のPOSTのためのオプションがあることに気づいます。http: //boto3.readthedocs.io/en/latest/guide/s3.html#generating-presigned-posts ... "content-length-range"のような条件も設定できるようです。 – Rob

+0

@Rob、これはポリシー文書(あなたが質問で言及したように、私が答えに述べたように)とそれに付随するフォームフィールドを構成しています。これをサポートする基礎となるサービスへの低レベルインタフェースの例は、[here](http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html)で文書化されています。 –

0

ホイールを改造しないでください。現在は無料のfineuploaderのようなライブラリを使用することを検討し、django側(S3に直接アップロードするライブラリのURLに署名するコード)の良い例があります。ライブラリには、ファイルを小さな部分にチャンクするなど、多くの優れた機能があります。非常に大きなビデオファイル(16GB +)を正常に読み込むためにこれを使用しました。

(これはOPへの直接の答えではないですが、答えはそれほど重要なことがありあれば謝罪)

+0

ありがとうございます。そのライブラリは非常に便利です。 – Rob

関連する問題