Amazon Cognito
Web やモバイルアプリケーションにユーザー認証・認可機能を追加するフルマネージドサービスで、ソーシャルログインや SAML 連携にも対応する
概要
Amazon Cognito は、アプリケーションにユーザーのサインアップ、サインイン、アクセス制御の機能を追加するためのフルマネージドサービスです。ユーザープールはユーザーディレクトリとして機能し、メールアドレスやパスワードによる認証、MFA、パスワードポリシーの設定、カスタム認証フローの実装が可能です。Google、Facebook、Apple、Amazon などのソーシャル ID プロバイダーや、SAML 2.0、OpenID Connect に対応した企業の ID プロバイダーとの連携もサポートします。ID プールは認証済みユーザーに一時的な AWS 認証情報を付与し、S3 や DynamoDB などの AWS リソースへの直接アクセスを可能にします。月間アクティブユーザー (MAU) 50,000 人までの無料枠があり、小規模なアプリケーションでは実質無料で利用できます。
ユーザープールと ID プールの役割分離
Cognito の設計を理解するには、ユーザープール (認証) と ID プール (認可) の役割を明確に区別することが出発点です。ユーザープールはユーザーディレクトリとして機能し、サインアップ、サインイン、パスワードリセット、MFA、メール/SMS 検証を担当します。認証に成功すると JWT (JSON Web Token) が発行され、API Gateway や ALB でのリクエスト認証に使用できます。ID プールは認証済みユーザーに対して IAM ロールに基づく一時的な AWS 認証情報を付与し、フロントエンドアプリケーションから S3 バケットへの直接アップロードや DynamoDB テーブルへのアクセスを可能にします。Azure AD B2C は単一サービスとしてユーザーフローとカスタムポリシーで認証フローを定義する設計ですが、Cognito はこの 2 つのコンポーネントを組み合わせることで、認証からリソースアクセス制御までを段階的に構成できます。
Lambda トリガーによる認証フローのカスタマイズ
Cognito の認証フローは Lambda トリガーを使って各段階をカスタマイズできます。Pre Sign-up トリガーではサインアップ前のバリデーション (特定ドメインのメールアドレスのみ許可するなど) を実行し、Post Confirmation トリガーでは登録完了後に DynamoDB へのユーザーレコード作成や Welcome メールの送信を行えます。Pre Token Generation トリガーを使えば、JWT に独自のクレーム (ユーザーの所属組織やロールなど) を追加でき、API 側でのきめ細かなアクセス制御に活用できます。ソーシャルログイン (Google、Apple、Facebook) や SAML/OIDC フェデレーションとの連携も標準でサポートされており、企業の既存 ID プロバイダーとの統合がスムーズです。ユーザー認証の専門書 (Amazon) では、Lambda トリガーの実装パターンが詳しく解説されています。
セキュリティ機能と不正アクセス対策
Cognito の Advanced Security Features を有効にすると、不正なサインイン試行の検出、リスクベースの適応型認証、侵害された認証情報の検出が利用可能になります。適応型認証は、ユーザーのデバイス、IP アドレス、地理的位置などのコンテキスト情報を分析し、通常と異なるパターンを検出した場合に追加の認証 (MFA) を要求します。たとえば、普段は東京からログインしているユーザーが突然海外の IP からアクセスした場合、自動的に MFA チャレンジが発生します。パスワードポリシーでは最小文字数、大文字・小文字・数字・特殊文字の要件を設定でき、侵害されたパスワードのデータベースとの照合も行われます。MAU 50,000 人までの無料枠があり、それ以降は MAU あたり 0.0055 ドルと、コンシューマー向け認証サービスとしてはコスト効率が高い設計です。