web-dev-qa-db-ja.com

クライアントに認証情報を渡して、Amazon S3にファイルをアップロードできるようにしてもよいですか?

モバイルアプリがAWS S3に画像をアップロードします。問題は、次のオプションのいずれかを実行するかどうかです。

  1. 画像をAPIサーバーにアップロードしてから、APIサーバーが画像をS3にアップロードします。
    長所:S3資格情報はクラウドにのみ保存されるため、より安全です。
    短所:数千のユーザーが2 MBから10 MBまでのサイズの画像をアップロードするため、APIサーバーへの負荷が高くなります。

  2. S3アクセスごとにAPIサーバーから一時S3資格情報を取得することにより、モバイルアプリに画像を直接S3にアップロードさせます。
    長所:APIサーバーへのプレッシャーが少なく、サーバーにファイルがアップロードされません。
    短所:モバイルアプリが一時を要求するという事実に関係なく、S3認証情報がモバイルに公開されるため、安全性が低下しますS3にアクセスするたびに資格情報を取得し、APIサーバーとのSSL接続を介して資格情報を取得します。

では、上記のオプション2の方が優れていますか? SSL接続を介してS3にアクセスするために、毎回15分間のみ有効な一時的な資格情報を既に付与しているためです。

これを行うための推奨方法は何ですか?

6
Samir Sabri

優先する方法は、署名済みのPOSTリクエストを生成することです(バックエンドサーバーは、独自の管理者資格情報でリクエストします)。

次に、クライアント側から、この署名済みPOSTを使用してアップロードします。

これは事実上一時的な認証情報を持つ方法ですが、アップロードする必要がある正確なファイルに制限できるため、導入がはるかに簡単で安全です。

Ruby SDK( https://docs.aws.Amazon.com/sdk-for-Ruby/v3/api/Aws/S3/ PresignedPost.html )を使用すると、使用するSDKで簡単に見つけることができます。

編集:コメントに従って、公式AWSドキュメントにリンクします: https://docs.aws.Amazon.com/AmazonS3/latest/ dev/PresignedUrlUploadObject.html

5
Qortex