DVAAWSのサービスを使用した開発
モバイルアプリケーションの開発者が、ユーザーが撮影した写真(最大50MB)をS3バケットへ直接アップロードできる機能を実装しています。要件は次のとおりです。
①AWS認証情報をクライアントアプリに組み込まない
②アップロードはAWS SDKを使わずHTTPリクエストのみで実現する
③バックエンドLambdaを経由せずS3へ直接アップロードする
この要件を満たす最も適切な実装方法はどれですか?
AバックエンドのLambda関数でS3署名付きURL(Presigned URL)を生成してクライアントに返し、クライアントはHTTP PUTでS3へ直接アップロードする
✓ 正解
Presigned URLはS3操作の認証情報をURLに埋め込んで発行でき、クライアントはAWS SDKなしにHTTP PUTでS3へ直接アップロードできる。有効期限とオブジェクトキーの制限があるためセキュリティも確保され、3要件をすべて満たす。
BAmazon Cognito Identity Poolを使用してクライアントに一時的なIAM認証情報を発行し、AWS Mobile SDKを経由してS3へ直接アップロードする
Cognito Identity Poolは一時IAM認証情報をクライアントに付与する有効な方法だが、クライアントでAWS SDKを使う必要があるため「SDKを使わない」という要件②を満たさない。
CS3バケットポリシーでパブリック書き込みを許可し、クライアントから直接HTTP PUTリクエストでオブジェクトをアップロードできるよう構成する
S3バケットへのパブリック書き込み許可はセキュリティリスクが非常に高く、認証されていない任意のユーザーが無制限にファイルをアップロードできてしまうため採用すべきではない。
DAPI GatewayにS3プロキシ統合を設定し、クライアントのアップロードリクエストをAPI Gateway経由でS3バケットへ転送するよう構成する
API GatewayのS3プロキシ統合はバックエンド経由のアップロードになるうえ、API Gatewayには10MBのリクエストペイロード制限があり、50MBのファイルアップロードに対応できない。
解説
S3署名付きURL(Presigned URL)は、AWS認証情報をクライアントに渡すことなく、特定のS3操作に対して一時的なアクセス権を付与するURLです。バックエンドがURLを生成してクライアントに返すことで、クライアントはAWS SDKなしにHTTP PUTリクエストだけでS3へ直接アップロードできます。URLには有効期限が設定でき、特定のバケット・キー・操作に限定されるためセキュリティも確保できます。3つの要件(認証情報をクライアントに渡さない・SDKなし・Lambdaを経由しない)をすべて満たします。
選択肢BのCognito Identity Poolは一時的なIAM認証情報を発行する有効な方法ですが、クライアントでAWS SDKを使う必要があるため「SDKを使わない」という要件②を満たしません。
選択肢CのパブリックS3バケットはセキュリティ上のリスクが非常に高く、認証されていない任意のユーザーが無制限にファイルをアップロードできてしまいます。
選択肢DのAPI GatewayプロキシはAPI Gatewayに10MBのリクエストペイロード制限があるため50MBのファイルアップロードに対応できず、またバックエンド経由となるため要件③にも反します。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →