モバイルゲームアプリを開発しています。以下の要件があります: ①ゲストユーザー(未ログイン)はS3バケット内のleaderboard/プレフィックスのオブジェクトを読み取りのみ可能、 ②ログイン済みユーザーは自分のユーザーIDに対応するS3プレフィックス(例:userdata/<ユーザーID>/)のオブジェクトのみ読み書き可能。長期的なAWS認証情報をクライアントアプリに埋め込まずに最小限のインフラで実装する最も適切な方法はどれですか?
Amazon Cognito IDプール(フェデレーテッドアイデンティティ)は、認証済み・未認証の両方のモバイルユーザーに一時的なAWS認証情報(STSトークン)を直接発行できます。未認証ロールには制限されたポリシー(leaderboard/読み取りのみ)を設定し、認証済みロールのIAMポリシーではポリシー変数${cognito-identity.amazonaws.com:sub}を使用することで、各ユーザーが自分のCognito Identity IDに対応するS3プレフィックスのみに動的にアクセスを制限できます。長期クレデンシャル不要でセキュアに実装できます。 選択肢AのCognitoユーザープール単体ではAWSリソースへの一時認証情報を直接発行できません(IDプールとの組み合わせが必要)。またLambda経由の署名付きURL方式はインフラが増え、ユーザーごとのプレフィックス分離実装も複雑になります。 選択肢CのIAM Identity Centerはエンタープライズ向けSSOサービスであり、コンシューマー向けモバイルアプリの数百万規模のエンドユーザー管理には設計されていません。 選択肢DはIPアドレスベースの制御であり、モバイルユーザーのIPは動的に変化するため実用的でなく、ユーザーごとのプレフィックス分離も実現できません。