AWS再入門ブログリレー2022 Amazon Cognito編
こんにちは、コンサルティング部のべこみんです。
当エントリは弊社コンサルティング部による『AWS 再入門ブログリレー 2022』の22日目のエントリです。
このブログリレーの企画は、普段 AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。
AWSをこれから学ぼう!という方にとっては文字通りの入門記事として、またすでにAWSを活用されている方にとってもAWSサービスの再発見や2022年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。
では、さっそくいってみましょう。22日目のテーマはAmazon Cognitoです。
Amazon Cognitoについて
主に AWS公式ドキュメントのデベロッパーガイド をもとに、Amazon Cognitoについてまとめてみました。
Amazon Cognitoってどういうサービス?
Amazon Cognitoとは、ウェブアプリケーションやモバイルアプリケーションに「認証(Authentication)」、「認可(Authorization)」、「ユーザー管理」を簡単に実装することが可能なサービスです。
Amazon Cognitoは主に「ユーザープール」と「IDプール」という2つのコンポーネントから成り立っています。(厳密にはCgnito Syncというコンポーネントもあるのですが、後ほど紹介します。)
ユーザープールとIDプールはどちらもAmazon Cognitoのコンポーネントではありますが、必ず連携して使わなければならないというものではありません。ユーザープール、IDプールは独立したコンポートネントであり、単独で使うことも可能です。詳しくは後述しますが、それぞれに合ったユースケースでの利用を検討しましょう。
AWS認定試験の勉強をされている方の中には、このユーザープールとIDプールの違いを曖昧に理解されている方もいらっしゃるのではないでしょうか。僕も学習し始めの時は2つの違いを明確に理解することが出来ていませんでした。本記事を通して、少しでも理解を深めることが出来れば幸いです。
ユーザープールとは
ユーザープールは「認証」と「ユーザー管理」の機能を持ったコンポーネントです。
ユーザープールを利用することで、ユーザーはAmazon Cognito経由でウェブアプリやモバイルアプリにログインすることが可能となります。
また、ユーザープールはGoogleやFacebook、Amazon、ApplenなどのサードパーティーのIdP(アイデンティティプロバイダー)を介した連携を行うことも可能です。
具体的にはユーザープールからは以下の機能が提供されます。
- サインアップ、サインインサービス
- サインインのためのカスタマイズ可能な組み込みWeb UI
- Facebook, Google, Amazon, AppleのようなソーシャルIdPおよびSAML IdPと連携したサインイン
- ユーザーディレクトリとユーザープロファイルの管理
- 多要素認証(MFA)などのセキュリティ機能、漏洩した認証情報のチェック、アカウントの乗っ取りからの保護、電話とEメールによる検証
- カスタマイズされたワークフローとAWS Lambdaトリガーによるユーザー移行
ユーザープールのユースケースとしては、主に以下のようなものが紹介されています。
- アプリのサインアップとサインインのウェブページを設計する。
- ユーザーデータにアクセスし、管理する。
- ユーザーのデバイス、場所、IPアドレスを追跡し、様々なリスクレベルのサインイン要求に適応する。
- アプリのカスタム認証フローを使用する。
IDプールとは
IDプールは「認可」の機能を持ったコンポーネントです。ユーザーのために一意のIDを生成し、IdPでそれらをフェデレートすることが出来ます。
IDプールを使用することでユーザーは権限が制限された一時的なAWS認証情報を取得し、他のAWSサービスにアクセスすることが可能となります。
IDプールでは以下のIdPがサポートされています。
- Facebook, Google, Amazon, AppleのようなソーシャルIdP
- Open ID Connectプロバイダー
- SAML IdP
- デベロッパーが認証したアイデンティティ
IDプールのユースケースとしては、主に以下のようなものが紹介されています。
- Amazon S3バケットやAmazon DynamoDBテーブルなどのAWSリソースへのアクセスをユーザーに許可する。
- 未承認ユーザー用のAWS認証情報を一時的に生成する。
補足: Cognito Syncとは
冒頭で少し触れましたが、実はAmazon CognitoにはCognito Syncというコンポーネントも存在します。
Cognito Syncは、アプリケーション関連ユーザーデータをデバイス間で同期可能とするためのクライアントライブラリです。
ただし、現在は同様の機能+αの機能を持つAWS AppSyncというサービスが提供されているため、Cognito SyncのユースケースではAWS AppSyncの利用が推奨されています。
ですので、Cognito Syncについてはこの程度の説明に留めさせて頂きます。
料金について
Amazon Cognitoの利用料金ですが、料金が発生するコンポーネントはユーザープールとCognito Syncのみです。IDプール自体は無料で利用することが出来ます。(Cognito Syncの料金については今回説明を割愛させて頂きます。)
ユーザープールのコストですが、ユーザープールには無期限の無料利用枠が用意されています。
ユーザープールのコストはMAU1、利用するIdPに応じて可変します。
利用するIdPに応じた東京リージョン(ap-northeast-1)での料金表を Amazon Congnitoの製品情報 より引用します。
- ユーザープールの認証情報、またはソーシャルIdPで直接サインインするユーザーの場合
料金範囲(MAU) | 1MAUあたりの料金(USD) |
---|---|
~ 50,000 | 無料 |
50,001 ~ 100,000 | 0.0055 |
100,001 ~ 1,000,000 | 0.0046 |
1,000,001 ~ 10,000,000 | 0.00325 |
10,000,001 ~ | 0.0025 |
- SAML または OIDCフェデレーションを使用してサインインするユーザーの場合
料金範囲(MAU) | 1MAUあたりの料金(USD) |
---|---|
~ 50 | 無料 |
51 ~ | 0.015 |
新しいコンソールについて
Amazon Cognitoのコンソールですが、2021年11月のコンソールアップデートで新コンソールが利用出来るようになりました。(旧コンソールもまだ利用可能です。)
ここでは簡単にコンソールの比較をしてみましょう。
- アクセス直後の画面
新コンソール
新コンソール画面では画面右側にある「ビジネスケースから始める」のセレクトボックスからビジネスケースを選択すると、表示されているユーザープール作成ボタンとIDプール作成ボタンが切り替わります。
「アプリケーションにユーザーディレクトリを追加する」を選択するとユーザープール作成ボタンが表示されます。
「AWSのサービスへのアクセス権を付与する」を選択するとIDプール作成ボタンが表示されますね。
旧コンソール
一方、旧コンソールでは最初からユーザープール作成ボタンとIDプール作成ボタンが表示されていますね。かなりシンプルな画面で使いやすいかとは思いますが、新コンソールは他のAWSサービスのコンソールとデザインが統一されているので、個人的には新コンソール画面の方が好みです。
- ユーザープール作成画面
新コンソール
旧コンソール
ユーザープールはかなり変わっていますね。
各オプションの設定順序も変わっています。
例えばユーザープールの名称は旧コンソールでは一番最初に設定しますが、新コンソールではステップ5で設定するようになっています。
- IDプール作成画面
新コンソール
旧コンソール
IDプール作成画面は差異がありませんね。どうやら新コンソールからIDプール作成画面を開いても旧コンソール画面が表示されるようです。
ちなみにデベロッパーガイドでは新コンソールの主な変更点として以下が挙げられています。
- 機能の論理グループ化
- アプリのユーザーエクスペリエンスを重視した参考手順
- ユーザープール構成の動的支援
- ポップアウトのヘルプテキスト
- ビューをフィルタリング
- アプリのカテゴリ設定と推奨プリセット
- 不可逆的構成の選択に関する警告
- リソースの制限とユーザープール設定の制限に関する情報の更新
また、先ほど確認したIDプールも含まれていますが、以下機能のコンソールは旧コンソールのままだそうです。
- Amazon Cognito IDプール
- Amazon Cognito Sync
- CSVファイルからのユーザープールへのユーザーのインポート
- ユーザープールの分析
おまけ〜認証と認可について〜
本記事では触れませんでしたが、認証と認可について正しく理解されたいという方には以下の神ブログをご紹介します。
私もこのブログを読むまでは認証と認可についての理解が曖昧だったのですが、ブログを読むことで理解を深めることが出来ました。
参考資料
- Amazon Cognito デベロッパーガイド
- Amazon CognitoのユーザープールとIDプールの違いはなんですか?
- Amazon Cognito - よくある質問
- Amazon Cognito 料金
最後に
以上、『AWS 再入門ブログリレー 2022』の22日目のエントリ『Amazon Cognito』編でした。
Amazon Cognitoを知らなかった方、ユーザープールとIDプールの違いがよく分からない方の参考になれば幸いです。
更にAmazon Cognitoを知りたい方には 2020年版の弊社再入門ブログ Amazon Cognito編 もおすすめです!ユーザープールとIDプールの利用パターンなど、非常に分かりやすく記載されています。
次回、3/7(月)はTakuya Shibataさんの「AWS App Runner編」の予定です!
コンサルティング部のべこみんでした!
- Monthly Active Usersの略称。ここでは1ヶ月の間にCognito(ユーザープール)にログイン等の形でアクセスしたユーザー数を指す。 ↩