Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Amazon Cognito Deep Dive @ JAWS DAYS 2016

4,387 views

Published on

2016年3月12日、JAWS DAYSでの登壇資料です。
http://jawsdays2016.jaws-ug.jp/
当日は冒頭でデモをしました。

Published in: Engineering
  • Be the first to comment

Amazon Cognito Deep Dive @ JAWS DAYS 2016

  1. 1. Amazon  Cognito Deep  Dive Amazon  Web  Service  Japan Solutions  Architect Akihiro  Tsukada(@akitsukada) 2016.03.12  JAWS  DAYS  2016  #jawsdays #jawsug
  2. 2. AWSでの担当 スタートアップのお客様 モバイル系ソリューション サーバレスアーキテクチャ 低コストアーキテクチャ エンジニア的な属性 SI→Web→Startup(CTO)→AWS Ruby,  iOS OOP,  SOLID,  KISS 好き ⼆二郎郎(桜台ホーム) ジャッキーチェン 妻と娘 塚⽥田 朗弘 @akitsukada
  3. 3. User  identity  and  sync  with Amazon  Cognito
  4. 4. モバイルアプリ開発を⽀支えるAWS Serverless Backend API  Gateway Lambda Content Delivery S3 CloudFront App Testing Device  Farm User Sign-­In Cognito Push Notifications SNS App Analytics Mobile  Analytics RedShift User  Data Storage S3 Cognito SDKs Mobile   SDKs iOS Android Big  Data  & Machine  Learning Kinesis Machine  Learning DynamoDB Mobile  Hub AWS  Global  Infrastructure APN  Partner  Solutions
  5. 5. 2-‐‑‒Tier ・認証API ・データ保存API Amazon  Cognito (認証/認可) Amazon  DynamoDB (データ保存) Web DB バッチ プッシュ通知 Amazon SNS  Mpbile Push (プッシュ通知) プッシュ通知 AWS  Lambda (イベント処理理) LB 従来 AWS  Lambda (ロジック) Amazon  RDS (DB) 2-‐‑‒Tier  Architecture
  6. 6. Focus  your Business on  AWS  !
  7. 7. Amazon  Cognito   “Your  app  data  is  secure,  available  offline,  and  kept  in  sync  between  devices” クロスデバイス・クロスプ ラットフォームなデータ同 期 デバイスとプラットフォーム をまたがってユーザのデータ を同期 モバイルデバイスから全 AWSサービスへのセキュ アなアクセス セキュリティのベストプラク ティスを実装 アイデンティティとアクセ スの管理理を簡潔に IDプロバイダを越えたユニー クなアイデンティティとして ユーザを管理理 独⾃自認証
  8. 8. Amazon  Cognito   “Your  app  data  is  secure,  available  offline,  and  kept  in  sync  between  devices” クロスデバイス・クロスプ ラットフォームなデータ同 期 デバイスとプラットフォーム をまたがってユーザのデータ を同期 モバイルデバイスから全 AWSサービスへのセキュ アなアクセス セキュリティのベストプラク ティスを実装 アイデンティティとアクセ スの管理理を簡潔に IDプロバイダを越えたユニー クなアイデンティティとして ユーザを管理理 独⾃自認証
  9. 9. ID  プロバイダ ゲストアクセス 独⾃自認証システム ユニーク ID Joe Anna Bob デバイス プラットフォーム AWS  サービス 複数の ID  プロバイダをサポート ID  プロバイダと簡単に連携して認証 Amazon,  Facebook,  Twitter,  Google,   OpenID Connect などに対応 ユニークなアイデンティティ 認証済ユーザに対してユニークIDを割り当て、 デバイスやプラットフォームをまたがって認 識識と管理理 Amazon  Cognito  Identity Mobile Analytics S3 DynamoDB Kinesis 容易易なセキュリティのベストプラク ティス実装 モバイルデバイスからAWSリソースへのセ キュアなアクセスのためのやり取りをIAMと 連携して簡略略化
  10. 10. Amazon  Cognitoの認証フロー Amazon   Cognito   ID (Temp   Credentials) Amazon   DynamoDB End   Users Developer App   with   AWS   Mobile   SDK Access to  AWS   Services Amazon   Cognito   Identity  Broker User  Name   Password Amazon   Cognito   ID,   Temp   Credentials Amazon   S3 Amazon   Mobile   Analytics Amazon   Cognito   Sync  Store AWS   Management   Console Token Pool  ID Role  ARNs User  Authentication   System (Running   on   AWS  or  not) Token
  11. 11. Developer  Authenticated  Identity Username And  Password 独⾃自認証システム パブリックIDプロバイダの併⽤用 CognitoのIDを元にパブリックなIDプロバイ ダと独⾃自認証を併⽤用して管理理することも可能 認証基盤の実装が必要 GetOpenIdTokenForDeveloperIdentity()  を実 装する 既存の認証基盤を使う場合、改修が必要 独⾃自認証システムの利利⽤用 パブリックなIDプロバイダではなく独⾃自の UsernameとPasswordを使って認証
  12. 12. Amazon  Cognitoの認証フロー (Developer  Authenticated  Identities) Amazon   Cognito   ID (Temp   Credentials) Amazon   DynamoDB End   Users Developer App   with   AWS   Mobile   SDK Access to  AWS   Services Amazon   Cognito   Identity  Broker Get  OpenID  Token User  Name   Password Amazon   Cognito   ID,   Temp   Credentials Amazon   S3 Amazon   Mobile   Analytics Amazon   Cognito   Sync  Store AWS   Management   Console OIDC  Token Pool  ID Role  ARNs 独⾃自認証システム AWS上で稼働して いなくてもOK OIDC  Token OIDC  Token
  13. 13. 未認証ユーザのゲストアクセス (Unauthenticated  Identities) • IDプロバイダで認証をしていないユーザをゲス トユーザとしてユニークIDの付与と管理理 – 未認証の場合、IDはデバイスと紐紐づくので同⼀一デバイスから のアクセスの場合に同⼀一ユーザとして認識識される – 未認証によるアクセスを許可しない設定も可能 • アプリやAWSリソースへのアクセスにアカウン トの作成や認証が不不要 – アクセス権限は未認証ユーザに対して割り当てたIAM  Roleの ポリシーに基づく – センサーデバイス等のスクリーンや⼊入⼒力力装置のないデバイスに 対してもユニークIDの付与と管理理が可能 • データはクラウド上に保存され後からログインし た場合は⾃自動でマージ Visitor Preferences Cognito   Store Guest EC2 S3 DynamoDB Kinesis
  14. 14. (例例)ゲストアクセスのユースケース 1. イベント会場でBLE(Bluetooth  Low  Energy)を利利⽤用したBeacon端末を配置 2. ユーザ登録不不要なイベント公式アプリを配布し、ゲストユーザとして認証情報を取得 3. アプリはBeaconを拾拾って位置情報等を直接KinesisへPUT • ゲストユーザはKinesisへのPUTだけを許可 4. Kinesisは受け取ったデータを元にリアルタイムに処理理を実施(ヒートマップ作成等) Amazon   Kinesis Cognito   Identity   Broker Identity  Pool Role  ARN Cognito ID Temporaly Credential PUT
  15. 15. STS(Security  Token  Service)との関係? Sync Identity AWS  IAMAmazon SNS Amazon   Kinesis AWS Lambda
  16. 16. 基本フロー http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/authentication-­flow.html
  17. 17. 拡張(簡略略化)フロー http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/authentication-­flow.html
  18. 18. ほとんどの場合は拡張フローをオススメ • デバイスで認証情報を取得するためのAPIアクセスが⼀一つ少ない • すべてのAPIアクセスを Amazon  Cognito に対して⾏行行える • アプリケーションにロールを埋め込む必要がなくなる • 認証情報のブートストラッピングを開始するために必要なものは、 ID  プールの ID  とリージョンのみ • AssumeRoleのオプションを指定したい場合だけ基本フローでSTSを 意識識すればよい • 例例)  ログインしたユーザに応じてS3のアクセス可能パスを制御したい DELETE操作は管理理者のみに許可したい など 拡張(簡略略化)フロー http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/authentication-­flow.html
  19. 19. Amazon  Cognito   “Your  app  data  is  secure,  available  offline,  and  kept  in  sync  between  devices” クロスデバイス・クロスプ ラットフォームなデータ同 期 デバイスとプラットフォーム をまたがってユーザのデータ を同期 モバイルデバイスから全 AWSサービスへのセキュ アなアクセス セキュリティのベストプラク ティスを実装 アイデンティティとアクセ スの管理理を簡潔に IDプロバイダを越えたユニー クなアイデンティティとして ユーザを管理理 独⾃自認証
  20. 20. モバイルSDKを使う際の認証情報の扱い • AWSの各種サービスはあくまでバックエンド • エンドユーザは必ずしもAWSユーザではない – アプリは開発者のアカウントで認証・認可を受ける必要がある • アプリに開発者アカウントのアクセスキー等を埋め込んだら – アクセスキーが広範にばら撒かれることに – アクセスキーの不不正利利⽤用を⽌止めるためにキーを無効化したら →  全ユーザへのサービスが停⽌止!! • アクセスキーの定期的な更更新で対処するにしても – 更更新のたびにバージョンアップは⾮非現実的 – 更更新前のアプリからはサービス利利⽤用不不可に
  21. 21. セキュアなAWSアクセスを提供するには • アプリに認証情報を埋め込むべきではない – アクセスキーが広範囲に配布されてしまう – アクセスキーの更更新はアプリのアップデートを伴うため⾮非現実的 • エンドユーザ/端末ごとに異異なる認証情報を提供すべき – ユーザごとに必要最⼩小限の権限を与えるのは重要 – 不不正利利⽤用発覚時に不不正ユーザのみ権限を停⽌止 • 認証情報は期限が来たら無効化されるべき – 不不正ユーザの影響も期限付きに
  22. 22. Amazon  Cognitoのセキュリティ 細やかなアクセス制御 IAM  との連携で AWS  リソースへの細かなアクセ ス制御を実現 AWS  Credentials の保護 必要な権限だけを付与された⼀一時的なクレデンシャル を取得できるので、アプリにクレデンシャルを埋め込 まなくてよい セキュリティのベストプラクティスを⽀支援 セキュリティトークンサービスと連携したり、トー クンベンディングマシンを構築する必要はない セキュアに AWS  サービスを利利⽤用 EC2 S3 DynamoDB Kinesis S3 DynamoDB Get Delete Put
  23. 23. Amazon  Cognito   “Your  app  data  is  secure,  available  offline,  and  kept  in  sync  between  devices” クロスデバイス・クロスプ ラットフォームなデータ同 期 デバイスとプラットフォーム をまたがってユーザのデータ を同期 モバイルデバイスから全 AWSサービスへのセキュ アなアクセス セキュリティのベストプラク ティスを実装 アイデンティティとアクセ スの管理理を簡潔に IDプロバイダを越えたユニー クなアイデンティティとして ユーザを管理理 独⾃自認証
  24. 24. Amazon  Cognito  Sync  クラウドへのデータ保存と同期 User  Data   Storage  and Sync Any  Platform iOS/Android/FireOS アプリのデータ、設定、状態などを保存 アプリやデバイスのデータをクラウドに保存で き、ログイン後にマージされる クロスデバイス、クロスプラットフォームで同期 ユーサデータや設定をデバイスをまたいで同期 k/v  data Identity  pool バックエンド不不要 スケーラブルで信頼性の⾼高いデータ同期基盤を簡単に 利利⽤用可能
  25. 25. SDK ローカルデータストア オフライン動作 データはまずローカルのデータストレージに保存されるので、 電波が不不安定もしくは不不通であってもシームレスに動作できる インテリジェントな同期処理理 同期メソッドはローカルとクラウドのデータのバージョンを⽐比 較して、データをプッシュ/プル 柔軟なコンフリクトの解決 同期メソッドは、変更更を読み取り後、ローカルの変更更をクラウ ドのデータストアへ書き込む。デフォルトでは、最後の書き込 みを有効として保存する。開発者はコンフリクト処理理を独⾃自に 上書きして実装することもできる。 Amazon  Cognito  Sync  クラウドへのデータ保存と同期
  26. 26. Cognito Sync  データモデル Identity  Pool:  アプリユーザのPool。アプリ 間で共有する場合もある Identity:  個々のユーザ。IDプロバイダ間を またいでユニーク。ゲストユーザも可 Dataset:  ユーザごとのデータのグループ Record:  Key/Valueのユーザデータ AWS   Account Dataset Identity Identity Identity Dataset Dataset Identity   Pool 1:60 1:n 1:20 Dataset Dataset Record 1:1024 You Your  App Your  App  Users User  Data   Container User  Data
  27. 27. Cognito Sync  データモデル 例例 User情報 Dataset ゲームとユーティリ ティ、2種類アプリを 提供 Game情報 Dataset Identitypool1 ーティリティ App Game App AWS   Account Dataset Identity Identity Identity Dataset Dataset Identity   Pool 1:60 1:n 1:20 Dataset Dataset Record 1:1024 You Your  App Your  App  Users User  Data   Container User  Data
  28. 28. Dataset • 各Identityは最⼤大20個のDatasetを利利⽤用可能 • 各Datasetは1MBまでKey/Value形式のデータを保存可能 – Key/Valueともに英数字の⽂文字列列 – 保存可能なキーの数は1024個まで – 容量量内であれば⽂文字数の制限はなし – バイナリデータはbase64でエンコードして保管する • 保管されるデータはすべて暗号化され、通信はHTTPSで暗号 化されている – ただし、ローカルキャッシュはユーザ側で暗号化を実装しなければ暗号化はさ れない
  29. 29. 2種類のSyncronize • synchronize – 接続が不不安定な場合などのエラー時の処理理は⾃自分で実装する必要が ある – コールされるとクラウド上の変更更がpullされ、ローカルの変更更は pushされる • synchronizeOnConnectivity – 実⾏行行時に接続可能であれば通常のsynchronizeメソッドと同様の振 る舞いをする – 接続できなかったときは接続状態を監視し可能になったら同期され る – 複数回呼び出した場合は最後のオペレーションがキープされる
  30. 30. モバイルアプリ (デバイス1) Mobile  SDK Amazon  Cognito Sync  Store 1.  データ同期 モバイルアプリ (デバイス2) Mobile  SDK Amazon  SNS Mobile  Push 2.  プッシュ通知 3.  データ同期 Amazon  SNS  Mobile  Push  との連携 Amazon  Cognito  がデータストアが更更新されたタイミングで、Amazon  SNS  Mobile   Push  と連携して、各デバイスにプッシュ通知を送信できる。 プッシュ通知を受け取ったアプリはデータストアの再同期を⾏行行うように実装するなど。 Amazon  Cognito  Push  Sync
  31. 31. Amazon  Kinesis  との連携 Amazon  Cognito のデータストアが更更新されたタイミングで、Amazon  Kinesis  スト リームで更更新や同期のデータを受け取ることができる。 モバイルアプリ Mobile  SDK Amazon  Cognito Sync  Store 1.  データ同期 Amazon  Kinesis 2.  Stream Content ストリームの内容 3.  例例えば Amazon  Redshift { "identityPoolId" : "Pool Id” "identityId" : "Identity Id ” "dataSetName" : "Dataset Name” "operation" : "(replace|remove)” "kinesisSyncRecords" : [ { "key" : "Key", "value" : "Value", "syncCount" : 1, "lastModifiedDate" : 1424801824343, "deviceLastModifiedDate" : 1424801824343, "op": "(replace|remove)" }, ... ], "lastModifiedDate": 1424801824343, "kinesisSyncRecordsURL": "S3Url", "payloadType" : "(S3Url|Inline)", "syncCount" : 1 } Amazon  Cognito  Stream
  32. 32. モバイルアプリ Mobile  SDK Amazon  Cognito Sync  Store 1.  データ同期 AWS  Lambda 2.  Sync  Trigger Amazon  Lambda  との連携 3.  何か処理理 Amazon  Cognito  Events Key Value 住所 東京都□渋⾕谷区□松濤□1丁⽬目 Key Value 住所 東京都渋⾕谷区松濤1丁⽬目 元データ 修正済みデータ 空⽩白を削除 するプログラム Lambda  Function (Node.js)
  33. 33. Use  cases
  34. 34. WebとMobileを跨ったユーザ識識別
  35. 35. RSSリーダサービス • ブラウザとモバイルアプリ間でシームレスにデータ連携 • サーバサイドのコードなし、この程度度であれば DynamoDBすら不不要 App  with   AWS  Mobile   SDK JavaScript SDK S3 1.  HTTP(S)アクセス 2.  HTMLとJSをレスポンス Cognito Identity 3.  認証・認可 ・ FBやGoogleのIDでログイン Cognito Sync 4.  データの同期 ・ MobileSDK、ブラウザ間でデータ同期 5.  データのPush/Pull
  36. 36. 料料⾦金金 • 無料料利利⽤用枠 – ⽉月あたり100万回の同期オペレーション – ⽉月あたり10GBのデータストア – 最初の12ヶ⽉月のみ • それ以降降 – 10000回の同期オペレーションあたり$0.15 – 同期⽤用データストア10GBを越えた分について1GBあたり$0.15
  37. 37. 制約事項 アカウントあたりのIdentity  Pool数 60 Identity  PoolあたりのIdentity数 無制限 Identity  Pool名の⽂文字数 128bytes ログインプロバイダ名の⽂文字数 2048bytes ⼀一回のList/Lookupコール時の結果数 60 Cognito Identity Cognito Sync IdentityあたりのDataset数 20 DataSet辺りの最⼤大レコード数 1024 1DataSetの最⼤大サイズ 1MB DataSet名の⽂文字数 128bytes Bulk  Publish時の最⼩小待ち時間 24時間
  38. 38. 参考資料料 • Twitter:  @awsformobile • ブログ – http://mobile.awsblog.com/ • ドキュメント – Amazon  Cognito:   https://aws.amazon.com/documentation/cognito/ – Amazon  Mobile  Analytics:   https://aws.amazon.com/documentation/mobileanalytics/
  39. 39. 公式資料料集 • AWS  クラウドサービス活⽤用資料料集 – http://aws.amazon.com/jp/aws-‐‑‒jp-‐‑‒introduction/
  40. 40. Focus  your Business on  AWS  !
  41. 41. ご参加ありがとうございました。

×