無限ノック › DVA 練習問題一覧 › 問題
DVAセキュリティ

モバイルアプリでユーザーがCognito User Poolsで認証した後、認証済みユーザーにS3バケットへの直接アクセス権を付与したいと考えています。各ユーザーは自分専用のS3プレフィックス(例:user-data/{identity-id}/)のみにアクセスできるようにする必要があります。最も適切なアーキテクチャはどれですか?

A
Lambda関数を経由してS3にアクセスさせ、サーバーサイドでユーザーIDを検証してプレフィックスごとのアクセス制御を行う
Lambda経由の方法はリクエストごとにサーバーサイド処理が必要で実装が複雑化します。IAMによる直接アクセス制御と比べてスケーラビリティが低下し、Lambdaの実行コストと管理オーバーヘッドも増加します。
B
Cognito Identity Pools を使い、IAMロールポリシーの Resource に ${cognito-identity.amazonaws.com:sub} 変数を使ったプレフィックス制限を設定する
✓ 正解
Cognito Identity Poolsは認証済みユーザーに一時的なAWS認証情報(STS経由)を付与します。IAMポリシーの${cognito-identity.amazonaws.com:sub}変数によりユーザーごとのS3プレフィックスへのアクセスをIAMレベルで制御でき、スケーラブルで安全な設計を実現できます。
C
S3バケットポリシーにCognito User PoolのユーザーIDを直接リストアップして各ユーザーのアクセス可能なプレフィックスを制御する
ユーザーIDをS3バケットポリシーに直接列挙する方法はユーザーの追加・削除のたびにポリシー更新が必要で運用負荷が高く、大量ユーザー環境ではポリシーサイズの上限に達するリスクもあります。
D
API Gatewayで署名付きURLを生成してS3へのアクセスを仲介し、サーバーサイドでユーザーのアクセス範囲を制御する
API Gateway経由で署名付きURLを発行する方法はサーバーサイドロジックが必要になります。IAMレベルでユーザーごとのプレフィックス制限を直接強制できず、アクセス制御の厳密性が低下するリスクがあります。

解説

Cognito Identity Poolsは、User Poolsで認証されたユーザーに一時的なAWS認証情報(STS経由)を付与します。IAMロールポリシーのResource句に「arn:aws:s3:::bucket/${cognito-identity.amazonaws.com:sub}/*」を設定することで、各ユーザーが自分のidentity-idに対応するプレフィックスにのみアクセスできます。User Poolsは認証(誰であるか)を担当し、Identity PoolsはAWSリソースへの認可(何ができるか)を担当するという役割分担が重要です。 選択肢A の Lambda 関数経由はリクエストごとにサーバーサイド処理が必要で複雑性が増し、IAMによる直接アクセス制御と比べてスケーラビリティが低下します。 選択肢C の S3 バケットポリシー直接リストアップはユーザーごとにS3バケットポリシーを更新する必要があり非現実的です。 選択肢D の API Gateway 署名付きURL はサーバーサイドロジックが必要で、ユーザーごとのプレフィックス制限をIAMレベルで直接強制できません。

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

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

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