Cognito

Amazon Cognito ユーザープールの作成と設定手順【初心者向けガイド】

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

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


Contents

スポンサードリンク

Amazon Cognito ユーザープールとは

本セクションでは、Cognito が提供する認証・認可の全体像と、本ハンズオンで実装する主要フローを解説します。

Cognito のユーザープールは「ユーザー属性の永続管理」と「OpenID Connect/OAuth 2.0 に基づくトークン発行」の両方を一元化できるマネージドサービスです。AWS が自動でスケーリング・高可用性を担保するため、独自実装に比べて運用コストが大幅に削減できます。また、高度なセキュリティ機能(MFA、リスクベース認証)や Lambda トリガーによる拡張性 が標準で利用できる点も重要です。

以下の手順を順に実施すれば、コンソール操作からコード化まで一貫した認証基盤が構築できます。

フェーズ 主な作業
① コンソール ユーザープール・アプリクライアントの手動作成(概要把握)
② CLI aws cognito-idp で同等設定をスクリプト化
③ IaC CloudFormation または Terraform による完全自動化
④ テスト Amplify/SDK を用いたサインアップ・サインインの検証

1. AWS Management Console でユーザープールを作成・設定する手順

この章では、コンソール UI を使った初期構築手順と、後からコード化しやすい設定項目をまとめます。

1‑1. ユーザープールの基本情報入力

コンソールの 「User Pools」 → 「Create user pool」 で以下を設定します。

  • プール名:プロジェクト名と環境が分かる myapp-prod-pool のように命名
  • タグ:公式ドキュメント(Tagging resources)で推奨されているキー例を使用。例: Project=MyApp, Env=Prod, Owner=team@example.com

ポイント
タグは Cost Allocation とリソース検索に必須です。全ての Cognito 関連リソース(UserPool、UserPoolClient、Lambda)へ同一タグを付与してください。

1‑2. 属性スキーマとカスタム属性

項目 設定例
標準属性 email(必須・自動検証)、phone_number(任意)
カスタム属性 custom:department (String)、custom:isAdmin (Boolean) などビジネス要件に合わせて追加

注意
カスタム属性はプレフィックス custom: が必須です。属性名は 1 〜 64 文字、英数字とアンダースコアのみ使用可能です。

1‑3. サインアップ/サインイン体験のカスタマイズ

メール・SMS 検証

User Pool → Message customizations → Verification messages でテンプレートを編集し、メールSMS の検証を有効化します。

ホスト型 UI(Hosted UI)

App client settings → Hosted UI をオンにすると、Cognito が提供するサインアップ/サインイン画面が自動生成されます。ロゴ URL やカラーテーマは同画面の UI customization で設定可能です。

1‑4. セキュリティポリシー

ポリシー 推奨設定
パスワード要件 最小長 12文字、大文字・小文字・数字・記号すべて必須
MFA TOTP(Google Authenticator 等) を推奨し、SMS はオプションにする
リスクベース認証 「Advanced security」→「Adaptive authentication」で、異常ログインや IP 変化時に MFA Challenge を要求

メトリクスの正確な名称
Cognito が CloudWatch に出力するリスク関連メトリクスは RiskDecision(例: BLOCK, MFA_CHALLENGE, NO_RISK) です。旧称の AuthRiskScore は存在しないため、公式ドキュメント(Monitoring Cognito with CloudWatch)を参照してください。

1‑5. アプリクライアントと OAuth2 フロー設定

基本情報

  • Client namemyapp-web-client(わかりやすく命名)
  • Generate secret:SPA やモバイルは オフ 推奨(シークレットが漏洩しやすいため)
OAuth2 フロー 説明 SPA での利用推奨
Authorization Code Grant (PKCE 対応) code を取得後サーバー側でトークンと交換。PKCE によりクライアントシークレット不要で安全性が向上。 必須(最新ベストプラクティス)
Implicit Grant アクセストークンを直接返す旧方式。XSS 攻撃リスクが高いため非推奨。 ×
Client Credentials Grant サーバー間認証に使用。ユーザーコンテキストは無い。 -

PKCE の設定
App client settings → Allowed OAuth FlowsAuthorization code grantProof Key for Code Exchange (PKCE) を有効化します。フロントエンド側では code_challenge_method=S256 を使用してください。

リダイレクト URI の登録

正確に入力し、ワイルドカードは不可です。誤った URI は認証エラーの原因になります。

1‑6. ドメイン設定と UI カスタマイズ

種類 手順
標準ドメイン Domain name タブで myapp.auth.ap-northeast-1.amazoncognito.com を入力
カスタムドメイン(任意) ACM にリージョン ap-northeast-1 用の証明書を発行 → 同タブで独自ドメイン auth.myapp.example.com を紐付け

CSS カスタマイズは Hosted UI → CSS customization へコードを書き込むだけで反映できます。


2. AWS CLI と IaC(CloudFormation / Terraform)での自動化

この章では、コンソール操作をすべてコードとして管理できるようにする方法を解説します。

2‑1. CLI でのユーザープール作成例

