WAT Note(III).

Cognito(AWS)について

Tatsuroh Wakasugi
Tatsuroh Wakasugi

認証、認可を行うにあたり、AWS のサービス「Cognito」について調べてみたので、ここに書き留めておく。

Cognito とは

Cognito とは、「認証・認可」の機能を提供する AWS のサービスであり、主に Web アプリケーションやモバイルアプリケーションに認証機能を提供する用途で利用される。 このサービスにより素早く簡単にユーザーのサインアップ/サインインおよびアクセスコントロールの機能を追加できる。

また Cognito は、Apple、Facebook、Google、Amazon などのソーシャル ID プロバイダー、SAML 2.0 および OpenID Connect によるエンタープライズ ID プロバイダーを使用したサインインをサポートしている。

Cognito のコンポーネント

Cognito は主に ユーザープールID プール と呼ばれる 2 つのコンポーネントからなる。 ユーザープールは、アプリユーザーのサインアップとサインインオプションを提供するユーザーディレクトリである。 ID プールは、AWS の他のサービスに対するアクセスをユーザーに許可する。ID プールとユーザープールは別々に使用することも、一緒に使用することもできる。

利用者が自分でユーザーを登録できるのはもちろん、管理者が事前登録したり、CSV ファイルからのインポートや Lambda を使ったユーザー移行などにも対応している。

また、作成できるユーザーの上限数についてもデフォルトで 20,000,000 と、不特定多数の一般ユーザーを管理するのに十分なものとなっている。

Cognito の大きなコンポーネントである「ユーザープール」と「ID プール」についてを示す。

ユーザープール

ユーザープールはユーザーの 認証管理 を行うコンポーネントである。 ユーザー認証の方式として、以下の 2 通りが用意されている。

  1. Cognito ユーザープールが提供する認証機能
  2. 外部 ID プロバイダーと連携した認証

ユーザー名/パスワードで認証されたユーザー、外部 ID プロバイダーと連携して認証されたユーザーは、共にユーザープール内で「ユーザー」として登録され、同列に扱われる。 ユーザープールでユーザー認証が行われると、認証された証として「ID トークン」が発行される。 この ID トークンを使って、アプリケーションがユーザーを特定したり、他のサービスとの連携を行ったりすることができる。 大体は、後述する ID プールと組み合わせて行うことが多い。

Cognito ユーザープールが提供する認証機能

ユーザー名 (設定によってメールアドレスや電話番号も使用可能) とパスワードを入力してログイン認証を行う。 ユーザーは、管理者が事前に作成しておくことも、ユーザー自身が「サインアップ」を行い登録することもできる。 サインアップによってユーザー登録を行う場合は、メールアドレスまたは電話番号を使った本人確認 (Confirm) が行われる。

外部 ID プロバイダーと連携した認証

Web アプリケーションやモバイルアプリケーションでユーザー名やパスワードの入力を求めるのではなく、外部の ID プロバイダーが提供するログイン画面を利用する。 連携可能な外部 ID プロバイダーとしては「Facebook」「Google」「Amazon」「Apple」が提供する認証サービスが対応している。 (これらは「ソーシャル ID プロバイダー」とも呼ばれる) これら以外にも、認証プロトコルの標準である「SAML」や「OIDC (Open ID Connector)」に対応した認証サービスとも連携が可能になる。 外部 ID プロバイダーと連携した認証では、ユーザープールに対する明示的なユーザー登録は行わず、初めて認証が行われた時にユーザーが登録される。 Cognito ユーザープールと上記の外部 ID プロバイダーとを連携させることで、ユーザーは該当の ID プロバイダーを使った認証を利用することができ、また認証されるとユーザープールにその情報を登録することができる。

ID プール

ID プールは、外部の「ID プロバイダー」によって認証された ID に対して、AWS へのアクセス権限を持つ「一時クレデンシャル」を払い出すことができるコンポーネントである。 AWS へのアクセス権限を提供することから、ユーザへの 認可 を行うコンポーネントと説明されることもある。 ID プールが認証のために利用できる ID プロバイダーは、以下の通り。

  • Cognito ユーザープール
  • Amazon
  • Facebook
  • Google
  • Twitter
  • OIDC に準拠したプロバイダー
  • SAML に準拠したプロバイダー

ID プールにより認可が行えると、一時的な AWS 認証情報(STS)を取得する事ができ、これにより他の AWS サービスを利用する事ができる。

利用できるサービスは、S3 や DynamoDB といった AWS サービスである事が多い。