Cognito(IDプールと最小権限の一時認証情報)難易度 標準無料
モバイルゲームアプリで、匿名ユーザー(未サインイン)にはランキング閲覧用に読み取り専用の限定権限を、サインイン済みユーザーには自分のセーブデータをS3へ書き込む権限を、それぞれ最小権限で一時的なAWS認証情報として付与したい。バックエンドサーバーを介さずモバイルSDKから直接S3へアクセスさせたい場合、最も適切な設計を選べ。(単一選択)
- ACognitoIDプールで未認証ロールと認証済みロールを別々に設定する。未認証ロールにはランキング閲覧用の読み取り専用権限のみ、認証済みロールには自分のCognito IDプレフィックス配下だけ読み書きできるポリシー変数付きの権限を付与する
- BS3へのアクセスはすべてバックエンドAPIサーバーを経由させ、モバイルアプリはS3の認証情報を一切扱わないようにする
- CCognitoIDプールに認証済みロールのみを1つ設定し、匿名ユーザーにも同じロールの認証情報を発行して運用を単純化する
- D全ユーザー(匿名含む)に対して
s3:*を許可する単一のIAMロールをIDプールにアタッチし、アプリ側のロジックでアクセス範囲を制御する
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
CognitoIDプールは「認証済み(authenticated)」と「未認証(unauthenticated)」の2種類のロールを個別に設定できるのが特長である。
- 未認証ロール:匿名ユーザー向けにアタッチするIAMロールで、ランキング読み取り専用など限定的な権限だけを持たせる。
- 認証済みロール:サインイン済みユーザー向けにアタッチするIAMロールで、
${cognito-identity.amazonaws.com:sub}のようなポリシー変数を使い、 自分のCognito IDに対応するプレフィックス配下のオブジェクトにだけ読み書きを許可するなど、ユーザーごとにスコープを絞れる。 - いずれもSTSを介して発行される一時的なAWS認証情報であり、モバイルSDKはこれを使って直接S3を呼び出せる(バックエンドの都度プロキシは不要)。
- B実現不可能ではないが、設問は「バックエンドサーバーを介さず直接アクセスさせたい」という要件を明示しており、これに反する設計。
- C匿名ユーザーとサインイン済みユーザーの権限が同一になり、匿名ユーザーがセーブデータ書き込み権限を持ってしまうなど最小権限に反する。
- Dアプリ側のロジックはクライアント側で改ざん可能であり信頼境界にならない。AWS側(IAMポリシー)で権限を絞ることが最小権限の実現に必須。
ひっかけ: 「1つのIAMロールで匿名・サインイン済み両方をまとめて扱う」という発想(C・D)は最小権限に反する。
IDプールは未認証ロールと認証済みロールを別々に設定できることが前提であり、権限を分離してこそ最小権限が成立する。
公式ドキュメント・関連Amazon Cognito Developer Guide ― Identity pools (federated identities) external identity providers↗Amazon Cognito Developer Guide ― Role-based access control↗
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)