無限ノック › DVA 練習問題一覧 › 問題
DVAAWSのサービスを使用した開発

フロントエンド(SPA)からユーザーが直接S3に動画ファイルをアップロードする機能を実装します。要件は以下の3つです。 ①AWS認証情報をブラウザに配布しない。 ②アップロード先のキーとContent-Typeを固定し、最大ファイルサイズを10MBに制限する。 ③署名は有効期限付きにする。 最も適切な実装はどれですか。

A
LambdaでcreatePresignedPost(署名付きPOST)を生成し、Conditionsでキー・Content-Type・content-length-rangeを指定してブラウザに返す
✓ 正解
署名付きPOSTはPOSTポリシーのConditionsでキー、Content-Type、content-length-rangeを同時に強制でき、最大10MB制限も実現できます。有効期限も設定でき、生成はサーバー側で行うため認証情報を配布しません。全要件を満たす唯一の方式です。
B
LambdaでgetSignedUrl(PUT用署名付きURL)を生成し、ブラウザからPUTでアップロードさせる
PUT用署名付きURLはキーやContent-Typeを固定できますが、署名でファイルサイズの上限(content-length-range)を強制する仕組みがありません。要件②のサイズ制限を満たせないため不適切です。
C
Cognito Identity Poolの認証済みロールにs3:PutObject権限を付与し、ブラウザのSDKから直接アップロードする
Identity Poolの認証済みロールを使うとブラウザに一時的なAWS認証情報が渡るため、要件①に反します。さらにキーやサイズの細かい制約をロール側で強制するのも難しく、要件を満たせません。
D
バケットポリシーで公開書き込みを許可し、ブラウザから直接PutObjectを実行する
バケットを公開書き込みにすると誰でも任意のオブジェクトを書き込め、重大なセキュリティ事故につながります。キー・サイズ・期限の制御もできず、本番運用では決して採用してはいけません。

解説

S3の署名付きPOST(createPresignedPost)はPOSTポリシーのConditionsでアップロードを細かく制約できます。キーのプレフィックスやContent-Type、そしてcontent-length-rangeによるファイルサイズの上下限を指定でき、有効期限も設定できます。サーバー側で生成しブラウザに返すため認証情報も配布しません。すべての要件を満たします。 選択肢BのPUT署名付きURLはキーやContent-Typeは固定できるが、content-length-rangeに相当するファイルサイズ制限を署名で強制できない。 選択肢CのIdentity Pool直接付与は認証情報(一時クレデンシャル)をブラウザに渡すことになり、サイズ・キー制限も難しい。 選択肢Dの公開書き込みは重大なセキュリティリスクで論外。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る