目次
Amazon Cognito の特徴
Amazon Cognito は、ウェブアプリケーションやモバイルアプリケーションの認証、許可、ユーザー管理をサポートしています。ユーザーは、ユーザー名とパスワードを使用して直接サインインするか、Facebook、Amazon、Google、Apple などのサードパーティーのソーシャル ID プロバイダーや、SAML 2.0 による Microsoft Active Directory などのエンタープライズ ID プロバイダーを通してを通じてサインインできます。
また、モバイルアプリ上での MFA 認証(多要素認証)による保護を可能にします。
用語
- サードパーティー(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 などにアクセスする
脅威保護(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 を呼び出すことで認証することができます。
コメント