ソーシャルアプリがAmazon Cognito User Poolsで認証を行っています。DynamoDBテーブル「user-profiles」のパーティションキーはuserIdで、各ユーザーは自分のデータのみ読み書きできる必要があります。 クライアントがDynamoDBに直接アクセスする設計で、行レベルの最小権限を実現する組み合わせはどれですか?
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グループはロールマッピングには使えますが、ユーザーごとに別グループを作成することは管理が非現実的であり、行レベルのアクセス制御には適していません。