Amazon Cognito で実装するユーザー認証 - User Pool と Identity Pool の設計

Cognito User Pool によるユーザー認証、Identity Pool による AWS リソースアクセス、ソーシャルログインの統合を解説します。

Cognito の概要

Cognito は Web・モバイルアプリケーションの認証・認可とユーザー管理を提供するサービスで、最初の 50,000 MAU (月間アクティブユーザー) まで無料です。User Pool はユーザーディレクトリで、サインアップ・サインイン・ MFA を管理します。Identity Pool は認証済みユーザーに一時的な AWS 認証情報を発行し、AWS リソースへの直接アクセスを可能にします。

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 でカスタムクレームの追加を実装できます。

高度な認証機能

Cognito の高度なセキュリティ機能はアダプティブ認証を提供し、リスクレベル (デバイス、 IP アドレス、ログイン履歴) に基づいて MFA の要求を動的に判断します。通常のデバイスからのログインは MFA をスキップし、未知のデバイスや異常な IP からのアクセスには MFA を強制します。カスタム認証フローで Lambda トリガーを使い、 CAPTCHA 検証やカスタム MFA を実装できます。ユーザープールのホスティング UI はカスタマイズ可能なログインページを提供し、独自のブランディングを適用できます。トークンのカスタマイズで、 ID トークンにカスタムクレームを追加し、アプリケーション側の認可判断に活用します。 Cognito の理解をさらに深めたい場合はAmazon の専門書も活用できます。

Cognito の料金

Cognito の料金は月間アクティブユーザー (MAU) 数で課金されます。最初の 10,000 MAU は無料で、50,000 MAU までは 1 MAU あたり約 0.0055 ドルです。SAML/OIDC フェデレーションユーザーは 1 MAU あたり約 0.015 ドルです。高度なセキュリティ機能 (アダプティブ認証、侵害された認証情報の検出) は追加料金が発生し、1 MAU あたり約 0.050 ドルです。Identity Pool の AWS 認証情報の発行は無料です。MAU ベースの課金のため、登録済みだがログインしないユーザーはコストに影響しません。

まとめ

Cognito は User Pool でユーザー認証、Identity Pool で AWS リソースアクセスを提供するサービスです。ソーシャルログインと SAML/OIDC フェデレーションで外部 IdP と統合し、アダプティブ認証でリスクベースの MFA を動的に適用します。最初の 10,000 MAU が無料で、スタートアップから大規模アプリケーションまで対応します。