あなたはモバイルアプリを開発しています。ユーザーはGoogleアカウントでサインインし、認証後に自分専用のS3プレフィックス(例:s3://my-bucket/users/{userID}/)に直接アクセスできる必要があります。IAMユーザーをアプリ利用者ごとに発行することは禁止されています。この要件を最も適切に満たすAWSアーキテクチャはどれですか?
選択肢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プレフィックスを分離する細粒度の制御には対応しておらず、ユーザー数分のグループとバケットポリシー管理が必要になり非現実的です。