モバイルアプリがAmazon Cognito User Poolsで認証を行っています。認証済みユーザーが一時的なAWS認証情報を取得してAmazon DynamoDBテーブルに直接アクセスできるようにしたいと考えています。最も適切な実装方法はどれですか?
正解: Cognito Identity Poolsを設定しUser Poolsをプロバイダーとして追加する。認証後に取得したIDトークンをGetIdおよびGetCredentialsForIdentityに渡し、STSから一時的なIAM認証情報を取得してDynamoDBにアクセスする。 Cognito Identity Pools(旧称:Federated Identities)はCognito User Poolsと連携し、認証済みユーザーに一時的なIAM認証情報(STS: Security Token Service経由)を払い出す仕組みです。User Poolsで取得したIDトークンをIdentity Poolsに渡すことで、事前に定義したIAMロールにスコープされた認証情報が発行されます。DynamoDB条件式でcognito-identity.amazonaws.com:subキーを使うことでユーザーごとのデータアクセス制御も可能です。 選択肢Aは Cognito User PoolのJWTトークンをDynamoDB APIリクエストのAuthorizationヘッダーに含めるのはDynamoDBネイティブ非対応です。 選択肢Cは IAMユーザー認証情報をアプリに埋め込むことは漏洩リスクが高く厳禁です。 選択肢Dは DynamoDB操作をすべてLambda経由でプロキシする方式は可能ですが、クライアント直接アクセスの要件に合致しません。