Amazon Cognito で実装するユーザー認証 - User Pool と Identity Pool の設計
Cognito User Pool によるユーザー認証、Identity Pool による AWS リソースアクセス、ソーシャルログインの統合を解説します。
Cognito の概要
Cognito は Web・モバイルアプリケーションの認証・認可とユーザー管理を提供するサービスで、新規ユーザープールの既定である Essentials ティアには、アカウントまたは AWS organization ごとに月 10,000 MAU (月間アクティブユーザー) までの無料枠があります (公式料金ページ記載・2026 年 8 月時点)。無料枠はユーザープール単位ではないため、プールを分割しても増えません。適用対象は Lite と Essentials の 2 ティアで、上位の Plus には無料枠がありません。User Pool はユーザーディレクトリで、サインアップ・サインイン・MFA を管理します。Identity Pool は認証済みユーザーに一時的な AWS 認証情報を発行し、AWS リソースへの直接アクセスを可能にします。ソーシャルログイン (Google、Facebook、Apple、Amazon) と SAML/OIDC フェデレーションに対応しており、外部 IdP はマネジメントコンソールでのプロバイダー登録とアプリクライアントへの割り当てで追加できます。ただし属性のマッピング、スコープの調整、サインアウト時の挙動確認は個別に設計が必要です。
User Pool と Identity Pool の使い分け
User Pool は JWT トークン (ID トークン、アクセストークン、有効期間 5 分〜1 日で設定可能) を発行し、API Gateway のオーソライザーで検証します。Identity Pool は User Pool のトークンを受け取り、IAM ロールに基づく一時的な AWS 認証情報を返します。フロントエンドから S3 にファイルをアップロードする場合、Identity Pool で取得した認証情報で S3 SDK を直接呼び出します。Lambda トリガーの Pre Sign-up でメールドメインの制限、Post Confirmation でウェルカムメールの送信、Pre Token Generation でカスタムクレームの追加を実装できます。両者の使い分けの原則は明快で、バックエンド API の認証のみなら User Pool の JWT で十分、クライアントから直接 AWS リソース (S3、DynamoDB、AppSync) を呼び出す必要があれば Identity Pool を併用します。
脅威保護と managed login
Cognito の脅威保護 (threat protection) は、リスクレベル (デバイス、IP アドレス、ログイン履歴) に基づいて MFA の要求を動的に判断するリスクベースのアダプティブ認証を提供します。侵害された認証情報の検出、脅威プロファイルとユーザー活動のログや分析、そのエクスポートも含まれ、これらは機能プランの Plus でのみ利用できます (旧称は高度なセキュリティ機能 = advanced security features・公式料金ページ記載・2026 年 8 月時点)。通常のデバイスからのログインは MFA をスキップし、未知のデバイスや異常な IP からのアクセスには MFA を強制する、といった運用ができます。カスタム認証フローで Lambda トリガーを使い、CAPTCHA 検証やカスタム MFA を実装することも可能です。ログイン画面は managed login が現行の提供形態で、ビジュアルエディタによるブランディングの編集は Essentials と Plus、CSS によるカスタマイズは Lite を含む全プランで利用できます。従来の classic hosted UI も引き続き使えますが、ビジュアルエディタの対象は managed login のページです。ID トークンへのカスタムクレームの追加は Pre Token Generation トリガーで実装でき、アクセストークンのスコープとクレームを実行時にカスタマイズする機能は Essentials と Plus で利用できます。
設計のベストプラクティスと落とし穴
Cognito の導入時に陥りやすい落とし穴を 3 つ挙げます。第一に、User Pool は作成後に変更できない属性 (ユーザー名の形式、必須属性) があるため、設計段階でスキーマを慎重に決定します。後から「メールアドレスをユーザー名にする」へ変更する場合、User Pool の再作成とユーザーマイグレーションが必要になります。第二に、カスタムドメインの設定を忘れると、Cognito が発行するデフォルトの URL (amazoncognito.com) がフィッシング対策の観点でユーザーに不信感を与えます。独自ドメインを ACM 証明書と組み合わせて設定することを推奨します。第三に、Lambda トリガーの応答時間に注意します。Cognito は Lambda 関数を同期的に呼び出し、関数は 5 秒以内に応答する必要があります (応答を待たない Custom sender トリガーは例外です)。このタイムアウトは Cognito 側で 5 秒に固定されており、Lambda 関数側のタイムアウト設定を延ばしても変更できません (公式ドキュメント記載・2026 年 8 月時点)。Pre Token Generation で外部 API を呼び出す場合、レイテンシ超過でトークン発行が失敗し、ユーザーがログインできなくなります。外部呼び出しはキャッシュ層を挟むか、トリガーの外へ非同期処理として切り出し、トリガー内では 5 秒に確実に収まる処理だけを行う設計にします。
Auth0 / Firebase Authentication との比較
Cognito の競合として Auth0 と Firebase Authentication が挙げられます。Auth0 は管理画面の使いやすさとドキュメントの充実度で優れ、複雑な認証フロー (Organization ベースのマルチテナント、ステップアップ認証) のプリセットが豊富です。料金は各サービスともプラン構成とアドオンで変わるため、想定 MAU と必要な機能を先に決めて、それぞれの公式料金ページで見積もるのが確実です。Firebase Authentication は Google のエコシステム (Firestore、Cloud Functions) との統合が自然ですが、AWS 中心のアーキテクチャでは IAM ロールとの連携に追加実装が必要になります。Cognito は AWS サービスとのネイティブ統合 (API Gateway オーソライザー、Identity Pool による IAM ロールマッピング、AppSync との直接接続) が最大の強みで、AWS 中心のバックエンドを構築する場合に摩擦が最小です。認証画面を細かく作り込みたい場合は、managed login のビジュアルエディタ (Essentials と Plus) と CSS カスタマイズ (全プラン) で要件を満たせるかを先に確認し、満たせない場合は Amplify UI コンポーネントで自前の認証画面を構築する選択肢もあります。
Cognito の料金
(2026 年 8 月時点・バージニア北部 us-east-1 と東京 ap-northeast-1) Cognito の課金軸は 6 つです。ユーザープールの MAU (機能プラン別)、SAML 2.0 / OIDC フェデレーションユーザーの MAU、マシン間 (M2M) 認可のトークンリクエスト、API のリクエストレート引き上げ、マルチリージョンレプリケーション、そして旧来の高度なセキュリティ機能 (ASF) のアドオンです。Identity Pool の認証と一意識別子の発行は無料で、M2M のアプリクライアントの登録数自体にも課金はありません。 ユーザープールの機能プランは Lite・Essentials・Plus の 3 段構成で、新規ユーザープールの既定は Essentials です。単価は MAU 単位 (Price List の単位は CognitoUserPoolsMAU) で、Essentials が 0.015 USD/MAU、Plus が 0.020 USD/MAU、いずれも 2 リージョンで同額です。Lite は 4 段の段階制で、段境界は公式料金ページの段表と Price List の公開データに全段が明示されています。課金対象の最初の 90,000 MAU (無料枠 10,000 を含めた総 MAU 100,000 まで) が 0.0055 USD/MAU、次の 900,000 MAU (総 MAU 1,000,000 まで) が 0.0046 USD/MAU、次の 9,000,000 MAU (総 MAU 10,000,000 まで) が 0.00325 USD/MAU、それを超える分が 0.0025 USD/MAU です。SAML 2.0 / OIDC フェデレーションユーザーはプラン構成に関係なく 50 MAU まで無料で、超過分が 0.015 USD/MAU です。
| 観点 | Lite | Essentials (新規の既定) | Plus |
|---|---|---|---|
| 位置づけ | 2024 年 11 月 22 日以前に提供されていたユーザープール機能一式 (ASF を除く) | Lite の全機能 + managed login + パスワードレス (パスキー・メール・SMS) + アクセストークンのカスタマイズ + パスワード再利用の禁止 | Essentials の全機能 + 脅威保護 (アダプティブ認証・侵害された認証情報の検出・認証イベントログのエクスポート) |
| ログイン画面 | CSS カスタマイズのみ | ビジュアルエディタ + CSS カスタマイズ | ビジュアルエディタ + CSS カスタマイズ |
| MFA | 認証アプリと SMS のワンタイムコード | 左記 + メールのワンタイムコード | 左記 + リスクベースの適用 |
| 無料枠 (月・アカウントまたは organization ごと) | 10,000 MAU | 10,000 MAU | なし (全 MAU が課金対象) |
| 超過分の単価 (2 リージョン同額) | 0.0055 USD/MAU から段階的に低下 | 0.015 USD/MAU | 0.020 USD/MAU |
| マルチリージョンレプリケーション | 利用できない | アドオンで利用可 (0.0045 USD/MAU) | アドオンで利用可 |
アドオンの単位はそれぞれ異なります。M2M 認可は成功したトークンレスポンスごとの課金で、最初の 250,000 リクエストが 1 トークンリクエストあたり 0.00225 USD (単位は CognitoUserPools-M2MTokens)、次の 4,750,000 リクエスト (5,000,000 リクエストまで) が 0.0015 USD、5,000,000 リクエストを超える分が 0.001125 USD です。マルチリージョンレプリケーションを併用する場合は最初の段が 0.002925 USD です。API のリクエストレート引き上げは、既定クォータを超える増分 1 RPS あたりの月額課金で、API カテゴリごとに個別に課金されます (単位は CognitoUserPoolsRPSMo・最低期間 1 日)。月の全期間に適用する場合は増分 1 RPS あたり 20.00 USD、月の一部だけ適用する場合は増分 1 RPS あたり 45.00 USD を日数で日割りします。旧来の ASF アドオンは MAU 単位の 5 段の段階制で、最初の 50,000 MAU が 0.05 USD/MAU、次の 50,000 MAU が 0.035 USD/MAU、次の 900,000 MAU (1,000,000 MAU まで) が 0.02 USD/MAU、次の 9,000,000 MAU (10,000,000 MAU まで) が 0.015 USD/MAU、それを超える分が 0.01 USD/MAU です。ASF には無料枠がなく、10,000 MAU の無料枠を差し引かずに全 MAU が課金対象になる点が Essentials や Plus と異なります。 無料枠と例外は 5 点あります。第一に、直接サインインまたはソーシャル IdP 経由の 10,000 MAU 無料枠は Lite と Essentials のみで、Plus には無料枠がありません。AWS 無料利用枠の 12 ヶ月で失効せず、既存・新規のどちらの顧客にも無期限で適用されますが、AWS GovCloud (US) では適用されません。第二に、2024 年 11 月 22 日以前に作成された既存プールには最初の 50,000 MAU の無料枠が維持されます。第三に、ASF は新規には提供されず、すでに ASF を利用している顧客が従来価格のまま使い続けられるアドオンです (AWS の案内では Plus は ASF 比で最大 60% の節約・ASF は AWS GovCloud (US-West) では利用できません)。第四に、M2M のトークンリクエストには無料枠がありません。第五に、MFA・サインアップ・パスワード回復・電話番号の検証で送る SMS は Amazon SNS の料金、サインアップ・パスワード回復・メールアドレスの検証で送るメールは Amazon SES の料金が別にかかります。計算例としては、Essentials で 950,000 MAU なら (950,000 - 10,000) × 0.015 USD = 14,100 USD/月、同じ規模を Plus にすると無料枠がないため 950,000 × 0.020 USD = 19,000 USD/月です。MAU ベースの課金のため、登録済みだがログインしないユーザーはコストに影響しません。
まとめ
Cognito は User Pool でユーザー認証、Identity Pool で AWS リソースアクセスを提供するサービスです。ソーシャルログインと SAML/OIDC フェデレーションで外部 IdP と統合し、機能プランの Plus では脅威保護によってリスクベースの MFA を動的に適用できます。AWS サービスとのネイティブ統合が最大の強みで、User Pool のスキーマ設計を初期段階で慎重に行うことが、長期運用の鍵になります。
参考資料 (AWS 公式)
本ページの一次情報は AWS 公式サイトおよび公式ドキュメントです。最新の仕様 / 料金は次の公式ページで確認できます。
本ページと公式ドキュメントの記述が食い違う場合は、公式ドキュメントを正としてください。