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

あなたはモバイルアプリを開発しています。ユーザーはGoogleアカウントでサインインし、認証後に自分専用のS3プレフィックス(例:s3://my-bucket/users/{userID}/)に直接アクセスできる必要があります。IAMユーザーをアプリ利用者ごとに発行することは禁止されています。この要件を最も適切に満たすAWSアーキテクチャはどれですか?

A
Cognito User PoolsのJWTトークンをS3バケットポリシーのConditionキーで直接検証し、バケットポリシーベースのユーザー単位アクセス制御を実現する
S3バケットポリシーはIAM認証情報ベースで評価され、Cognito User PoolsのJWTトークンをConditionキーで直接検証する仕組みが存在しません。実現不可能です。
B
Cognito User PoolsでGoogleサインインを構成し、Cognito Identity Poolsと連携してSTSの一時認証情報を取得、IAMポリシーのCognito sub変数でユーザー専用プレフィックスへのアクセスを制限する
✓ 正解
Cognito User Poolsで認証されたユーザーにSTSの一時認証情報を払い出し、IAMポリシーの${cognito-identity.amazonaws.com:sub}変数でユーザーID単位のアクセス制御を実現できます。
C
API GatewayにLambdaオーソライザーを設置してGoogleのIDトークンを検証し、認証済みユーザーのリクエストのみをLambda関数経由でS3に転送する
Googleトークン検証はできますが、ユーザーがS3に直接アクセスできず、Lambda経由に限定されます。要件の「直接アクセス」を満たしません。
D
Cognito User Poolsのグループ機能でユーザーをグループに所属させ、グループごとのIAMロールとS3バケットポリシーを組み合わせてアクセスを制御する
グループ単位のIAMロール割り当ては可能ですが、ユーザーID単位でS3プレフィックスを細粒度に分離する制御には対応しておらず、管理が非現実的です。

解説

選択肢BのCognito User Poolsはユーザー認証・管理とソーシャルIdPフェデレーションを担当し、JWTトークンを発行します。AWSリソースへの直接アクセスにはIAM認証情報が必要なため、Cognito Identity Pools(フェデレーテッドアイデンティティ)がUser Poolsで認証されたユーザーにSTSの一時認証情報を払い出します。IAMポリシーのConditionで${cognito-identity.amazonaws.com:sub}変数を使うことでユーザーID単位のS3アクセス制御が実現できます。 選択肢AのS3バケットポリシーはIAM認証情報(SigV4署名)ベースの評価であり、Cognito User PoolsのJWTトークンをConditionキーで直接検証する仕組みは存在しないため実現できません。 選択肢CのAPI Gateway+Lambdaオーソライザー経由のアプローチはGoogleトークン検証には機能しますが、ユーザーがS3に直接アクセスする要件を満たさず、Lambda側で追加のアクセス制御実装が必要になり複雑さが増します。 選択肢DのCognitoグループはグループ単位のIAMロール割り当てには有効ですが、ユーザーID単位でS3プレフィックスを分離する細粒度の制御には対応しておらず、ユーザー数分のグループとバケットポリシー管理が必要になり非現実的です。

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

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

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