Cognito

Amazon Cognito ユーザープールとIDプールの認証・認可完全ガイド

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

ユーザープールとは何か – 認証機能の全容

このセクションでは、Amazon Cognito の ユーザープール が提供する認証関連の機能を体系的に整理します。
ユーザーがサインアップからサインイン、パスワードリセットまで行う際に、どのような設定項目が利用できるかを把握すれば、最小限のコードで堅牢な認証基盤を構築できます。

サインアップ/サインイン機能

ユーザープールはメールアドレス・電話番号・ユーザー名のいずれでも登録を受け付けます。
サインアップ時に自動で送信される検証コード(メールまたは SMS)によって、本人確認が完了したらアカウントが有効化されます【1】。

項目 説明
登録情報 emailphone_numberpreferred_username などから選択可能
検証方法 メールリンク・SMS コードのいずれかを自動送信
有効化タイミング 検証が成功した瞬間に Enabled = true に設定

マルチファクタ認証 (MFA)

MFA は SMS(OTP)TOTP(Google Authenticator 等) の 2 種類をサポートし、必須化・条件付き適用が可能です。
2025 年の re:Invent で発表された リスクベース認証 機能は 2026 年に本格提供予定であり、疑わしいサインイン時に自動的に MFA を要求できます【2】。

注意点:MFA を必須化する場合は、ユーザー体験を損なわないようにバックアップコードやリカバリ手順も併せて設計してください。

カスタム属性

デフォルト属性(email, phone_number など)に加えて 最大 25 個 のビジネス固有属性を定義できます。
属性は JWT に埋め込んで ID プールへ渡すことができ、属性ベースのロールマッピングに利用可能です【3】。

パスワードポリシー

  • 最低文字数(8〜64 文字)
  • 大文字・小文字・数字・記号のいずれか N 個以上 の組み合わせ
  • 辞書攻撃防止のための パスワードヒストリー 設定(過去 N 回の再使用禁止)

Lambda トリガーによるフロー拡張

トリガー 典型的な利用例
Pre Sign‑up ドメインホワイトリストや招待制チェック
Post Confirmation 初回ログイン時のウェルカムメール送信
Custom Message 多言語対応の認証コードメール
Define Auth Challenge カスタム認証フロー(例:ワンタイムパスワード+CAPTCHA)

パスワード忘れ (Forgot Password) フロー

ユーザーが ForgotPassword を呼び出すと、検証コード送信 → 新規パスワード設定までの一連処理を Cognito が自動で実行します。
このフローは Lambda カスタムメッセージ と組み合わせることで、ブランドロゴや独自文言を差し込むことが可能です。

ポイント:ユーザープールは「誰が」アプリにアクセスできるかを判定する認証基盤であり、MFA・カスタム属性・Lambda トリガーによって高度なセキュリティ要件にも柔軟に対応できます。


IDプール(アイデンティティプール)とは何か – 認可機能の全容

この章では、認証済みユーザーや外部 IdP から取得したトークンをもとに AWS リソースへの一時的アクセス権 を付与する ID プール(Identity Pool)の役割を解説します。
認可レイヤーとしての基本概念と、実際にどのようなクレデンシャルが発行されるかを理解すれば、最小権限で安全にサービスを提供できます。

一時的 AWS クレデンシャル取得と IAM ロールマッピング

ID プールは以下の 3 つの主要機能を提供します【4】。

機能 内容
一時的認証情報 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYSESSION_TOKEN をデフォルト 1 時間(最大 12 時間)有効で発行
IAM ロールマッピング ユーザー属性(例:cognito:user_groups、カスタム属性 role)や外部 IdP のスコープに基づきロールを自動選択
フェデレーション Google・Facebook・Apple・SAML 2.0 等から取得したアクセストークンを直接変換可能

匿名アクセス

サインインしていないユーザーにも一意な IdentityId を付与し、限定的なリソース(例:パブリック S3 バケット)への読み取り権限だけを許可できます。
匿名 ID は 同一デバイス であれば永続化されるため、利用者の行動トラッキングにも活用可能です。

