AWS
cognito

Cognitoの説明に使われている言葉を整理する

はじめに

Cognitoを使ってみようと思って色々読んだけど、認証周りは全くど素人なのでわからない言葉を調べてみたメモです。

追記

こちらのAWSの中の人がアップしていたslide share を見たほうがわかるかもしれないのでどうぞ。

Cognitoとは何か

AWSのAmazon Cognito とはに書いてある通り。この中で

  • Amazon Cognito とは
  • Amazon Cognito の機能

に書いてある言葉でわからなかったものを整理する。こちらも参考にさせていただきました。

ユーザディレクトリとは何か

大きめな会社でWindowsを使ったりしていると「Active Directory」という名前を聞いたことがあるかもしれないが、似たようなもの、と理解した。前述のAWSのAmazon Cognito とはにもあるが、ユーザディレクトリは以下の機能を提供、管理する。

  • ユーザの追加方法を提供する(サインアップ)
  • サインアップに必要な情報、ステップを定義できる
  • ユーザの認証方法を定義できる(サインイン)
  • サインアップ/サインイン処理の代替をさせるCognito以外のサービスを設定できる(外部IDプロバイダー)

Amazon Cognito User Poolとは何か

ユーザディレクトリを実現するための機能の名称。Connection Poolとかと同じ、ユーザをpoolする。コンソールでUserPoolを作ってみるとわかるが、作成時に上記のユーザディレクトリで提供、管理するパラメタの設定を行う。あとから編集も可能。

外部IDプロバイダとは何か

これも前述のCognitoの説明ページにある通り、FacebookやTwitterやAmazonなどのCognitoの外部にあるアカウント情報を提供するサービスをAWSの説明ではこう呼んでいる様子。自社システムですでにアカウント管理を実装済みの場合、それも「Cognitoからみたら外」になるので外部IDプロバイダになるが、SAMLに対応していないと外部IDプロバイダーとして登録できない。

移行したいときどうするんだろう?要調査。

注意

CognitoコンソールでUser Poolの設定画面に「フェデレーション」メニューと「IDプロバイダー」という項目があるが、後述の「Amazon Cognito フェデレーテッドアイデンティティ」とは別もの。「外部IDプロバイダー」を設定するだけであり、フェデレーテッドアイデンティティ側の設定には何も影響しない。(はず)

スクリーンショット 2018-01-03 13.06.22.png

Amazon Cognito フェデレーテッドアイデンティティとは何か

ふぇでれーてっどって何??ということでアルクで調べた。

federation 【名】
連邦[連合・連盟]化[加入]◆【用法】不可算名詞
連邦、連合、連盟◆国家や組合などが独自の組織を維持しながら構成する連合体。
federated 【形】
連合[連盟]した、連邦制になった

ふむ。JAFのFやFIFAの最初のFの「Federation」の形容詞か。

で、これはCognito UserPoolまたは外部のアカウント情報を提供するサービス(FBやTwitterなど)の認証情報を使い、一意なIDを割り当てる&そのID任意のアクセス権限(=IAMロール)を付与することができる機能の様子。認証前と後で異なるアクセス権限を割り当てることができる。
Federated Identityの1つ1つを管理する器を「ID Pool」と呼んでおり、ID pool単位で以下を提供、管理する。

  • 認証前後に与えるロールの設定
  • 「認証済/未済」をどの「認証プロバイダー」に提供してもらうかの設定
  • 「プッシュ型」データ同期の要否(未対応言語あり。注意。)
  • Kinesisストリームとの連携(Cognitoストリーム。よくわかってない)
  • Sync Trigger時のLambdaの呼び出し設定

注意

Federated IDの認証プロバイダーはUser Poolの外部IDプロバイダーよりも選択肢が広い。こちらの場合、自社サービスの認証情報を流用するにあたってSAMLなどに対応する必要はない。(「カスタム」認証プロバイダーでは、クライアントアプリ側の実装で責任を持ってtoken発行を行うのでSAML対応などは不要になる)

Amazon Cognito Syncとは何か

Federated IDに紐づいた データの同期を行える機能。UserPoolのユーザ単位ではない。AWSのCognito Syncの説明ではFederated ID=Cognito IDとして書かれているので注意! :(

key-value型のデータセットを同期させることができ、1セット1MB, 20個まで1つのFederated IDに紐づけることができる。AWSのCognitoサービスをマスターとし、インターネットに繋がっているクライアント同士でデータ同期することができる。同期トリガーは同期メソッドを各クライアントから呼び出す。AWS側からプッシュするパターンの同期もID Poolの設定によっては可能だが、対応していない言語があるので注意。オフライン時のデータ更新も考慮されている。

よもやま

名前分かりにくいなぁ

名前 意味
外部IDプロバイダー Cognito User Pool においてCognito以外で認証機能を提供するサービス
Federated Identity (Federated ID) 前述の機能名、またはそれで発行したID1つ1つ
ID pool Federated IDを管理、設定するPool
認証プロバイダー Federated IDの付与に使われる「認証済/未済」を提供するサービス