Amazon Cognito
Web やモバイルアプリにユーザー認証・認可機能を簡単に追加できるサービス
何ができるか
Amazon Cognito は、Web アプリケーションやモバイルアプリにユーザーのサインアップ、サインイン、アクセス制御の機能を追加できるサービスです。ユーザー名とパスワードによる認証に加え、Google、Facebook、Apple などのソーシャルログインや、SAML 2.0 による企業の ID プロバイダーとの連携にも対応しています。数百万ユーザーまでスケールし、セキュリティのベストプラクティスが組み込まれています。
どのような場面で使うか
Web アプリケーションのユーザー登録・ログイン機能、モバイルアプリの認証基盤、ソーシャルログインの実装、企業向けシングルサインオン (SSO)、API Gateway と連携した API の認証、一時的な AWS 認証情報の発行など、ユーザー認証が必要なあらゆるアプリケーションで利用されています。 この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
身近な例え
テーマパークの入場管理に例えるとわかりやすいでしょう。入口 (サインイン) で身分証明書を確認し、年間パスポート (トークン) を発行します。パスポートがあれば園内の各アトラクション (API やリソース) に自由にアクセスでき、毎回身分証明書を見せる必要はありません。パスポートには有効期限があり、期限が切れたら再発行が必要です。
Cognito とは
Amazon Cognito は、アプリケーションの認証・認可機能をフルマネージドで提供するサービスです。認証 (Authentication) は「あなたは誰か」を確認する仕組みで、認可 (Authorization) は「あなたは何ができるか」を制御する仕組みです。Cognito はこの両方を提供し、開発者が認証システムをゼロから構築する手間を省きます。
ユーザープール
ユーザープールは、アプリケーションのユーザーディレクトリです。ユーザーの登録、サインイン、パスワードリセット、メールアドレスの確認、MFA (多要素認証) などの機能を提供します。カスタマイズ可能なサインイン画面 (Hosted UI) も用意されており、独自の UI を構築する手間を省くこともできます。ユーザープールは JWT (JSON Web Token) を発行し、API Gateway などでトークンベースの認証に利用できます。
ID プール
ID プール (フェデレーテッドアイデンティティ) は、認証済みのユーザーに一時的な AWS 認証情報を発行する仕組みです。たとえば、モバイルアプリのユーザーが S3 に写真をアップロードする場合、ID プールがそのユーザーに S3 への書き込み権限を持つ一時的な認証情報を発行します。ユーザープールと組み合わせて使うのが一般的です。
はじめかた
Cognito を使い始めるには、Cognito コンソールでユーザープールを作成します。サインイン方法 (メールアドレス、電話番号、ユーザー名) やパスワードポリシーを設定し、アプリクライアントを作成します。AWS Amplify ライブラリを使えば、フロントエンドアプリケーションに数行のコードで認証機能を組み込めます。
Azure・オンプレミスとの比較
AWS の優位点
- 月間 50,000 MAU まで無料で利用でき、小〜中規模アプリケーションの認証基盤を実質無料で構築できる
- API Gateway や Lambda との統合が標準で提供されており、サーバーレスアーキテクチャの認証基盤として追加コードなしで組み込める
- Google、Facebook、Apple などのソーシャルログインと SAML 2.0 による企業 IdP 連携を単一サービスで実現できる
注意点
- 無料利用枠として月間 50,000 MAU (月間アクティブユーザー) まで無料で利用できる
- Hosted UI はカスタマイズに制限があるため、完全にブランドに合わせた UI が必要な場合は独自のサインイン画面を構築すること
- トークンの有効期限やリフレッシュトークンの設定を適切に行い、セキュリティと利便性のバランスを取ること
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。