モバイルアプリのユーザーが Google アカウントでログインし、そのユーザー専用の S3 プレフィックス(例:user-data/{userId}/)にのみアクセスできるようにしたいと考えています。AWS の認証・認可の仕組みを使って最小権限の原則を守りながら実装するとき、最も適切なアーキテクチャはどれですか?
正解: Amazon Cognito ID プール(フェデレーテッドアイデンティティ)を使って Google 認証後に STS から一時的な AWS 認証情報を取得し、その認証情報で S3 にアクセスする Cognito ID プール(フェデレーテッドアイデンティティ)は、Google などの外部 IdP(Identity Provider)で認証されたユーザーに対して、STS を通じて一時的な IAM 認証情報を払い出します。IAM ロールポリシーの条件キー「cognito-identity.amazonaws.com:sub」を使えば、各ユーザーが自分の S3 プレフィックスのみにアクセスできる最小権限を実現できます。 選択肢Aは、Lambda 内に IAM ユーザーのアクセスキーを保持する形となり、キー漏洩リスクが高く最小権限の原則に反します。 選択肢Bは、S3 バケットポリシーが Cognito ユーザープールの JWT を直接検証する仕組みを持たないため機能しません。 選択肢Dは、API Gateway のリソースポリシーが OAuth トークンをもとに S3 へのアクセスを直接許可する機能を持たず、AWS 標準の認可フローとして成立しません。