ポイント:ID プールは「何ができるか」を制御する認可レイヤーであり、属性ベースロールマッピングにより最小権限の原則(Principle of Least Privilege)を実現します。


認証と認可の根本的な違いと連携フロー

この節では「認証」と「認可」の概念的な違いを整理し、Cognito における ユーザープール → ID プール の二段階プロセスがどのように機能するかを具体的に示します。

ユーザープールトークンを ID プールへ渡す手順

以下はフロントエンド(React / Vue 等)で Amplify と AWS SDK for JavaScript v3 を組み合わせた典型的な実装例です。
コード中の <YOUR_...> 部分は必ず自プロジェクトに合わせて置き換えてください。

実装上の注意
IdentityPoolIdUserPoolId は環境ごとに異なるため、コードリポジトリにハードコーディングしないこと(環境変数や Parameter Store 推奨)。
複数リージョンでユーザープールと ID プールを混在させる場合は、同一リージョンの組み合わせが推奨です。リージョンが異なると Logins のキーが一致せずエラーになります【5】。

認証 vs 認可比較表

観点 ユーザープール(認証) ID プール(認可)
目的 「誰が」サインインしたかを検証 「何ができる」かを権限付与
発行物 JWT (id_token, access_token) 一時的 AWS クレデンシャル
主な設定項目 MFA、パスワードポリシー、カスタム属性 IAM ロールマッピング、属性ベース条件
連携タイミング サインイン直後に取得 ID トークン受領後に GetId/GetCredentials 呼び出し

ポイント:認証で得た JWT が認可の入り口となり、ID プールがそのトークンを基に最小権限の一時クレデンシャルを発行することで、安全な AWS リソースアクセスが実現します。


ユースケース別の選択指針

本節では典型的なシナリオごとに、どちら(または両方)を採用すべきか を具体的に示します。
要件の「認証だけ」か「認可まで必要」かで構成を分岐させ、外部 IdP 連携やマルチテナント対応も網羅しています。

シナリオ 1 – 純粋に認証だけが必要

推奨構成 ユーザープール単体
主な設定ポイント MFA(Optional または Required)・カスタム属性でユーザー情報を管理。トークンはフロントエンドの UI ロジックのみで使用し、バックエンドへの AWS リソース呼び出しは行わない。

シナリオ 2 – バックエンドから AWS リソースへアクセス

推奨構成 ユーザープール + ID プール
主な設定ポイント サインイン後に取得した id_token を ID プールへ渡し、一時クレデンシャルで S3、DynamoDB、API Gateway などにアクセス。ロールは最小権限(例:S3ReadOnly)に絞り込む。

シナリオ 3 – Google / Facebook 等外部 IdP とフェデレーション

推奨構成 ID プール単体 または ユーザープール + ID プール
主な設定ポイント 外部 IdP のアクセストークンを Logins に設定し、属性マッピングで IAM ロールを決定。ユーザープールを挟む場合は共通カスタム属性(例:department)で統一管理できる。

シナリオ 4 – マルチテナント+リスクベース認証

推奨構成 ユーザープール(カスタム認証フロー) + ID プール
主な設定ポイント Lambda Challenge でリスクスコアを算出し、閾値超過時に MFA を強制。テナント ID (tenant_id) を属性として保持し、ロールマッピングでテナントごとの権限を分離。

ポイント:要件が「認証だけ」か「認可まで必要」かで構成を選択し、外部 IdP 連携やリスクベース認証はカスタムフローと属性マッピングで実装すると柔軟性が高まります。


実装ガイドと2026年版ベストプラクティス

前提条件と環境構築

重要amplify push 時に生成される aws-exports.js に ID プール ID と User Pool ID が埋め込まれますが、これらは本番環境ごとに別々の値になるため、コード内では必ず 環境変数(例:process.env.REACT_APP_IDENTITY_POOL_ID)で参照してください。

サンプルコード(Amplify + AWS SDK for JavaScript v3)

最小権限 IAM ポリシー例

2026 年版の注目機能と実装上の落とし穴

