そもそもCognitoってUser PoolとIdentity Poolがあるけど、それぞれどんな役割なのかよく理解できてませんでした。
なので、備忘録も兼ねて上記の違いについて記載します。
ちなみに、本文章はAmazon Q Developer for IDEを利用して作成しています。
また、AWS公式ドキュメントを参照するようにMCPサーバを設定してます。
CognitoにおけるUser PoolとIdentity Poolの違い
User Pool(ユーザープール)
役割
ユーザー認証(Authentication)
特徴
- ユーザーディレクトリとして機能し、ユーザーの登録・サインイン・認証を管理
- JWTトークン(ID token、Access token)を発行
- アプリやAPIへのユーザー認証を提供
- サードパーティIdP(Google、Facebook、SAML、OIDCなど)との連携が可能
- MFA、パスワードポリシー、カスタム認証フローなどのセキュリティ機能を提供
- 単独で使用可能 - Identity Poolとの統合は必須ではない
使用例
ユーザーがアプリにログインし、そのユーザー情報を管理したい場合
Identity Pool(アイデンティティプール)
役割
AWSリソースへのアクセス認可(Authorization)
特徴
- 一時的なAWS認証情報を発行
- 認証済みユーザーまたは匿名ユーザーにAWSリソースへのアクセス権限を付与
- IAMロールとポリシーを使用してアクセス制御
- User Poolのトークンを含む様々なIdPからのトークンを受け入れ可能
- ゲストアクセス(未認証ユーザー)もサポート
- 単独で使用可能 - User Poolとの統合は必須ではない
使用例
認証されたユーザーがS3バケットやDynamoDBに直接アクセスする必要がある場合
連携して使用する場合の流れ
- ユーザーがUser Poolでサインイン → OAuth 2.0トークンを取得
- アプリがUser PoolのトークンをIdentity Poolに渡す
- Identity PoolがAWS STSを通じて一時的なAWS認証情報を発行
- ユーザーがその認証情報でS3、DynamoDBなどのAWSサービスにアクセス
比較表
| 項目 | User Pool | Identity Pool |
|---|---|---|
| 主な目的 | 認証(Authentication) | 認可(Authorization) |
| 発行するもの | JWTトークン | AWS一時認証情報 |
| 対象 | アプリ・API | AWSリソース |
| 独立使用 | 可能 | 可能 |