モバイルアプリがAWS S3に画像をアップロードします。問題は、次のオプションのいずれかを実行するかどうかです。
画像をAPIサーバーにアップロードしてから、APIサーバーが画像をS3にアップロードします。
長所:S3資格情報はクラウドにのみ保存されるため、より安全です。
短所:数千のユーザーが2 MBから10 MBまでのサイズの画像をアップロードするため、APIサーバーへの負荷が高くなります。
S3アクセスごとにAPIサーバーから一時S3資格情報を取得することにより、モバイルアプリに画像を直接S3にアップロードさせます。
長所:APIサーバーへのプレッシャーが少なく、サーバーにファイルがアップロードされません。
短所:モバイルアプリが一時を要求するという事実に関係なく、S3認証情報がモバイルに公開されるため、安全性が低下しますS3にアクセスするたびに資格情報を取得し、APIサーバーとのSSL接続を介して資格情報を取得します。
では、上記のオプション2の方が優れていますか? SSL接続を介してS3にアクセスするために、毎回15分間のみ有効な一時的な資格情報を既に付与しているためです。
これを行うための推奨方法は何ですか?
優先する方法は、署名済みの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