Successfully reported this slideshow.
Your SlideShare is downloading. ×

AWS Black Belt Tech シリーズ 2015 - Amazon Cognito

More Related Content

More from Amazon Web Services Japan

AWS Black Belt Tech シリーズ 2015 - Amazon Cognito

  1. 1. Amazon Cognito Mobile Identity Management and Data Synchronization Amazon Data Service Japan K.K. Solutions Architect Keisuke Nishitani(@Keisuke69) 2015.09.28
  2. 2. 自己紹介 { "Name" : "西谷圭介", "Twitter" : "@Keisuke69", "Profile" : { "Role" : "Solution Architect", "Customers": [ "Web Services", "Start-up" ], "Services" : [ "AWS Lambda", "Amazon API Gateway", "All Mobile Services" ] } }
  3. 3. Mobile開発における 課題
  4. 4. モバイル開発における課題 デベロッパーが直面している課題 • 複数プラットフォームの断片的な利用 • スケーラブルな同期処理の実装が困難 • 高い運用管理コスト • ユーザエクスペリエンスの喪失 • ユニークなユーザアイデンティティ管 理の難しさ • 限られた予算 Undifferentiated Heavy Lifting モバイルアプリケーション アイデンティティの管理と認可 データ同期 非同期通信 アクティブなデバイスの分析 ユーザの行動分析 エンゲージメントの分析 Push通知 イベントトリガー Platformにとらわれない モバイルバックエンド データのバリデーションと変換 ファイル/メディア保管用ストレージ 共有データベース データの収集 And More…. AWS Cloud Infrastructure
  5. 5. モバイル開発における課題 モバイルアプリケーション アイデンティティの管理と認可 データ同期 非同期通信 アクティブなデバイスの分析 ユーザの行動分析 エンゲージメントの分析 Push通知 イベントトリガー Platformにとらわれない モバイルバックエンド データのバリデーションと変換 ファイル/メディア保管用ストレージ 共有データベース データの収集 And More…. AWS Cloud Infrastructure モバイルに最適化されたコネクタ (Kinesis, S3, DynamoDB, SQS) Amazon Cognito Amazon Mobile Analytics Amazon SNS Mobile Push AWS Lambda
  6. 6. AWS Mobile Services Amazon Cognito Kinesis Connector DynamoDB Mapper S3 Transfer Mgr SQS Client SES Client グローバルインフラ (リージョン、アベイラビリティゾーン、エッジロケーション) コアとなるサービス群 モバイルに最適化 されたコネクタ モバイルに最適化 されたサービス お客様のモバイルアプリ、ゲーム、デバイス AWS Mobile SDK, API Endpoints, Management Console コンピュート ストレージ ネットワーク 分析 データベース 統合されたSDK Amazon Mobile Analytics Amazon SNS AWS Lambda AWS Device FarmAmazon API Gateway
  7. 7. 統合されたAWS Mobile SDK • 全てのサービスに共通の認証機構 • オンライン・オフラインを自動でハンドリング • クロスプラットフォームのサポート:Android, iOS, Fire OS, Unity, Xamarin • Mobile OSへの最適化 例: ローカルオフラインキャシュを利用する アーキテクチャ • メモリフットプリントの削減 • 同梱するパッケージの選択も可 • 各プラットフォームのエンハンスに追従 iOS Android Fire OS Unity Xamarin
  8. 8. ユーザ認証 アクセスの認可 データの同期 ユーザの行動分析 保持率の追跡 メディアの管理 メディアの配信 プッシュ通知の送 信 共有データの保存 データのリアルタイム解析 Your Mobil e App モバイルアプリ開発の課題 Amazon Cognito (Identity Broker) AWS Identity and Access Management Amazon Cognito (Sync) Amazon Mobile Analytics Amazon Mobile Analytics Amazon S3 Transfer Manager Amazon CloudFront (Device Detection) Amazon DynamoDB (Object Mapper) Amazon Kinesis (Recorder) Amazon SNS Mobile Push AWS Mobile SDK
  9. 9. User identity and sync with Amazon Cognito
  10. 10. Amazon Cognito “Your app data is secure, available offline, and kept in sync between devices” クロスデバイス・クロスプ ラットフォームなデータ同 期 デバイスとプラットフォーム をまたがってユーザのデータ を同期 モバイルデバイスから全 AWSサービスへのセキュ アなアクセス セキュリティのベストプラク ティスを実装 アイデンティティとアクセ スの管理を簡潔に IDプロバイダを越えたユニー クなアイデンティティとして ユーザを管理 独自認証
  11. 11. Amazon Cognito “Your app data is secure, available offline, and kept in sync between devices” クロスデバイス・クロスプ ラットフォームなデータ同 期 デバイスとプラットフォーム をまたがってユーザのデータ を同期 モバイルデバイスから全 AWSサービスへのセキュ アなアクセス セキュリティのベストプラク ティスを実装 アイデンティティとアクセ スの管理を簡潔に IDプロバイダを越えたユニー クなアイデンティティとして ユーザを管理 独自認証
  12. 12. 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と 連携して簡略化
  13. 13. 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
  14. 14. (参考)OpenID Connect • 2014年2月に最終承認されたID連携に関する仕様 • 準拠しているIDプロバイダをCognitoでも利用可能 例:Salesforce, Ping Identity, Google etc…
  15. 15. Developer Authenticated Identity Username And Password 独自認証システム パブリックIDプロバイダの併用 CognitoのIDを元にパブリックなIDプロバイ ダと独自認証を併用して管理することも可能 認証基盤の実装が必要 GetOpenIdTokenForDeveloperIdentity() を実 装する 既存の認証基盤を使う場合、改修が必要 独自認証システムの利用 パブリックなIDプロバイダではなく独自の UsernameとPasswordを使って認証
  16. 16. 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
  17. 17. 未認証ユーザのゲストアクセス (Unauthenticated Identities) • IDプロバイダで認証をしていないユーザをゲス トユーザとしてユニークIDの付与と管理 – 未認証の場合、IDはデバイスと紐づくので同一デバイスから のアクセスの場合に同一ユーザとして認識される – 未認証によるアクセスを許可しない設定も可能 • アプリやAWSリソースへのアクセスにアカウン トの作成や認証が不要 – アクセス権限は未認証ユーザに対して割り当てたIAM Roleの ポリシーに基づく – センサーデバイス等のスクリーンや入力装置のないデバイスに 対してもユニークIDの付与と管理が可能 • データはクラウド上に保存され後からログインし た場合は自動でマージ Visitor Preferences Cognito Store Guest EC2 S3 DynamoDB Kinesis
  18. 18. (例)ゲストアクセスのユースケース 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
  19. 19. (参考)IAM Role用のアクセスポリシーの作 成 { "Effect":"Allow", "Action":["s3:*"], "Resource":"*" } { "Effect": ”Deny", "Action": ["dynamodb:*"], "Resource": "*" } { "Effect": "Allow", "Action": [”cognito-sync:*"], "Resource": "*" } Allow Actions: All S3, Sync store Operations Resource: All resources within these services Deny Actions: All DDB Operations Resource: All resources
  20. 20. アクセスポリシーによる制限 (Policy Variables) Allow Actions: All sync operations Resource: Only to that identity { "Effect": "Allow”, "Action": ["s3:GetObject”,"s3:PutObject”], "Resource": ["arn:aws:s3::: myBucket/amazon/snakegame/ ${cognito-identity.amazonaws.com:sub}"] } { "Effect":"Allow", "Action":"cognito-sync:*", "Resource":["arn:aws:cognito-sync:us-east-1: 123456789012:identitypool/ ${cognito-identity.amazonaws.com:aud}/identity/ ${cognito-identity.amazonaws.com:sub}/*"] } Allow Actions: S3 Get/Put operations Resource: Only to a specific part of bucket to that identity
  21. 21. Cognito Identityの基本的な流れ 1. マネージメントコンソール上でIdentity Poolを作成す る 2. AWS SDK for Android/iOSをプロジェクトに追加する 3. Amazon Cognito credentials providerを初期化する 4. IDプロバイダの認証情報を渡す ※未認証ユーザの場合は不要 5. Cognitoの認証情報を利用して、その他のAWSサービ スのクライアントを初期化する
  22. 22. コード例(Android) // Credential Providerの初期化 CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( getApplicationContext(), ”ap-northeast-1:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX", // Identity Pool ID Regions.AP_NORTHEAST_1 // Region ); // Facebookユーザで認証する場合 Map logins = new HashMap(); logins.put("graph.facebook.com", Session.getActiveSession().getAccessToken()); credentialsProvider.setLogins(logins); //AWSサービスへのアクセス AmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider); //Congito IDの取得 String identityId = credentialsProvider.getIdentityId(); ※上記例では省略していますが、事前にIDプロバイダを利用した認証処理の実装が必要です ※実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること
  23. 23. コード例(JavaScript) // 以下ではFacebookユーザを認証済ユーザとして使用 AWS.config.region = ‘ap-northeast-1’; // リージョンの指定(必須) AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: ’ ap-northeast-1:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX’, Logins: { graph.facebook.com : facebookResponse.authResponse.accessToken } }); // Cognitoから付与されたIDの取得 AWS.config.credentials.get(function(err) { if (!err) { console.log("Cognito Identity Id: " + AWS.config.credentials.identityId); } });
  24. 24. Amazon Cognito “Your app data is secure, available offline, and kept in sync between devices” クロスデバイス・クロスプ ラットフォームなデータ同 期 デバイスとプラットフォーム をまたがってユーザのデータ を同期 モバイルデバイスから全 AWSサービスへのセキュ アなアクセス セキュリティのベストプラク ティスを実装 アイデンティティとアクセ スの管理を簡潔に IDプロバイダを越えたユニー クなアイデンティティとして ユーザを管理 独自認証
  25. 25. モバイルSDKを使う際の認証情報の扱い • AWSの各種サービスはあくまでバックエンド • エンドユーザは必ずしもAWSユーザではない – アプリは開発者のアカウントで認証・認可を受ける必要がある • アプリに開発者アカウントのアクセスキー等を埋め込んだら – アクセスキーが広範にばら撒かれることに – アクセスキーの不正利用を止めるためにキーを無効化したら → 全ユーザへのサービスが停止!! • アクセスキーの定期的な更新で対処するにしても – 更新のたびにバージョンアップは非現実的 – 更新前のアプリからはサービス利用不可に
  26. 26. セキュアなAWSアクセスを提供するには • アプリに認証情報を埋め込むべきではない – アクセスキーが広範囲に配布されてしまう – アクセスキーの更新はアプリのアップデートを伴うため非現実的 • エンドユーザ/端末ごとに異なる認証情報を提供すべき – ユーザごとに必要最小限の権限を与えるのは重要 – 不正利用発覚時に不正ユーザのみ権限を停止 • 認証情報は期限が来たら無効化されるべき – 不正ユーザの影響も期限付きに
  27. 27. Amazon Cognitoのセキュリティ 細やかなアクセス制御 IAM との連携で AWS リソースへの細かなアクセ ス制御を実現 AWS Credentials の保護 必要な権限だけを付与された一時的なクレデンシャル を取得できるので、アプリにクレデンシャルを埋め込 まなくてよい セキュリティのベストプラクティスを支援 セキュリティトークンサービスと連携したり、トー クンベンディングマシンを構築する必要はない セキュアに AWS サービスを利用 EC2 S3 DynamoDB Kinesis S3 DynamoDB Get Delete Put
  28. 28. Amazon Cognito “Your app data is secure, available offline, and kept in sync between devices” クロスデバイス・クロスプ ラットフォームなデータ同 期 デバイスとプラットフォーム をまたがってユーザのデータ を同期 モバイルデバイスから全 AWSサービスへのセキュ アなアクセス セキュリティのベストプラク ティスを実装 アイデンティティとアクセ スの管理を簡潔に IDプロバイダを越えたユニー クなアイデンティティとして ユーザを管理 独自認証
  29. 29. Amazon Cognito Sync クラウドへのデータ保存と同期 User Data Storage and Sync Any Platform iOS/Android/FireOS アプリのデータ、設定、状態などを保存 アプリやデバイスのデータをクラウドに保存で き、ログイン後にマージされる クロスデバイス、クロスプラットフォームで同期 ユーサデータや設定をデバイスをまたいで同期 k/v data Identity pool バックエンド不要 スケーラブルで信頼性の高いデータ同期基盤を簡単に 利用可能
  30. 30. SDK ローカルデータストア オフライン動作 データはまずローカルのデータストレージに保存されるので、 電波が不安定もしくは不通であってもシームレスに動作できる インテリジェントな同期処理 同期メソッドはローカルとクラウドのデータのバージョンを比 較して、データをプッシュ/プル 柔軟なコンフリクトの解決 同期メソッドは、変更を読み取り後、ローカルの変更をクラウ ドのデータストアへ書き込む。デフォルトでは、最後の書き込 みを有効として保存する。開発者はコンフリクト処理を独自に 上書きして実装することもできる。 Amazon Cognito Sync クラウドへのデータ保存と同期
  31. 31. 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
  32. 32. 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
  33. 33. Dataset • 各Identityは最大20個のDatasetを利用可能 • 各Datasetは1MBまでKey/Value形式のデータを保存可能 – Key/Valueともに英数字の文字列 – 保存可能なキーの数は1024個まで – 容量内であれば文字数の制限はなし – バイナリデータはbase64でエンコードして保管する • 保管されるデータはすべて暗号化され、通信はHTTPSで暗号 化されている – ただし、ローカルキャッシュはユーザ側で暗号化を実装しなければ暗号化はさ れない
  34. 34. 2種類のSyncronize • synchronize – 接続が不安定な場合などのエラー時の処理は自分で実装する必要が ある – コールされるとクラウド上の変更がpullされ、ローカルの変更は pushされる • synchronizeOnConnectivity – 実行時に接続可能であれば通常のsynchronizeメソッドと同様の振 る舞いをする – 接続できなかったときは接続状態を監視し可能になったら同期され る – 複数回呼び出した場合は最後のオペレーションがキープされる
  35. 35. コード例(Android) // Cognito Sync client の初期化 CognitoSyncManager syncClient = new CognitoSyncManager( getApplicationContext(), Regions.AP_NORTHEAST_1, // Region credentialsProvider); //Datasetをオープンし、レコードを追加 Dataset dataset = syncClient.openOrCreateDataset("myDataset"); dataset.put("myKey", "myValue"); //同期処理の実行 dataset.synchronize(new DefaultSyncCallback() { @Override public void onSuccess(Dataset dataset, List newRecords) { //Your handler code here } });
  36. 36. コード例(JavaScript) // Cognito Sync clientの初期化 AWS.config.credentials.get(function(){ var syncClient = new AWS.CognitoSyncManager(); syncClient.openOrCreateDataset('myDataset', function(err, dataset) { dataset.put('myKey', 'myValue', function(err, record){ dataset.synchronize({ onSuccess: function(data, newRecords) { // ハンドラを実装 } }); }); }); });
  37. 37. モバイルアプリ (デバイス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
  38. 38. 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
  39. 39. モバイルアプリ 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)
  40. 40. Use cases
  41. 41. WebとMobileを跨ったユーザ識別
  42. 42. 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
  43. 43. ユーザ状態の遷移 当初はゲストユーザとして
  44. 44. ユーザ状態の遷移 その後、アカウント登録 • シームレスに遷移
  45. 45. ユーザ状態の遷移 複数のアカウントをリンク • 一貫性のあるアイデンティ ティ管理が必要
  46. 46. 結局、どう使えるのか?
  47. 47. アプリからAWSリソース にアクセスする際は何も 考えず使っておけばいい
  48. 48. ありがちなデバイス間での データ共有で楽をしたいとき
  49. 49. 料金 • 無料利用枠 – 月あたり100万回の同期オペレーション – 月あたり10GBのデータストア – 最初の12ヶ月のみ • それ以降 – 10000回の同期オペレーションあたり$0.15 – 同期用データストア10GBを越えた分について1GBあたり$0.15
  50. 50. 制約事項 アカウントあたりの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時間
  51. 51. 参考資料 • Twitter: @awsformobile • ブログ – http://mobile.awsblog.com/ • ドキュメント – Amazon Cognito: https://aws.amazon.com/documentation/cognito/ – Amazon Mobile Analytics: https://aws.amazon.com/documentation/mobileanalytics /
  52. 52. Q&A
  53. 53. Webinar資料の配置場所 • AWS クラウドサービス活用資料集 – http://aws.amazon.com/jp/aws-jp-introduction/
  54. 54. ご参加ありがとうございました。

×