CognitoのユーザープールとIDプールの違いは?AWSの認証と認可を分かりやすく解説

CognitoのユーザープールとIDプールの違いは?AWSの認証と認可を分かりやすく解説

こんにちは!

アプリケーション開発の中でも、認証と認可は複雑化しやすい部分ですよね。

弊社では、AWS での認可・認証は Congito を使用して構築するケースがほとんどです。(稀に OpenIDConnect と組み合わせて認証を実装するケースもあります)

本記事では、弊社で多くの採用事例をもつ Cognito の概念について解説します。

ユーザープールと ID プールとは?

Cognito には、ユーザープールと ID プールと呼ばれる2つの大きな機能/概念があります。Cognito を触る際は、まずこれらについて深く理解しなければいけません。

まずそれぞれの役割を簡単に書くと、下記の表のようになります。

ユーザープールAWS 内での認証を扱うサービスです。
ユーザープールへのサインイン後に入手できるユーザープールトークンを使用し API Gateway, AppSync などの AWS サービスへの認証アクセス可能になります。
IDプールAWS 内での認可を扱うサービスです。
STS トークンを発行可能で、IDP 指定を柔軟に行えます。( Twitter, Google 等)

ここで最も重要なのは、ID プールの IDP にユーザープールを指定可能な点です。つまり、ユーザープールトークンと ID プールトークン ( STS ) は交換することが可能です。

これを理解するには、実際の認証のシナリオを見るのが最短です。

シナリオ

弊社で最も採用事例の多いシナリオを紹介します。このシナリオは弊社の得意技術でもある Amplify フレームワークでも採用しているシナリオです。

ユーザープールをIDPとして利用

ユーザープールをIDPとして利用
ユーザープールをIDPとして利用

これを見ると、まずユーザープールへサインインし、その後に ID プールトークンを取得しています。(ユーザープールトークンと ID プールトークンを交換可)

また、このようなケースではユーザープールに対してユーザーグループを設定するのが通常です。

これは、アプリケーション開発の要件でよくある「特定のユーザーグループにのみ操作を許容する」といった、ユーザーパーミッションの実装を行えます。

ユーザープールトークン → ID プールトークン交換の際、ユーザーグループを判別して付与する STS ( ロール ) をグループによって切り替えることができます。

IDプールの認証プロバイダーで、ユーザープールを見てみましょう。

IDプール編集画面

「認証されたロール」とあります。これがユーザーグループに応じて付与する権限を切り替えることを可能にしてくれます。

つまり Cognito はこんな時に使いたい

Cognito は下記のようなケースで有効だと言えます。

  • ユーザープールトークンによるAppSync/API Gatewayへの認証制限
  • IDプールトークンによるAWS SDKでアクセス可能なサービスを制限
  • ユーザーグループによるユーザーパーミッション

ここで、認証だけで言えば Auth0 などで ID トークンを取得するだけで済みますが、 Cognito は AWS サービスへのアクセス認可を行うことが可能です。

まとめ

Cognito を使用すれば、AWS サービスにおける認証・認可の仕組みを容易に実装できます。ユーザーグループを活用すればプログラミングコストの削減にもなりますね。

わたし達はAWSでのアプリケーション開発では必ずと言えるほど Cognito を使用します。Cognito に関する不明点はお気軽にご相談ください。