ポイント
--allowed-oauth-flowscode を指定し、PKCE が自動的に有効化されます(CLI では明示的なフラグは不要です)。

2‑2. CloudFormation テンプレート

以下は Cognito ユーザープール + Lambda トリガー の最小構成例です。2026 年時点の最新プロパティを使用しています。

テンプレートのポイント

  1. UserPoolAddOns.AdvancedSecurityModeENFORCED にすると、リスクベース認証が常に適用されます。
  2. AllowedOAuthFlowscode のみを指定し、PKCE が有効になることを明示しています。
  3. Lambda 関数はインラインで定義しているので、最小限のリポジトリでも動作します。

2‑3. Terraform モジュール例

公式モジュール terraform-aws-modules/cognito-user-pool/aws をベースに、必要な項目だけを上書きします。

ベストプラクティス
- terraform initterraform planterraform apply の順で実行し、状態は必ず S3 バックエンドに保存してください。
- モジュールのバージョンは定期的に更新し、AWS が提供する新機能(例: PKCE 強制)への追従を忘れないようにします。


3. Lambda トリガーと実装テスト

この章では、Cognito の拡張ポイントである Lambda トリガーの設定方法と、Amplify/SDK を用いたエンドツーエンドテスト手順を紹介します。

3‑1. IAM ロール作成(最小権限)

3‑2. Lambda 関数作成(Node.js)

同様に Post Confirmation 用の関数も作成し、index.handlerconsole.log 等を記述します。

3‑3. Cognito へトリガー紐付け

コンソールでも User Pool → Triggers タブから同様に設定できます。

3‑4. Amplify(JavaScript)での認証フロー検証

iOS (Swift) と Android (Kotlin) でも同様の手順でテストできます。公式サンプルは以下をご参照ください:

3‑5. 確認ポイント

項目 判定基準
メール検証コードが届くか OK:メール受信後 Auth.confirmSignUp が成功
Pre Sign‑up の制限が機能するか NG: 別ドメインでサインアップするとエラーメッセージが返る
Post Confirmation で CloudWatch Logs に出力されているか OKUser alice@example.com confirmed. がログに表示

4. 運用・監視ベストプラクティス

本章では、構築した Cognito 環境を長期的に安全・安定運用するための具体的な指針と自動化ポイントをまとめます。

4‑1. タグ戦略と命名規則

リソース 推奨タグ例
UserPool / UserPoolClient / Lambda Project=MyApp, Env=Prod, Owner=team@example.com
CloudWatch アラーム 同上に加えて AlertLevel=Critical など

命名規則<app>-<env>-cognito-<resource>(例: myapp-prod-cognito-pool)で、リソース一覧が一目で把握できるようにします。

4‑2. パスワードポリシーと MFA の定期見直し

項目 推奨頻度 アクション例
パスワード長・文字種 半年ごと MinimumLength を 12 → 14 に段階的に引き上げ
MFA 種類 四半期ごと SMS の利用率を測定し、80 % 以上が TOTP に移行したら SMS を無効化
リスクベース認証の閾値 毎月 CloudWatch RiskDecision の分布を確認し、ブロック率が高すぎないか検討

4‑3. ログ・メトリクス監視

  1. CloudWatch Logs
  2. Cognito コンソール → “General settings” → “Logging” で All events を有効化。
  3. 標準メトリクス(自動送信)
メトリクス 説明
SignInSuccess 正常サインイン数
SignInFailure 失敗したサインイン数
SignUpSuccess 正常サインアップ数
SignUpFailure サインアップエラー(例: カスタム属性バリデーション)
RiskDecision NO_RISK, MFA_CHALLENGE, BLOCK のいずれかを示す
  1. アラーム例

  1. Security Hub 連携
  2. CloudWatch アラームを SNS 経由で Security Hub に転送し、インシデント自動化(AWS Step Functions + Lambda)に活用できます。

4‑4. CI/CD パイプラインへの組み込み

ステップ 実装例
テンプレート検証 cfn-lint / terraform validate を GitHub Actions のジョブで実行
デプロイ aws cloudformation deploy または terraform apply -auto-approve をステージング → 本番の 2 段階デプロイで実施
テスト自動化 Amplify CLI の amplify auth status とカスタム E2E スクリプト(Cypress)でサインアップ/サインインを検証

次にやるべきこと

  1. コンソールで最小構成のユーザープールを作成し、タグ・ドメイン設定まで完了させます。
  2. 公式リポジトリ(https://github.com/aws-samples/amazon-cognito-user-pool)からサンプル CloudFormation テンプレートを取得し、PKCE が有効な Authorization Code Grant を必ず確認してください。
  3. 作成したスタックを GitHub Actions で自動デプロイ できるようにパイプラインを構築し、テストがすべて成功することを CI に組み込みます。

以上で、最新ベストプラクティス(PKCE、リスクベース認証の正確なメトリクス名、公式ドキュメント参照)に沿った Amazon Cognito ユーザープール の設計・実装・運用が完了します。質問や不明点があれば、AWS 公式サポートもしくは IAM/セキュリティ担当者へお問い合わせください。

スポンサードリンク

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


-Cognito