Amazon Cognito

# Amazon Cognito

https://d1.awsstatic.com/webinars/jp/pdf/services/20170517_AWS-BlackBelt_AmazonCognito.pdf

## AWS のモバイルサービス

## Amazon Cognito とは

## Congnito Identity

### Your User Pools

  • マネージドなユーザー管理サービス
  • 認証を担当
  • MFAオプション、パスワードポリシー、ユーザーのグルーピング、認証フローをサポート
  • ユーザーの操作
    • ユーザのサインアップとサインイン
    • ユーザプロファイル
    • パスワード紛失
    • トークンベースの認証
    • Email or 電話番号による確認
    • SMS ベースのMFA
    • AWS Lambda を利用した認証のカスタマイズ
  • 管理者の操作
    • ユーザプールの作成と管理
    • 属性の定義
    • 必須属性データの要求
    • アプリのパーミッション
    • パスワードポリシーのセットアップ
    • ユーザーの検索
    • ユーザーの管理

 

  • 既存のユーザー管理からの移行
    • インポートパターン
      • CsvファイルをUser Pool へインポート
    • 既存処理をフックして作成
  • Amazon API Gateway とのインテグレーション
    • カスタムオーソライザー
      • OAuth SAMLといったベアラートークン認証の仕組みを用いてアクセスコントロールを行う
      • Lambda を利用して許可するアクセスポリシーを生成して返却する
    • ネイティブサポート
      • ユーザプール内に存在するユーザーをもとにした認証のためのIDトークンを受け取るようにAPI Gateway を構成

 

### Federated Identities

  • 概要
    • 認可を担当
    • 認証は外部Identityy Provider 等に移譲
    • 未認証ユーザーにUnauth Identity としてゲスト用権限(IAM Role)を払い出すことも可能
    • 1人の人間が持つ複数のIdentity Provider のアカウント情報をIdentity としてまとめる(=Federation)
    • AWS リソースへのアクセス権の管理(Temporary Credential IAM から発行している)
    • ロールベースのアクセコントロールIdentity IDごとに制御することも可能(自分のリソースだけにアクセスさせるようにしたい)
  • 概念
    • Identity
      • 複数IDプロバイダーのアカウント、複数デバイスを持ちうる1人のユーザ
    • IdentityID
      • Identity に付与されるID
    • IdentityPool
      • Role等の紐付けを設定するプール。大抵の場合1つのアプリまたはサービスに相当する単位
      • 未認証アクセスのON/OFFの設定
    • Authenticated Role
      • 認証済みIdentity に付与する権限を定義したIAM Role
      • 1つのIdentity Poolにつき1つ設定
    • Unauthenticated Role
      • 未認証Identity に付与する権限を定義したIAM Role
    • Authentication Providers
      • Identity Pool に紐づける認証プロバイダ

## Coginito Sync

  • 概要
    • Federated Identities Identity が持つ複数デバイス間でデータの同期を担当(データ共有ではない)
    • オフラインサポート
    • バックエンド不要(シンプルなクライアントSDKの形で提供)
    • データ同期実行時にPush SyncCognito StreamsCognito Events などの処理を連動させることも可能
  • 同期処理
    • Synchronize
      • 接続が不安定になるときの処理の実装は自身で行わなければならない
      • コールされるとクラウド上の変更がPull され、ローカルの変更がPush される
    • Syncronize on Connectivity
      • 実行時に接続可能であれば通常のSynchronize メソッドと同様の振る舞いをする
      • 接続できなかった時は接続状態を監視し、可能になったときに同期を行う
      • 複数回呼び出された時は最後のオペレーションがキープされる
    • Amazon Cognito Push Sync
      • SNS Mobile Push との連携
      • Mobile Push を受け取ったアプリはデータストアの再同期を行うといった処理が可能
    • Amazon Cognito Stream
      • Amazon Kinesis と連携
        • Cognito のデータセットの更新タイミングでKinesis ストリームで更新や同期のデータを受け取ることができる
    • Amazon Cognito Events
      • Amazon Lambda との連携
        • データが更新されたタイミングで発火し、サーバーサイドで登録データのバリデーションや加工を行う処理をLambda に行わせることができる

 

## 雑感

Cognito 自体が今まで認証・認可のサービスという認識で深くは知らなかった。

Identity Pool が認証を担当し、Federated Identity IAM IdP プロバイダに問い合わせを行い認可を行うという構図が掴めて理解が深まった。

バイス間の同期のあたりもCognito を介して行うことができるので複数デバイスで複数のプラットフォームを利用したい場合には絶対に利用することになるサービスになる。モバイルだと電場が不安定になる場合もあるので実装上は注意が必要というのもわかってはいるが、なかなか丁寧にエラーハンドリングしないといけないので難しそう。。。

認証の仕組み自体が、いろいろな場所に問い合わせを行う形になっているので実装を通して理解する感じになると思う。