Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

AWS Black Belt Online Seminar 2017 AWS Cognito

27.347 visualizaciones

Publicado el

2017/05/17 に実施された、Amazon CongitoのBlackBelt資料

Publicado en: Tecnología
  • I recovered from bulimia. You can too! learn more... ●●● http://tinyurl.com/bulimia2recovery
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí

AWS Black Belt Online Seminar 2017 AWS Cognito

  1. 1. 【AWS Black Belt Online Seminar】 Amazon Cognito Amazon Web Services Japan K.K. Solutions Architect Akihiro Tsukada 2017.05.17 Add user sign-up, sign-in, and data synchronization to your apps
  2. 2. Akihiro Tsukada Start-up Mobile Serverless Blockchain 2
  3. 3. AWS Black Belt Online Seminar とは AWSJのTechメンバがAWSに関する様々な事を紹介するオンラインセミナーです 【火曜 12:00~13:00】 主にAWSのソリューションや 業界カットでの使いどころなどを紹介 (例:IoT、金融業界向け etc.) 【水曜 18:00~19:00】 主にAWSサービスの紹介や アップデートの解説 (例:EC2、RDS、Lambda etc.) ※開催曜日と時間帯は変更となる場合がございます。 最新の情報は下記をご確認下さい。 オンラインセミナーのスケジュール&申し込みサイト – https://aws.amazon.com/jp/about-aws/events/webinars/ 3
  4. 4. オンラインセミナー資料の配置場所 • AWS クラウドサービス活用資料集 – http://aws.amazon.com/jp/aws-jp-introduction/ • AWS Solutions Architect ブログ – 最新の情報、セミナー中のQ&A等が掲載されています – http://aws.typepad.com/sajp/ 4
  5. 5. 内容についての注意点 • 本資料では2017年5月17日時点のサービス内容および価格についてご説明しています。最新 の情報はAWS公式ウェブサイト(http://aws.amazon.com)にてご確認ください。 • 資料作成には十分注意しておりますが、資料内の価格とAWS公式ウェブサイト記載の価格に 相違があった場合、AWS公式ウェブサイトの価格を優先とさせていただきます。 • 価格は税抜表記となっています。日本居住者のお客様が東京リージョンを使用する場合、別途 消費税をご請求させていただきます。 • AWS does not offer binding price quotes. AWS pricing is publicly available and is subject to change in accordance with the AWS Customer Agreement available at http://aws.amazon.com/agreement/. Any pricing information included in this document is provided only as an estimate of usage charges for AWS services based on certain information that you have provided. Monthly charges will be based on your actual use of AWS services, and may vary from the estimates provided. 5
  6. 6. アジェンダ AWSのモバイルサービス Amazon Cognito概論 Cognito Identity Your User Pools Federated Identities Cognito Sync 料金体系 6
  7. 7. AWSのモバイルサービス 7
  8. 8. ユーザ認証、アクセス認可 データの同期 ユーザ行動分析 メディアの管理 メディアの配信 プッシュ通知の送信 共有データの保存 モバイル アプリ Amazon Cognito (Identity) Amazon Cognito (Sync) AWS Lambda Amazon CloudFront (Device Detection) Amazon DynamoDB Amazon SNS Mobile Push AWS Mobile SDK Amazon S3 Transfer Manager ビジネスロジックの実行 実機テストの並列実行 AWS DeviceFarm AWSのモバイルサービス https://aws.amazon.com/jp/mobile/ RESTful APIサーバ Amazon Pinpoint Amazon Pinpoint Amazon Mobile Analytics ログストリーム Amazon Kinesis 8 チャットボット Amazon Lex AWS Mobile Hub Amazon API Gateway
  9. 9. サポートするモバイル開発プラットフォーム 9 全てのサービスに共通の認証機構 オンライン・オフラインを自動でハンドリング クロスプラットフォームのサポート: Android, iOS, Fire OS, Unity, Xamarin, React Native(Dev Preview) Mobile OS への最適化 例: ローカルオフラインキャッシュを 利用するアーキテクチャ メモリフットプリントの削減 各プラットフォームのエンハンスに追従
  10. 10. グローバルなお客様利用事例 10 Amazon Cognito AWS Device Farm AWS Lambda API Gateway Simple Email Service Amazon SNS
  11. 11. Amazon Cognito概論 11
  12. 12. 12 Amazon Cognitoの構成要素 Cognito Identity Your User Pools Federated Identities Cognito Sync マネージドな数億ユーザまでス ケールするセキュアなユーザー 管理サービス サインアップ、サインイン、サ インアウト = 認証を担当 MFAオプション、パスワードポ リシー、ユーザのグルーピング、 認証フローのカスタマイズなど をサポート AWSリソースアクセス用の Temporary Credentialsを払い 出す = 認可を担当 認証は外部Identity Provider 等に移譲 未認証ユーザにUnauth Identityとしてゲスト用権限を 払い出すことも可能 一人の人間が持つ複数の Identity Providerのアカウント 情報を”Identity”としてまとめ る(=Federation) Federated Identitiesの ”Identity” が持つ複数デバイス 間でデータの同期を担当 Identityをまたいだデータ共有 ではない オフラインサポート コンフリクト解決ロジックのカス タマイズサポート データ同期実行時にPush Sync、 Cognito Streams、Cognito Eventsなどの処理を連動させるこ とも可能
  13. 13. Cognitoが解決する課題の例 モバイル・Webアプリでユーザ認証を簡単に実装したい � Your User Pools FacebookやTwitter等でログイン可能にしたい � Federated Identities 認証されたユーザや管理者ユーザ限定のコンテンツを配信したい � Your User Pools, Federated Identities スケーラブルなAWSの各サービスをモバイルのバックエンドとして使いたいが、 AccessKey等の認証情報をアプリにハードコーディングしたくない � Federated Identities 一人複数デバイスの利用をサポートしてUXを向上させたい � Federated Identities, Cognito Sync 13
  14. 14. Cognitoを利用したアプリのシミュレーション 14
  15. 15. Dataset1 { key1: val1, key2: val2... } SAML Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n Amazon アカウントA Identity Pool 1 IAM role AWS STS Temporary Credential Temporary Credential Token Token Validation Identity A Cognito Sync Logins User Pool 2 Dataset1 {key1: val1…} Dataset1 {key1: val1…} Local Storage 所有・操作 Temporary Credential Cognito Federated Identities Amazon SNS Amazon Kinesis AWS Lambda ※この他、独自認証 サーバも利用可 完成図 15
  16. 16. Dataset1 { key1: val1, key2: val2... } SAML Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n Amazon アカウントA Identity Pool 1 IAM role AWS STS Temporary Credential Temporary Credential Token Token Validation Identity A Cognito Sync Logins User Pool 2 Dataset1 {key1: val1…} Dataset1 {key1: val1…} Local Storage 所有・操作 Temporary Credential Cognito Federated Identities Amazon SNS Amazon Kinesis AWS Lambda ※この他、独自認証 サーバも利用可 完成図Cognitoを利用したアプリのシミュレーション 想定する要件 1. ユーザは複数プラットフォーム(モバイルアプリとWebブラウザ)からサービスを利用 2. ユーザはCognito Your User PoolsとAmazonアカウントでサービスを利用 3. ゲストユーザ(未認証)アクセスはナシ 4. Cognito Your User Poolsの特定グループに属するユーザは一般ユーザと別権限を持つ シミュレーションの大まかな流れ 1. User PoolとIdentity Poolの作成 2. 複数デバイスからUser PoolとAmazonにサインアップ、サインイン 3. サインインして得たTokenをCognito Federated Identityに渡して検証 4. Tokenに問題なければCognitoはTemporary Credentialsをデバイスに返却 5. デバイスはCredentialsを使って直接AWSリソースにアクセス 6. モバイルでCognito Syncに同期したデータはWebブラウザのローカルにも反映される 16
  17. 17. ユーザとデバイス 所有・操作 ユーザはモバイルアプリとWebブラウザを利用 17
  18. 18. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … Group n User Pool 2 所有・操作 IAM role このアプリで使うUser PoolとGroupを作成 GroupにIAM Roleを紐付け SAML 18
  19. 19. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … Group n User Pool 2 所有・操作 Identity Pool 1 IAM role Logins Cognito Federated Identities Identity Poolを作成し、IAM RoleとIdPを Identity Poolに紐付け SAML 19
  20. 20. サインアップ 〜 サインイン 〜 AWS Credentialsの取得 20
  21. 21. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … Group n User Pool 2 所有・操作 Identity Pool 1 IAM role Logins Cognito Federated Identities SAML 21
  22. 22. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n User Pool 2 所有・操作 Identity Pool 1 IAM role Logins Cognito Federated Identities 各デバイスから各アカウントにサインアップ & イン SAML Amazon アカウントA 22
  23. 23. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n User Pool 2 所有・操作 Identity Pool 1 IAM role Logins Cognito Federated Identities Token 各IdPから返されたTokenをFederated Identityに渡す SAML Amazon アカウントA 23
  24. 24. Token Validation Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n User Pool 2 所有・操作 Identity Pool 1 IAM role Logins Cognito Federated Identities Token Federated Identityは該当IdPにアクセスしTokenを検証 SAML Amazon アカウントA 24
  25. 25. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n User Pool 2 所有・操作 Identity Pool 1 IAM role Logins Token Token Validation Identity A Cognito Federated Identities 検証成功すれば、Identity Pool内にIdentityを作成し LoginsとしてIdPおよびTokenをIdentityに紐付け SAML Amazon アカウントA 25
  26. 26. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n User Pool 2 所有・操作 Identity Pool 1 IAM role AWS STS Logins Token Token Validation Identity A Temporary Credential Cognito Federated Identities Federated IdentityはAWS IAM(STS)から Roleに基づいたTemporary Credentialsを取得 SAML Amazon アカウントA 26
  27. 27. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n User Pool 2 所有・操作 Identity Pool 1 IAM role AWS STS Logins Token Token Validation Identity A Temporary Credential Temporary Credential Cognito Federated Identities Federated Identityはクライアントデバイスに Temporary Credentialsを渡す SAML Amazon アカウントA 27
  28. 28. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n User Pool 2 所有・操作 Identity Pool 1 IAM role AWS STS Logins Token Token Validation Identity A Temporary Credential Temporary CredentialTemporary Credential Cognito Federated Identities デバイスはCredentialsを使ってAWSリソースにアクセス SAML Amazon アカウントA 28
  29. 29. 複数デバイス間でのデータ同期とフック処理 29
  30. 30. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n User Pool 2 所有・操作 Identity Pool 1 IAM role AWS STS Logins Token Token Validation Identity A Temporary Credential Temporary CredentialTemporary Credential Cognito Federated Identities SAML Amazon アカウントA 30
  31. 31. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n User Pool 2 所有・操作 Identity Pool 1 IAM role AWS STS Logins Token Token Validation Identity A Temporary Credential Temporary CredentialTemporary Credential Dataset1 { key1: val1, key2: val2... } Dataset1 {key1: val1…} Local Storage Cognito Sync Cognito Federated Identities モバイルデバイスでローカルストレージにデータを 保存し同期処理実行 SAML Amazon アカウントA 31
  32. 32. Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n User Pool 2 所有・操作 Identity Pool 1 IAM role AWS STS Logins Token Token Validation Identity A Temporary Credential Temporary CredentialTemporary Credential Dataset1 { key1: val1, key2: val2... } Dataset1 {key1: val1…} Local Storage Cognito Sync Dataset1 {key1: val1…} Cognito Federated Identities Webブラウザで同期処理を実行するとモバイルデバイスで の変更がWebブラウザのローカルに反映される SAML Amazon アカウントA 32
  33. 33. Dataset1 { key1: val1, key2: val2... } Cognito Your User Pools 対応Identity Provider ユーザとデバイス User Pool 1 User Pool n … User Pools アカウントA Group n Identity Pool 1 IAM role AWS STS Temporary Credential Temporary Credential Token Token Validation Identity A Logins User Pool 2 Dataset1 {key1: val1…} Dataset1 {key1: val1…} Local Storage 所有・操作 Temporary Credential Cognito Federated Identities Amazon SNS Amazon Kinesis AWS Lambda Cognito Sync 同期処理実行時、Cognito Syncは設定された フック処理(SNS, Kinesis, Lambda)があれば起動する SAML Amazon アカウントA 33
  34. 34. アジェンダ AWSのモバイルサービス Amazon Cognito概論 Cognito Identity Your User Pools Federated Identities Cognito Sync 料金体系 34
  35. 35. Cognito Identity 35
  36. 36. Cognito Identity 36 Your User Pools モバイルやWebアプリに、簡単かつ セキュアにサインアップとサインインの機能 を追加可能 数億ユーザのスケールをサポートするフル マネージドサービス Federated Identities Facebookなどのソーシャルアカウントや SAMLプロバイダといったサードパーティの アイデンティティプロバイダでサインイン AWSリソースへのアクセス権の管理 Facebook Corporate ID Etc. Sign in with SAML Sign in Username Password Submit Or Start as a guest
  37. 37. Your User Pools 37 Sign in Username Password Submit Or Start as a guest
  38. 38. Your User Pools サーバについて心配することな く、モバイルやWebアプリにサ インアップ、サインイン機能を 簡単に追加 サーバレスの認証と ユーザ管理 電話番号やemailアドレスの検 証と多要素認証の提供 拡張された セキュリティ機能 シンプル、セキュア、低コスト かつフルマネージドなサービス による、数億ユーザまでスケー ルするユーザディレクトリの作 成と維持 マネージドな ユーザディレクトリ 1 2 3 38
  39. 39. 包括的なユーザフロー Email もしくは 電話番号による確認 パスワード紛失 ユーザのサインアップ とサインイン アカウントを確認するための Email アドレスや電話番号の検証 パスワードを紛失した場合にユーザは自分自身でパスワード変更可能 Email、電話番号もしくはユーザ名とパスワードを使用したサインアップ サインアップ後のサインイン ユーザプロファイル カスタム属性を含むユーザプロファイルの取得と更新 SMS ベースの MFA 有効にすると、サインアップ、パスワード紛失におけるフローの一環として SMS を通じた確認コードによる多要素認証(MFA)を利用可能 トークンベースの認証 OpenID Connect (OIDC) とOAuth2.0の標準をベースとしたJSON Web Tokens (JWT)を利用 AWS Lambdaを利用したユーザフローのカスタマイズ 39
  40. 40. Lambdaフックを用いたフローのカスタマイズ 40 カテゴリ フック シナリオ例 Authentication Events Pre Authentication サインインリクエストを許可もしくは拒否するカスタムバリデー ション Post Authentication 分析のためにイベントログを記録 Sign-Up Pre Sign-up サインアップリクエストを許可もしくは拒否するカスタムバリデー ション Post Confirmation Welcomeメッセージのカスタマイズや分析用にイベントログを記 録 Messages Custom Message メッセージの高度なカスタマイズとローカライゼーション Custom Authentication Flow Define Auth Challenge カスタム認証フロー内で次のチャレンジを決定 Create Auth Challenge カスタム認証フロー内でチャレンジの作成 Verify Auth Challenge Response カスタム認証フロー内でレスポンスが正しいか決定
  41. 41. カスタム認証フロー Your User Pools Custom Authentication Challenges (e.g., CAPTCHA, passworldless auth, custom 2nd factors) 1 2 5 6 3 4 41 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html
  42. 42. 幅広い管理機能 ユーザの管理 アプリの パーミッション パスワードポリシーの セットアップ ユーザプールの 作成と管理 ユーザーパスワードのリセット、ユーザーの確認、MFAの有効化、ユーザーの削除、 グローバルサインアウトといった管理操作 アプリ単位での各ユーザ属性に対するRead/Writeパーミッションの設定 最小文字数/大文字/特殊文字を含めるといったパスワード要件のコントロール AWS アカウント内に複数のユーザプールを作成、構成、削除可能 属性の定義 ユーザプロファイル用のカスタム属性 必須属性データの要求 サインアッププロセスの完了前にユーザによって提供される必要がある属性の選択 ユーザの検索 コンソールもしくはAdminAPIを通じた属性に完全一致もしくは前方一致ベースのユー ザ検索 42
  43. 43. デバイスの記憶 ユーザに関連づいたデバイスを Cognitoが記憶し、操作APIを提供 1 サインインごとに2要素のチャレン ジを完了させる必要があるとき、 ユーザが直面する手間を軽減す るにはどうするべきか? 特定のビジネス要件を達成する ためにユーザーとデバイスを関 連付けるロジックを構築するには どうするべきか? 2 43 Ex) あるユーザの持つ全デバイスを 強制サインアウトさせるには?
  44. 44. Your User Poolsの導入 - インポートパターン csvファイルをアップロードすることによる User Poolへのユーザのインポート パスワードはインポート不可能のため、初回 サインインの際、ユーザは新規パスワードを 作成 インポートされる各ユーザはemailアドレス もしくは電話番号を保有する必要がある 正しいファイル形式はコマンドで確認可能 44 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html $ aws cognito-idp get-csv-header --user-pool-id "USER_POOL_ID" {"CSVHeader":["name","given_name","family_name","middle_name","nickname", "preferred_username","profile","picture","website","email","email_verifie d","gender","birthdate","zoneinfo","locale","phone_number","phone_number_ verified","address","updated_at","cognito:mfa_enabled","cognito:username" ], "UserPoolId": "ap-northeast-1_FplQqjsOc"}
  45. 45. Your User Poolsの導入 - 既存システムをフックするパターン 45 1. Your User Poolsでのログイ ンを試行 2. UserNotFoundExceptionで あれば、ユーザ名とパスワー ドを保持しながら既存システ ムでのログインを試行 3. 既存システムでのログインが 成功したらUser Poolにユー ザを作る Amazon Cognito 既存ログイン サーバ ①username, password ②username, password で引当 ③User NotFound ④username, password ⑤ログイン成功 ⑥username, passwordk でサインアップ
  46. 46. Your User Poolsの実装イメージ – JavaScript in the Browserの場合 46 https://github.com/aws/amazon-cognito-identity-js/ <script src="/path/to/aws-cognito-sdk.min.js"></script> <script src="/path/to/amazon-cognito-identity.min.js"></script> <!-- optional: only if you use other AWS services --> <script src="/path/to/aws-sdk-2.6.10.js"></script> SDKのロード サインアップ、検証コード確認、サインイン let cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser({ Username: username, Pool: createUserPoolObj()}); cognitoUser.confirmRegistration(verificationCode, forceAliasCreation,(err, result)=>{}); let poolData = {UserPoolId : '...', ClientId : '...'}; let userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData); userPool.signUp(username, password, attributes, validationData, function(err, result){}); let authenticationData = {Email: email,Password: password}; let authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData); let cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData); cognitoUser.authenticateUser(authenticationDetails, {onSuccess: (result)=>{}});
  47. 47. Amazon API Gatewayとのインテグレーション カスタムオーソライザー ネイティブサポート ユーザプール内に存在するユーザをもとにした 認証のためのIDトークンを受け取るように API Gatewayを構成 OAuthやSAMLといったベアラートークン認証 の仕組みを用いてAPIへのアクセスをコント ロール。Lambdaファンクションを用いて許可す るアクセスポリシーを生成して返す 1 2 47
  48. 48. Federated Identities 48 Facebook Corporate ID Etc. Sign in with SAML
  49. 49. Federated Identities AWSリソースへのアクセスを制御するTemporary Credentials を払い出す アプリにハードコーディングしなくてよい(してはいけない) 未認証のゲストユーザ用IAM Roleも設定可能 各種のIdentity Providerに対応 対応する外部プロバイダー(Web Identity) Amazon, Facebook, Twitter/Digits, Google, OpenID Connect準拠の認証サービス 独自開発の認証システム(Developer Identity) SAML ID Provider 49 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/cognito-identity.html
  50. 50. Federated Identitiesの概念 Identity 複数IDプロバイダーのアカウント、複数デバイスを持ちうる一人のユーザ IdentityID Identityに付与される一意のID IdentityPool Role等の紐付け設定するプール。多くの場合一つのアプリまたはサービスに相当する単位 未認証アクセスのOn/Offを設定可能 Authenticated Role 認証済みIdentityに付与する権限を定義したIAM Role。一つのIdentityPoolにつき一つ設定 Unauthenticated Role 未認証Identity(ゲストユーザ)に付与する権限を定義したIAM Role。未認証アクセスをOn にしたIdentityPoolの場合に設定 Authentication Providers Identity Poolに紐付ける認証プロバイダ 50 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/cognito-identity.html
  51. 51. Federated Identitiesの認証フロー WebIdentity(外部プロバイダー, OIDC)の場合 51 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/authentication-flow.html
  52. 52. Federated Identitiesの認証フロー Developer Identity(独自開発の認証システム)の場合 52 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/authentication-flow.html
  53. 53. Credentialsの取得処理(JavaScript) 53 AWS.config.region = '<region>'; AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { // Loginsを省略すればゲストユーザアクセスになる 'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>': userPoolSession.getIdToken().getJwtToken() } }); AWS.config.credentials.get(function () { var accessKeyId = AWS.config.credentials.accessKeyId; var secretAccessKey = AWS.config.credentials.secretAccessKey; var sessionToken = AWS.config.credentials.sessionToken; }); http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/getting-credentials.html
  54. 54. Tips:Federated Identitiesでユーザごとに異なる権限を与える 54 ロールベースアクセスコントロール Your User PoolsのUser Groupで分ける Your User Poolsのユーザ属性で分ける IAM Roleのポリシー変数でIdentityIDごとに制御 SAMLプロバイダでカスタムRoleを指定
  55. 55. Your User PoolsのUser Groupで権限を分ける-1 55 User Poolでグループを作成する際にIAM Roleを設定 https://aws.amazon.com/jp/blogs/aws/new-amazon-cognito-groups-and-fine-grained-role-based-access-control-2/
  56. 56. Your User PoolsのUser Groupで権限を分ける-2 56 Identity PoolにIDプロバイダとして User Poolを紐付ける際に “Choose role from token” を選択 https://aws.amazon.com/jp/blogs/aws/new-amazon-cognito-groups-and-fine-grained-role-based-access-control-2/
  57. 57. Your User Poolsのユーザ属性で権限を分ける 57 https://aws.amazon.com/jp/blogs/aws/new-amazon-cognito-groups-and-fine-grained-role-based-access-control-2/
  58. 58. IAM Roleのポリシー変数でIdentityIDごとに制御 58 要件:「自分のリソースだけにアクセスさせたい」 特に2-Tierアーキテクチャの採用時に有効 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/iam-roles.html
  59. 59. IAM Roleのポリシー変数でIdentityIDごとに制御 59 アクセス可能なS3のプレフィクスを制限 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/iam-roles.html { "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": { "StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:sub}/*”]} } },{ "Action": ["s3:GetObject", "s3:PutObject"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/${cognito-identity.amazonaws.com:sub}/*”] } ] }
  60. 60. IAM Roleのポリシー変数でIdentityIDごとに制御 60 アクセス可能なDynamoDBのキーを制限 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/iam-roles.html { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem" ], "Resource": ["arn:aws:dynamodb:us-west-2:123456789012:table/MyTable"], "Condition": { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"] } } } ] }
  61. 61. SAMLプロバイダでカスタムRoleを指定 61 SAML IdPをIAMコンソールで設定 Identity PoolにSAML IdPを紐付け SAML IdPで認証し、SAML アサーションを取得 https://aws.amazon.com/SAML/Attributes/Role クレームで指定したIAM Roleが認証済みユーザに 割り当てられる https://aws.amazon.com/jp/blogs/mobile/announcing-saml-support-for-amazon-cognito/ http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html
  62. 62. Cognito Identityがカバーするユースケース Business to Consumer IoT Business to Employee SAML Federation Enterprise Directory app app Partner A Partner B app Business to Business AWS IoT API Gateway with Lambda Allow Custom Authorizer Access Control for AWS Resources AWS IAM 62 Deny
  63. 63. Cognito Sync 63
  64. 64. Cognito Sync 64 User Data Storage and Sync …Any Platform iOS/Android/FireOS/Webブラウザ ユーザのデータ、設定や情報を保存 アプリとデバイスのデータをクラウドに保存でき、 未認証Identityで保存したデータは認証後にマージ クロスデバイス/クロス OS な同期 数行のコードでデバイスやプラットフォームをま たがってユーザのデータや設定を同期 オフライン動作 データは常にローカルのストレージにまず保存さ れるので電波が不安定もしくは不通であっても シームレスに動作 k/v data Identity pool バックエンド不要 スケーラブルで信頼性の高いデータ同期基盤 をシンプルなクライアント SDK を組み込む だけで利用可能
  65. 65. Cognito Federated Identityと 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 65
  66. 66. 2種類の同期処理 synchronize 接続が不安定な場合などのエラー時の処理は自分で実装する必要がある コールされるとクラウド上の変更がpullされ、ローカルの変更はpushさ れる synchronizeOnConnectivity 実行時に接続可能であれば通常のsynchronizeメソッドと同様の振る舞 いをする 接続できなかったときは接続状態を監視し可能になったら同期される 複数回呼び出した場合は最後のオペレーションがキープされる 66
  67. 67. コード例(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 } }); http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/handling-callbacks.html67
  68. 68. コード例(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) { // ハンドラを実装 }, /* onFailure: function(error) {}, onConflict: function(data, conflicts, callback) {}, onDatasetDeleted: function(dataset, deletedDataset, callback) {}, onDatasetMerged: function(dataset, merges, callback) {} */ }); }); }); }); http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/handling-callbacks.html68
  69. 69. モバイルアプリ (デバイス1) Mobile SDK Amazon Cognito Sync Dataset 2. データ同期 モバイルアプリ (デバイス2) Mobile SDK Amazon SNS Mobile Push 3. プッシュ通知 4. データ同期 Amazon SNS Mobile Push との連携 Amazon Cognito がデータセットが更新されたタイミングで、Amazon SNS Mobile Push と連携して、データセットにサブスクライブしている各デバイスにプッシュ通知を 送信できる。プッシュ通知を受け取ったアプリはデータストアの再同期を行うように実 装するなど。 Amazon Cognito Push Sync 69 1. サブスクライブ
  70. 70. Amazon Kinesis との連携 Amazon Cognito のデータセットが更新されたタイミングで、Amazon Kinesis スト リームで更新や同期のデータを受け取ることができる。 モバイルアプリ Mobile SDK Amazon Cognito Sync Store 1. データ同期 Amazon Kinesis 2. Stream Content ストリームの内容 3. 例えば { "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 70 AWS Lambda
  71. 71. モバイルアプリ 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 71
  72. 72. 料金体系 72
  73. 73. 料金体系 Cognito Identity Federated Identities: 無料 Your User Pools: 73 https://aws.amazon.com/jp/cognito/pricing/ 最初の 50,000 MAU まで 無料 次の 50,000 MAU まで 0.00550 USD 次の 900,000 MAU まで 0.00460 USD 次の 9,000,000 MAU まで 0.00325 USD 10,000,000 MAU を超える分 0.00250 USD Cognito Sync Syncオペレーション 1万回につき0.15 USD/月 1GBの保存容量につき 0.15 USD/月 最初12ヶ月間の無料枠中は Sync 100万回/月 と 保存容量10GB/月 が無料 ※MFAや電話番号検証にSMSを送信する場合は 別途Amazon SNSの料金が必要
  74. 74. 課金ボリュームと計算のシミュレーション 74 例 User Poolsを使った100万登録ユーザ、15万MAUの大規模なサービス 各ユーザが毎日3回データをSync ユーザあたりのデータ保存量は10KB、全体の総保存容量は10GB 計算 User Pools (50,000MAU * 0.00550 USD) + (50,000MAU * 0.00460 USD) = 505 USD Cognito Sync (150,000 MAU * 3 Sync * 31 Days) / 10000 * 0.15 USD = 209.25 USD 10 * 0.15 = 1.5 USD 計: 505 + 209.25 + 1.5 = 715.75 USD/月
  75. 75. 参考資料 Amazon Cognito 開発者用リソース https://aws.amazon.com/jp/cognito/dev-resources/ AWS Mobile Blog https://aws.amazon.com/jp/blogs/mobile/ Amazon Cognito よくある質問 https://aws.amazon.com/jp/cognito/faqs/ 75
  76. 76. オンラインセミナー資料の配置場所 • AWS クラウドサービス活用資料集 – http://aws.amazon.com/jp/aws-jp-introduction/ • AWS Solutions Architect ブログ – 最新の情報、セミナー中のQ&A等が掲載されています – http://aws.typepad.com/sajp/ 76
  77. 77. 公式Twitter/Facebook AWSの最新情報をお届けします @awscloud_jp 検索 最新技術情報、イベント情報、お役立ち情報、 お得なキャンペーン情報などを日々更新しています! もしくは http://on.fb.me/1vR8yWm 77
  78. 78. AWSの導入、お問い合わせのご相談 AWSクラウド導入に関するご質問、お見積り、資料請求を ご希望のお客様は以下のリンクよりお気軽にご相談ください https://aws.amazon.com/jp/contact-us/aws-sales/ ※「AWS 問い合わせ」で検索してください 78
  79. 79. ご参加ありがとうございました 79
  80. 80. 80

×