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

ソーシャルアプリがAmazon Cognito User Poolsで認証を行っています。DynamoDBテーブル「user-profiles」のパーティションキーはuserIdで、各ユーザーは自分のデータのみ読み書きできる必要があります。 クライアントがDynamoDBに直接アクセスする設計で、行レベルの最小権限を実現する組み合わせはどれですか?

A
Cognito Identity Poolを使用し、認証済みIAMロールのポリシーにdynamodb:LeadingKeys条件とcognito-identity.amazonaws.com:sub変数を指定する
✓ 正解
Cognito Identity Poolが発行するIAM一時認証情報のポリシーでdynamodb:LeadingKeys条件を使い、cognito-identity.amazonaws.com:sub変数でパーティションキーをユーザー自身のIDに限定できます。
B
Cognito User Poolのカスタム属性にuserIdを格納し、API GatewayとLambdaを経由してuserIdを検証してからDynamoDBへ書き込む
API GatewayとLambdaを経由する方法は有効なアーキテクチャですが、設問の「クライアントがDynamoDBに直接アクセス」という前提条件に合わず、設計変更が必要です。
C
DynamoDBのテーブルリソースポリシーにCognito User Pool IDを直接指定し、User Pool単位でのアクセス制御を設定する
DynamoDBリソースポリシーはUser Pool単位のアクセス制御はできますが、パーティションキーレベルの行単位アクセス制御(ユーザーごとの分離)には対応していません。
D
Cognito User Poolのグループ機能でユーザーを個別グループに割り当て、グループごとに異なるIAMロールをマッピングする
Cognitoグループはロール単位の権限制御に使いますが、ユーザーごとに個別グループを作成するのは管理が非現実的です。行レベルのアクセス制御にはLeadingKeys条件が適切です。

解説

Amazon Cognito Identity Poolは認証済みユーザーにAWSの一時的なIAM認証情報を発行します。このIAMロールのポリシーにdynamodb:LeadingKeys条件を使用し、条件値に${cognito-identity.amazonaws.com:sub}(Cognito Identity ID)を指定することで、各ユーザーが自分のuserIdに一致するパーティションキーの行のみ操作できるように制限できます。これがDynamoDB細粒度アクセス制御(Fine-Grained Access Control)のAWSベストプラクティスです。 選択肢BのAPI GatewayとLambdaを経由する方法は有効ですが、設問では「クライアントがDynamoDBに直接アクセスする設計」が前提であり、アーキテクチャを変更する選択肢は不適切です。 選択肢CのDynamoDBテーブルリソースポリシーはUser Pool単位の制御はできますが、個々のuserIdに基づく行レベルの制御には対応していません。 選択肢DのCognitoグループはロールマッピングには使えますが、ユーザーごとに別グループを作成することは管理が非現実的であり、行レベルのアクセス制御には適していません。

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

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

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