【1分で理解】AWS Cognitoの概要を理解する【最新版】

Webシステムのユーザ管理、認証基盤を選定する際、フレームワーク内でやってしまうか、サードパーティ製で構築するか悩みどこですよね。

AWSのCognitoにユーザ管理・認証を任せてしまうのも有力な候補です。

特に今流行りのサーバレスでサイトを構築しようと考えているなら是非チャレンジしたい領域。

僕はフロント部分をReact.js。認証部分をCognitoに任せています。

あとはAPIサーバを立てておけばWebシステムは作れてしまいます。

フロント、認証、API、これらを疎結合としておくことで、何かトラブルがあっても原因の特定が早くなりますね。

Amazon Cognitoも多機能であり、使いこなすには時間がかかります。

まずはCognitoがどんなものか、というのをおさえておきます。

Amazon Cognito

Webアプリケーション、モバイルアプリケーションの認証部分を担うサービス。

ユーザの登録はもちろん、登録するユーザが本人であるかどうかの認証機能も利用可能。

ユーザ自身がユーザ登録も可能(サインアップ)

管理者が事前に登録しておくことも可能。

CSVでの一括登録やLambdaを使ったユーザ移行にも対応している。

コンポーネント

Amazon Cognitoは2つのコンポーネントから成り立つ

・ユーザプール

・IDプール

ユーザプール

ユーザ認証とユーザ管理をおこなう。

ユーザ認証には2つの方式が存在する。

1.ユーザ名とパスワードを入力してログイン認証

2.外部IDプロバイダーが提供するログイン画面で認証

1はCognitoユーザプールが提供する認証機能になる。管理者が登録することも、ユーザ自身がサインアップをすることも可能。

サインアップの手段としてはメールアドレスまたは電話番号を使った本人確認が可能となる。
これをMFA(多要素認証)といい、この機能だけでもCognitoを使いたい理由になる。

2は外部IDプロバイダーと連携した認証となる。
外部のIDプロバイダーが提供するログイン画面を利用する。

[連携可能な外部IDプロバイダー]
・Facebook
・Google
・Amazon
・Apple

これら以外にも、認証プロトコルの標準であるSAMLやOIDC(OpenIDConnector)に対応した認証サービスとの連携が可能。
外部IDプロバイダーと連携した認証では、ユーザプールに対する明示的なユーザ登録は行わず、初めて認証が行われた時にユーザ登録される。

ユーザプールでユーザ認証が行われると、認証された証として「IDトークン(JWT」が発行される
このIDトークンを使って、アプリケーションがユーザを特定したり、他のサービスとの連携をおこなう

JSON Web Token(JWT)は、JSONオブジェクトによるメンバー間の安全な通信方式を定義するオープンスタンダード(RFC 7519)です。「署名」のおかげでこの情報を認証し、信頼できるブックマークすることができます。JWTの署名はHMACまたはRSAで暗号化されます。

https://magazine.techcareer.jp/technology/api/9126/#1_JSON_Web_Token_JWT

IDプール

外部の「IDプロバイダー」によって認証されたIDに対して、AWSのアクセス権限を持つ「一時クレデンシャル」を払い出すことができるコンポーネント。

AWSへのアクセス権限を提供することからユーザ認可をおこなうコンポーネントと説明される。

IDプールが認証のために利用できるIDプロバイダーは以下の通り
・Cognitoユーザプール
・Amazon
・Facebook
・Google
・Twitter
・OIDCに準拠したプロバイダー
・SAMLに準拠したプロバイダー

「OpenID Connect(オープンアイディー・コネクト)」とは、サードパーティーのアプリからGoogleやFacebookなどの認証サーバーを使ってユーザー認証を行うためのプロトコルです。

https://josysnavi.jp/2019/josys-bk_openid-connect#OpenID_Connect

SAMLとは、異なるドメイン間においてユーザー認証情報を繋げる、マークアップ言語です。OASISによって策定された標準規格で、Security Assertion Markup Languageの頭文字からSAMLと表されます。

主にシングルサインオンに使用されています。シングルサインオンとは、1度のログインで複数のサービスへの同時ログインを実現する仕組みです。この仕組みにSAMLというプロトコルが使われています。

https://it-trend.jp/single_sign_on/article/75-0019

お気づきの通りCognitoユーザプールにて認証されたIDに対してクレデンシャルを発行できる。
Cognitoで認証されたユーザはAWSのマネージドサービスを利用できる権限をアタッチされる(ロール)

Cognitoユーザプールと連携して認証をおこなうことができるもの
・Application Load Balancer(ALB)
・API Gateway
・AppSync
これらはAWSリソース側の設定で「Cognito認証の利用」「連携するCognitoユーザプール」を指定することで、AWSリソースに認証機能を組み込むことができる。

まとめ

Amazon Cognitoの本当にさわりの部分を解説しました。

おさらいです。覚えるポイントはたったこれだけ。

Cognitoには2つのコンポーネントが存在し、

ユーザプールは、認証とユーザ管理をおこなう。認証OKでID(JWT)トークンが発行される。
IDプールは認証されたIDに対して他のAWSサービスを利用するためのクレデンシャルを発行。

認証はCognitoだけでなく外部IDサービス(FacebookやGoogle)のログイン画面からも可能。

Cognitoを使って円滑な認証・認可ライフをお過ごしください。

では、また。