Amazon Cognito

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 プールを利用する流れ

  1. ユーザーがユーザープールでサインインする
  2. ユーザープールがトークンを返す
  3. そのトークンを ID プールに渡す
  4. ID プールが一時的な AWS 認証情報を発行する
  5. その資格情報で 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 を呼び出すことで認証することができます。