前の記事では、 IAMグループとIAMロールについて学びました。
IAMを利用すると、 AWSを操作するユーザーやAWSサービスに対して 適切な権限を設定できます。
では、AWS上にECサイトやWebアプリケーションを作った場合、 そのサービスを利用する一般ユーザーのログインは どのように管理すればよいのでしょうか?
1万人分のIAMユーザーを作成する?
もちろん、そのような使い方はしません。
Webサイトやモバイルアプリを利用する エンドユーザーの認証で活用できるのが Amazon Cognitoです。
Amazon Cognitoが 「Web・モバイルアプリの利用者を認証するために使えるサービス」 であることを理解し、IAMとの違いやUser Pool・Identity Poolの基本的な役割を説明できる状態を目指します。
Amazon Cognitoとは?
Amazon Cognitoは、 Webアプリケーションやモバイルアプリケーションの ユーザー認証・認可に利用できるAWSサービスです。
たとえば、普段利用しているWebサービスには 次のような機能があります。
新しい利用者のアカウントを作成する
ユーザーが本人であることを確認する
パスワード変更やリセットなどを行う
複数の要素を使って認証を強化する
こうした認証機能を自分たちですべて構築・管理するのは大変です。
Amazon Cognitoを利用することで、 アプリケーションに必要な認証機能を AWSのマネージドサービスとして利用できます。
Amazon Cognitoを利用するイメージ
ECサイトを例に考えてみましょう。
パスワード
ユーザーがメールアドレスとパスワードを入力すると、 Cognitoがユーザーを認証します。
認証に成功すれば、 アプリケーション側は 「このユーザーは認証済みである」 と判断できます。
IAMとAmazon Cognitoは何が違う?
AWS初心者が特に混同しやすいのが、 IAMとAmazon Cognitoの違いです。
どちらも認証・認可に関係していますが、 主な対象となるユーザーが違います。
AWSの管理・運用やAWSリソースへのアクセスなどを行う主体
ECサイトやWeb・モバイルアプリなどを利用するエンドユーザー
ECサイトに10万人の利用者がいても、 その10万人をIAMユーザーとして作成するわけではありません。 アプリケーション利用者の認証には、Amazon Cognitoなどの仕組みを利用します。
Cognitoには2つの重要な仕組みがある
Amazon Cognitoを理解するときに、 まず覚えておきたいのが次の2つです。
アプリケーションのユーザーを登録・認証する
ユーザーへ一時的なAWS認証情報を提供する
初級では、この2つの違いを大まかに理解できれば十分です。
User Poolとは?
User Pool(ユーザープール)は、 アプリケーションのユーザーを管理・認証するための仕組みです。
たとえばECサイトで、 次のようなログイン画面があるとします。
ユーザーが入力した情報をもとに、 User Poolが認証を行います。
User Poolでは、 ユーザー登録やログインだけでなく、 パスワード管理やMFAなどの認証機能も利用できます。
認証に成功するとトークンが発行される
User Poolでユーザー認証に成功すると、 アプリケーションは認証結果として トークンを受け取ります。
Amazon Cognito User Poolでは、 認証されたユーザーに対して JWT(JSON Web Token)形式のトークンが利用されます。
この段階ではJWTの細かな構造まで覚える必要はありません。 まずは「認証に成功したことをアプリ側で確認するためにトークンを利用する」 と理解しておきましょう。
Identity Poolとは?
User Poolは、 アプリケーションのユーザーを認証する仕組みでした。
一方で、 Identity Pool(アイデンティティプール)は、 ユーザーに一時的なAWS認証情報を提供する仕組みです。
たとえば、ログインしたユーザーが アプリからAmazon S3へ直接画像をアップロードするケースを考えてみましょう。
Identity Poolを利用すると、 認証されたユーザーなどに対して 一時的なAWS認証情報を提供できます。
前の記事で学習した IAMロールがここでも関係してきます。
Identity PoolではIAMロールと組み合わせて、 アプリケーション利用者に必要な範囲のAWSアクセス権限を与えることができます。
User PoolとIdentity Poolを整理しよう
| 項目 | User Pool | Identity Pool |
|---|---|---|
| 主な役割 | アプリユーザーの認証 | 一時的なAWS認証情報の提供 |
| ユーザー登録 | ○ | ― |
| ログイン | ○ | ― |
| トークン発行 | ○ | ― |
| AWS認証情報 | 直接は提供しない | 一時的な認証情報を提供 |
| IAMロール | 基本的なユーザー認証では不要 | アクセス権限の設定で利用 |
Googleなどのアカウントでもログインできる
Amazon Cognitoでは、 独自のメールアドレス・パスワードによる認証だけでなく、 外部のIdentity Provider(IdP)と連携することもできます。
たとえば、Webサービスで次のようなボタンを見たことがあるでしょう。
Amazon Cognito User Poolでは、 Googleなどのソーシャルプロバイダーや、 SAML・OIDCに対応した外部IdPとの連携も可能です。
「Cognitoを使う=必ずCognito内にパスワードを持つ」 というわけではありません。 外部の認証サービスと連携する構成も利用できます。
理解度チェック:どの仕組みを使う?
ここまで学習した IAM・User Pool・Identity Poolを使い分けてみましょう。
この場面では何を使う?
「誰が」「何のために」利用するのかがポイントです。
初心者が間違えやすいポイント
① アプリ利用者にもIAMユーザーを作成する
IAMユーザーは、 一般的なWebサービスの会員アカウントを作成するための仕組みではありません。
アプリケーション利用者の認証には、 Amazon Cognito User Poolなどを利用できます。
② User PoolとIdentity Poolは同じもの
名前は似ていますが、 役割が異なります。
③ Cognitoを使えば必ずIdentity Poolも必要
User PoolとIdentity Poolは 必ずセットで利用するわけではありません。
たとえば、 アプリケーション利用者をUser Poolで認証し、 発行されたトークンを使ってAPIへのアクセスを制御する構成では、 Identity Poolを利用しない場合もあります。
確認問題:Amazon Cognitoを理解できたか確認しよう
Amazon Cognitoの主な利用対象として適切なのはどれですか?
Amazon Cognitoは、 Web・モバイルアプリなどの利用者を認証・認可するために利用できるサービスです。
アプリケーションのユーザーを登録・認証する仕組みはどれですか?
User Poolは、 アプリケーション利用者のユーザー登録やログインなどを提供します。
ユーザーに一時的なAWS認証情報を提供する仕組みはどれですか?
Identity Poolは、 IAMロールなどと組み合わせて ユーザーへ一時的なAWS認証情報を提供します。
3問に挑戦してみましょう。
まとめ
Amazon Cognitoは Web・モバイルアプリのユーザー認証・認可に利用できる
IAMとCognitoでは 主な対象となるユーザーが異なる
User Poolは アプリケーション利用者の登録・認証を行う
Identity Poolは 一時的なAWS認証情報を提供する
User Poolでは Googleなどの外部IdPとの連携もできる
次はIAM Identity Centerを理解しよう
Amazon Cognitoでは、 アプリケーションを利用するエンドユーザー の認証について学びました。
では、企業で複数の社員がAWSを利用する場合はどうでしょうか?
組織では、 社員ごとに複数のAWSアカウントへのアクセスを 個別管理するのは大変です。
そこで次の記事では、 組織のユーザーがAWSアカウントやアプリケーションへ アクセスするための仕組みとして IAM Identity Centerを学びます。
次は「IAM Identity Center」を学びましょう
組織のユーザーが複数のAWSアカウントやアプリケーションへ アクセスするための仕組みを学びます。
Cognitoとの「対象ユーザーの違い」 に注目すると理解しやすくなります。
IAM Identity Centerの基本を理解する →
