インフラ - Cognito (AWS)の概要
背景
インフラの勉強で軽く調べた内容を書き留めておきたいと思いました。
本記事では、主にCognitoに関して調べた内容をまとめていきます。
Cognito (こぐにーと)
概要
Amazon Cognitoは、ユーザー認証機能を提供するサービスです。
アカウント管理・認証認可の付与をAWS側で行うことができます。
APIベースで実装されるモバイルやWebアプリ向けのユーザー認証で利用されています。
提供機能 - ユーザー認証
ユーザープール
認証・認可を制御するためのメイン機能です。
ユーザーアカウントの作成、ユーザーアカウントの管理、認証を行う機能やトークンの発行及び管理がCognito側で行うことができます。
フェデレーション
外部の認証プロバイダーとの連携を可能にする機能です。
フェデレーションとは、一度認証を行えばその認証情報を使って許可されているすべてのサービスを使えるようにする仕組みのことを指します。
この機能により、ユーザーはGoogle、Amazon、Facebookなどのアカウントを使用してアプリケーションにログインできます。
Cognito はフェデレーションハブとして、Apple、Facebook、Google、Amazon などのソーシャル ID プロバイダーや、SAML や OIDC などのエンタープライズ ID ( プロバイダーを経由したユーザーのログインを可能にします。 ( https://aws.amazon.com/jp/cognito/details/ )
カスタマイズ可能な UI
ユーザーのサインアップとサインインのためのカスタマイズ可能な組み込み UI が用意されています。
基本的にはカスタマイズ前提のようです。
多要素認証 (MFA)
ユーザープールで MFA を有効することで顧客のセキュリティを強化できる機能です。
ユーザーは、SMS や、Google Authenticator などの タイムベースドワンタイムパスワード (TOTP) ジェネレータを使用して自分の ID を確認することができます。
アダプティブ認証
ユーザーのアカウントを保護するための機能です。
新しい場所やデバイスからの試行など通常とは異なるサインインアクティビティが検出されると、そのアクティビティにリスクスコアが割り当てられます。
ユーザーに対して追加の証明を求めるか、そのサインインリクエストをブロックするかを選択できます。
提供機能 - セキュリティ
ボット検出
高度なボット検出機能です。
Amazon Web Application Firewall (WAF) との連携によってサポートされています。
セキュリティ侵害を受けた認証情報の保護
Amazon Cognito は、ユーザーのサインアップ、サインイン、パスワード変更の際に、セキュリティ侵害を受けた認証情報の再利用をリアルタイムで検出し、防止することができます。
他でセキュリティ侵害を受けた認証情報を入力していることが検出されると、パスワードの変更を促されます。
通知方法は、メール、SMS、または他のカスタム通知方法を設定することができます。
Cognitoによる認証・認可の仕組み
基本的には以下の流れで認可・認証の仕組みを実現しています。
ユーザーがURLにアクセスする
↓
アプリケーションは、ユーザーをCognitoの認証エンドポイントにリダイレクトする
↓
Cognitoの認証エンドポイントで、ユーザーがログイン情報を入力するためのログイン画面を返却する
↓
ユーザーは、Cognitoによって提供された認証手段(ユーザー名とパスワード、ソーシャルログインなど)を使用してログインする
↓
アプリケーションは、受け取ったトークンを使用してCognitoに対してユーザーの認可情報やプロフィール情報を要求する
↓
Cognitoは、要求された情報をトークンとともに応答する
(response_type=codeなら認可コード、response_type=tokenならIDトークンとアクセストークンを返却する)
↓
アプリケーションは、受け取ったトークンを検証してユーザー認証を行う
Cognitoの設定
AWS Management Consoleにサインインし、Cognitoのダッシュボードに移動し
ユーザープールの作成を開始するために、「ユーザープールを管理する」をクリックします。
ユーザープールの設定画面で、プール名やプールのオプションを設定します。
ここでどの情報を使用してサインインするかなども設定できるようですね。
セキュリティ要件を設定します。
柔軟で堅牢なセキュリティを保つための設定ができるようです。
サインアップエクスペリエンスを設定します。
設定の関係で以降は触れなかったのですが後の手順としては以下になるようです。
メッセージ配信を設定 ↓
ユーザープールの作成後、必要なAPIリソースやクライアントアプリケーションにCognitoを統合するための設定
(認証フローの実装や必要なAPI呼び出しの構成の設定ができる)
↓
後はアプリケーション内で実装
(適切なCognito SDKやライブラリを選択し、実装します)
参考
続く…
コメント
本記事の内容は以上になります!
書籍の続きのアウトプットも随時更新したいと思います。
プログラミングスクールのご紹介 (卒業生より)
お世話になったプログラミングスクールであるRUNTEQです♪
こちらのリンクを経由すると1万円引きになります。
RUNTEQを通じて開発学習の末、受託開発企業をご紹介いただき、現在も双方とご縁があります。
もし、興味がありましたらお気軽にコメントか、TwitterのDMでお声掛けください。