Cognitoとは
一言で説明すると、ウェブアプリケーションやモバイルアプリケーションに、さくっと認証・認可、ユーザー管理の仕組みを構築できるためのサービス、ということになります。
その中で、
- ユーザープール
 - IDプール
 - Cognito Sync
 
などの代表的な機能について、まとめました。
ユーザープール
公式のドキュメントには「何億人」とまで記載されていますが、それくらい巨大なユーザーを、セキュアに管理できる、フルマネージドサービスのユーザーディレクトリで、認証の機能を提供します。
ユーザーは、
- Amazon
 - Apple
 
などのソーシャルIDプロバイダーやSAMLベースのIDプロバイダ経由でサインインすることもできます。
プロバイダ経由でサインインする場合でも、ユーザープールのディレクトリプロファイルにアクセスすることができます。
ディレクトリプロファイルには、
- ユーザー名
 - 電話番号
 - 住所
 - タイムゾーン
 
等、標準的なOpenID Connectベースのプロファイルがサポートされています。
その他の主な機能としては、
- ユーザーがサインインするための組み込みのカスタマイズ可能なウェブUI
 - 多要素認証(MFA)などのセキュリティ機能
- 漏洩した認証情報のチェック
 - アカウントの乗っ取り保護
 - 電話とEメールによる検証
 
 - カスタマイズされたワークフローとLambdaトリガーによるユーザー移行
 - Eメールアドレスや電話番号によるサインイン認証
 - パスワードポリシーの設定
 - 利用デバイスの記憶
 
などがあります。
IDプール
ユーザーの一意のIDを作成し、IDプロバイダーで連携させることができるようになります。
IDプールでは、一時的なAWS認証情報を取得することで、各種AWSサービスにアクセスすることが可能となります。
IDプールでは、以下のようなIDプロバイダがサポートされています。
- Login width Amazon
 - Apple
 - Digits
 - Cognito(ユーザープール)
 - Open ID Connect
 - SAML ID
 - 開発者が認証したID
 
Cognito Sync
アプリケーション関連のユーザーデータのデバイス間の同期を有効にする機能です。
クライアントアプリは、データをローカルにキャッシュするため、デバイスがオフラインの状態でもデータへの読み書きが可能になります。
データは、デバイスがオンラインになっている時に同期が行われます。
この時、ユーザーが保持できるデータの最大サイズは20MBで、ユーザー情報ストア内のデータセットには、最大1MBのデータを保存できます。
データセット内に保存できるキーの数は1024個までです。
なお、現在はより高機能なAppSyncが提供されているため、今後使用を検討する場合は、AppSyncの使用を推奨されています。
対応言語
Cognitoは、AWS Mobile SDKに対応しています。AWS Mobile SDKでは、
- iOS
 - Android
 - Unity
 - Kindle Fire
 
がサポートされています。
また、ユーザープールに関しては、JavaScriptによる、JavaScript AWS SDK for CognitoによるJavaScriptでの開発も可能です。
コントロールAPI、データAPIがそれぞれ用意されているため、各種言語からの呼び出しも可能です。
料金
リージョンごとで料金が異なりますが、ここでは東京リージョンを例にしたいと思います(2020年7月現在)。
ユーザープール
ユーザープールの認証情報、または、ソーシャルIDプロバイダーで直接サインインするユーザ数によって決まります。
| 1ヶ月あたりのアクティブユーザー数 | 1ユーザーあたりの料金 | 
|---|---|
| 〜50000 | 無料 | 
| 50001〜10万 | 0.0055$(US) | 
| 次の90万 | 0.0046$(US) | 
| 次の900万 | 0.00325$(US) | 
| 1000万超 | 0.0025$(US) | 
SAMLまたはOpenID Connectionフェデレーションを使用してサインインする場合も、ユーザー数によって決まります。
| 1ヶ月あたりのアクティブユーザー数 | 1ユーザーあたりの料金 | 
|---|---|
| 〜50 | 無料 | 
| 50超 | 0.015$(US) | 
さらに、監査モードを含む高度なセキュリティ機能を使用すると、上記に加えて、下記料金が加算されます。
| 1ヶ月あたりのアクティブユーザー数 | 1ユーザーあたりの料金 | 
|---|---|
| 〜50000 | 0.050$(US) | 
| 次の5万 | 0.035$(US) | 
| 次の90万 | 0.020$(US) | 
| 次の900万 | 0.015$(US) | 
| 1000万超 | 0.010$(US) | 
Cognito Sync
こちらもリージョンにより料金が異なりますので、東京リージョンを例にしたいと思います(2020年7月現在)。
無料利用枠
- 最初の12ヶ月間
 - 1ヶ月あたり10GBの同期容量
 - 1ヶ月あたり100万回の同期オペレーション
 
無料利用枠外になる場合は、
- 1ヶ月1GBの同期容量あたり 0.19$(US)
 - 1ヶ月に1万回の同期オペレーションごと 0.19$(US)
 
また、プッシュ同期を有効にしているとSNSによる通知が行われるため、別途SNSの料金が加算されます。
リージョン
Cognitoは、以下のリージョンでサポートされています(2020年7月現在)。
- バージニア北部(us-east-1)
 - オハイオ(us-east-2)
 - オレゴン(us-west-2)
 - ムンバイ(ap-south-1)
 - ソウル(ap-northeast-2)
 - シンガポール(ap-southeast-1)
 - シドニー(ap-southeast-2)
 - 東京(ap-northeast-1)
 - カナダ(ca-central-1)
 - フランクフルト(eu-central-1)
 - アイルランド(eu-west-1)
 - ロンドン(eu-west-2)
 
まとめ
Cognitoは、モバイルアプリケーションだけでなく、ウェブアプリケーションにも使用できるので、一般的なウェブアプリケーションにも、非常に簡単に認証・認可の仕組みを導入することができます。
また、既存のアプリケーションへの導入も比較的簡単に行えます。
次回は、実際にコードを使ったサンプルアプリケーションを作成してみたいと思います。