目次
Amazon Cognito とは
Amazon Cognito は、ウェブアプリケーションやモバイルアプリケーションの認証、許可、ユーザー管理をサポートするサービスです。ユーザーディレクトリ、認証サーバー、OAuth 2.0/OIDC の IdP として機能し、必要なら利用者にAWSリソースへアクセスするための一時認証情報まで発行できます。
ユーザーは、ユーザー名とパスワードを使用して直接サインインするか、Facebook、Amazon、Google、Apple などのサードパーティーのソーシャル ID プロバイダーや、SAML 2.0 による Microsoft Active Directory などのエンタープライズ ID プロバイダーを通してサインインできます。
また、モバイルアプリ上での MFA 認証(多要素認証)による保護を可能にします。
Cognito の全体像
例えば、以下のような Amazon のような Web サービスがあるとします。
AmazonのようなWebサービス
ユーザー
│
│ メールアドレス
│ パスワード
▼
Webアプリ
│
▼
Amazon Cognito
│
├─ この人は誰?
├─ パスワードは正しい?
├─ MFAは成功した?
└─ ログイン成功
│
▼
JWT発行
│
▼
API Gateway
│
▼
Lambda
│
▼
DynamoDB
用語
- サードパーティー(third party) ← 第三者団体(企業、機関等)、ベンダーなど。
- ソーシャル ID プロバイダー ← 一般的なユーザーの ID を管理する機関。Facebook、Amazon、Google、Apple など。
- SAML(Security Assertion Markup Language) ← 通信プロトコル。SSO(Single Sign On)で利用する。
ID プロバイダー(IdP)
ユーザーの ID を保存及び検証するサービス。主な IdP には Microsoft Entra ID (Azure AD)、Okta、Google Workspace、ADFS(Active Directory Federation Service) などがあります。
Cognito が利用できる ID プロバイダー
- Facebook (サードパーティーのソーシャル ID プロバイダー)
- Amazon (サードパーティーのソーシャル ID プロバイダー)
- Google (サードパーティーのソーシャル ID プロバイダー)
- Apple (サードパーティーのソーシャル ID プロバイダー)
- Microsoft Active Directory (SAML 2.0 によるエンタープライズ ID プロバイダー)
IDフェデレーションとは?
Amazon Cognito を調べると「ID フェデレーション」という用語が出てきます。ID フェデレーションとは Facebook などの認証結果を他のサイトでも利用する機能(認証ソリューション)です。ID フェデレーションによりシングルサインオンを実現することができます。
Cognito ユーザープール(User Pools)
Amazon Cognito ユーザープールはユーザーを認証したり管理する仕組みです。ウェブおよびモバイルアプリケーションの認証と認可のためのユーザーディレクトリで、アプリの利用者を管理するための会員名簿 + ログイン機能です。アプリ側から見ると、ユーザープールは OpenID Connect(OIDC)の IdP として動きます。
Cognito ユーザープールの役割
ユーザープールは次の役割を持ちます。
- ユーザー登録
- サインイン
- パスワード管理
- MFA
- 外部 IdP 連携
- ログイン成功後の ID トークンやアクセストークン(JWT)の発行
JWT は JSON Web Tokens の略です。
Cognito ID プール(Identity Pools)
AWS リソースにアクセスするための一時的な AWS 認証情報を払い出す仕組みです。たとえば S3 や DynamoDB をアプリのユーザーに触らせるときに使います。IDプールは 一時的な AWS credentials を発行する と説明されています。
ユーザープールはログイン機能ですが、ID プールはAWS への権限付与機能と言えます。IDプールは、認証済みユーザーやゲストユーザーに対して、IAM ロールに基づく一時的な AWS 認証情報を払い出します。その認証情報を使って、アプリから S3 や DynamoDB などの AWS サービスにアクセスできます。
ユーザープールと ID プールを利用する流れ
- ユーザーがユーザープールでサインインする
- ユーザープールがトークンを返す
- そのトークンを ID プールに渡す
- ID プールが一時的な AWS 認証情報を発行する
- その資格情報で S3 などにアクセスする
Cognito Hosted UI
Cognito Hosted UI(現在は Managed Login と呼ばれる機能も提供されています)とは、AWS があらかじめ用意しているログイン・ユーザー登録画面のことです。
通常、Web アプリケーションにログイン機能を実装する場合、ログイン画面やパスワード管理などを自分たちで作る必要があります。しかし、Amazon Cognito の Hosted UI を使えば、AWS が提供する認証画面をそのまま利用できます。
Cognito Hosted UI のイメージ画像
Hosted UI は認証画面を提供する仕組みで、下図のような UI です。

このような画面をAWS側が提供してくれます。
主な機能は以下のとおりです。
- サインイン(ログイン)
- サインアップ(新規ユーザー登録)
- パスワードのリセット
- MFA(多要素認証)
- GoogleやAppleなど外部IDプロバイダーとの連携
カスタム検証
Cognito はカスタム検証も提供しています。以下のように登録前やサインイン前での検証が可能です。
- Pre Sign-up Lambda:ユーザー登録前のカスタム検証
- Pre Authentication Lambda:サインイン前のカスタム検証
脅威保護(Threat protection)
Amazon Cognito の 脅威保護(Threat protection) は、以前よく Advanced Security Features と呼ばれていた機能で、ユーザープールのサインイン時にリスクを評価し、不正ログインや漏えい済み認証情報の利用を検知・制御する仕組みです。
外部 IdPとの統合
Amazon Cognito は SAML 2.0 に対応しているので外部の IdP(アイデンティティプロバイダ)と統合できます。
Cognito ユーザープールを Relying Party(信頼されたサービスプロバイダー)として設定することで SAML 認証が可能になります。
Amazon Cognito を利用しない場合
Amazon Cognito を利用しない場合は、Web IdP(Amazon、Facebook、Google等のOIDC互換IdPでログインする)と通信をするアプリを作成して、AssumeRoleWithWebIdentity API を呼び出すことで認証することができます。