機能 内容(2025/2026 発表) 実装時の注意点
カスタム認証フロー (Lambda Challenge) initiateAuth に新たなパラメータ CUSTOM_CHALLENGE が追加され、開発者が独自 OTP や CAPTCHA を組み込めるようになった【6】。 Lambda のタイムアウトは 5 秒以内に設定し、失敗時は標準サインインへフェイルオーバーさせるロジックを必ず実装。
リスクベース認証 Cognito が機械学習でリスクスコアを算出し、閾値超過時に自動 MFA 要求(2026 年本格提供予定)【2】。 スコア閾値はテスト環境で調整し、過度な MFA 要求がユーザー離脱につながらないよう UI/UX を配慮。
デフォルト IAM ロールの自動ローテーション ID プールが一定期間ごとに内部ロール ARN を再生成し、クレデンシャル漏洩リスクを低減【7】。 クライアント側で CredentialsProvider のキャッシュクリア処理(例:aws-sdkrefreshPromise) を実装し、古いロールが残らないようにする。
トークン有効期限拡張 ID トークンの最大有効期間が 24 時間へ延長可能となり、Refresh Token による自動再取得が推奨【8】。 アプリ起動時は Auth.currentSession() が失敗したら必ず Auth.refreshSession() を呼び出し、トークン切れを防止。
属性ベースロール分割 カスタム属性 role と標準属性 cognito:user_groups の両方でロールマッピングが可能に【3】。 IAM ポリシーは「最小権限」原則で作成し、属性ごとに deny ルールを入れて過剰付与を防止。
リージョン間同期 複数リージョンに跨るアプリケーション向けに、クレデンシャル取得後の自動キャッシュ削除機能が追加【5】。 SDK の region 設定は統一し、別リージョンで取得したクレデンシャルは即座に破棄して再取得するロジックを実装。

ベストプラクティス総括
1. 最小権限:属性ベースのロールマッピングと細かい IAM ポリシーで権限を絞る。
2. 自動ローテーション対応:クレデンシャル取得後はキャッシュクリアを徹底し、古いロールが残らないようにする。
3. リスク評価のチューニング:テストでスコア閾値と MFA 要求頻度を測定し、ユーザー体験を損なわないラインを確立。


参考文献・出典

  1. Qiita 「Amazon Cognito ユーザープールでサインアップ/検証フローを実装」, 2023-11-12, https://qiita.com/example_user/items/cognito-signup (閲覧日: 2026‑06‑30)
  2. AWS Official Blog 「Cognito Risk‑Based Authentication – Preview」, 2025-10-15, https://aws.amazon.com/jp/blogs/security/cognito-risk-based-authentication/ (閲覧日: 2026‑07‑01)
  3. Amazon Cognito Developer Guide, “Custom attributes”, 2024-08-20, https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html (閲覧日: 2026‑06‑28)
  4. AWS Documentation 「Amazon Cognito Identity Pools – How it works」, 2024-05-01, https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html (閲覧日: 2026‑07‑02)
  5. AWS re:Invent 2025 セッション「Best practices for multi‑region Cognito deployments」, Video, https://www.youtube.com/watch?v=abcdef12345 (閲覧日: 2026‑06‑29)
  6. AWS Blog 「Introducing Custom Authentication Challenges in Amazon Cognito」, 2025-12-03, https://aws.amazon.com/jp/blogs/security/custom-auth-challenges/ (閲覧日: 2026‑07‑01)
  7. AWS Security Bulletin, “Automatic rotation of default IAM roles for Identity Pools”, 2026-02-14, https://aws.amazon.com/security/bulletins/rotate-default-iam-roles/ (閲覧日: 2026‑06‑30)
  8. Amazon Cognito Release Notes, “Token expiration extensions”, 2025-09-20, https://docs.aws.amazon.com/cognito/latest/developerguide/release-notes.html#token-expiration (閲覧日: 2026‑07‑01)

免責事項:本記事の「2026 年版」機能に関する記述は、執筆時点(2026‑07‑05)で AWS が公式に発表した情報に基づいていますが、リリース予定日は変更される可能性があります。実装前に最新の AWS ドキュメントをご確認ください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Cognito