• 検索結果がありません。

Presentation Title Here

N/A
N/A
Protected

Academic year: 2021

シェア "Presentation Title Here"

Copied!
80
0
0

読み込み中.... (全文を見る)

全文

(1)

【AWS Black Belt Online Seminar】

Amazon Cognito

Amazon Web Services Japan K.K.

Solutions Architect Akihiro Tsukada

2017.05.17

(2)

Akihiro Tsukada

Start-up

Mobile

Serverless

Blockchain

2

(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)

オンラインセミナー資料の配置場所

• AWS クラウドサービス活用資料集

http://aws.amazon.com/jp/aws-jp-introduction/

• AWS Solutions Architect ブログ

– 最新の情報、セミナー中のQ&A等が掲載されています

http://aws.typepad.com/sajp/

(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.

(6)

アジェンダ

AWSのモバイルサービス

Amazon Cognito概論

Cognito Identity

Your User Pools

Federated Identities

Cognito Sync

料金体系

(7)

AWSのモバイルサービス

(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

(9)

サポートするモバイル開発プラットフォーム

9

全てのサービスに共通の認証機構

オンライン・オフラインを自動でハンドリング

クロスプラットフォームのサポート:

Android, iOS, Fire OS, Unity, Xamarin, React Native(Dev Preview)

Mobile OS への最適化

例: ローカルオフラインキャッシュを

利用するアーキテクチャ

メモリフットプリントの削減

(10)

グローバルなお客様利用事例

10

Amazon Cognito

AWS Device Farm AWS Lambda

API Gateway

Simple Email Service Amazon SNS

(11)

Amazon Cognito概論

(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)

Cognitoが解決する課題の例

モバイル・Webアプリでユーザ認証を簡単に実装したい

� Your User Pools

FacebookやTwitter等でログイン可能にしたい

� Federated Identities

認証されたユーザや管理者ユーザ限定のコンテンツを配信したい

� Your User Pools, Federated Identities

スケーラブルなAWSの各サービスをモバイルのバックエンドとして使いたいが、

AccessKey等の認証情報をアプリにハードコーディングしたくない

� Federated Identities

一人複数デバイスの利用をサポートしてUXを向上させたい

� Federated Identities, Cognito Sync

(14)

Cognitoを利用したアプリのシミュレーション

(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)

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ブラウザのローカルにも反映される

(17)

ユーザとデバイス 所有・操作

ユーザはモバイルアプリとWebブラウザを利用

(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)

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

(20)

サインアップ 〜 サインイン 〜 AWS Credentialsの取得

(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)

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)

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)

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)

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)

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

(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)

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 Temporary Credential Cognito Federated Identities

デバイスはCredentialsを使ってAWSリソースにアクセス

SAML Amazon アカウントA 28

(29)

複数デバイス間でのデータ同期とフック処理

(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 Credential Temporary Credential Cognito Federated Identities SAML Amazon アカウントA 30

(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 Credential Temporary Credential Dataset1 { key1: val1, key2: val2... } Dataset1 {key1: val1…} Local Storage Cognito Sync Cognito Federated Identities

モバイルデバイスでローカルストレージにデータを

保存し同期処理実行

SAML Amazon アカウントA 31

(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 Credential Temporary 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)

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)

アジェンダ

AWSのモバイルサービス

Amazon Cognito概論

Cognito Identity

Your User Pools

Federated Identities

Cognito Sync

料金体系

(35)

Cognito Identity

(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)

Your User Pools

37 Sign in Username Password Submit Or Start as a guest

(38)

Your User Pools

サーバについて心配することな く、モバイルやWebアプリにサ インアップ、サインイン機能を 簡単に追加

サーバレスの認証と

ユーザ管理

電話番号やemailアドレスの検 証と多要素認証の提供

拡張された

セキュリティ機能

シンプル、セキュア、低コスト かつフルマネージドなサービス による、数億ユーザまでスケー ルするユーザディレクトリの作 成と維持

マネージドな

ユーザディレクトリ

1

2

3

38

(39)

User Poolに対するユーザの操作

Email もしくは

電話番号による確認

パスワード紛失

ユーザのサインアップ

とサインイン

アカウントを確認するための Email アドレスや電話番号の検証

パスワードを紛失した場合にユーザは自分自身でパスワード変更可能

Email、電話番号もしくはユーザ名とパスワードを使用したサインアップ

サインアップ後のサインイン

ユーザプロファイル

カスタム属性を含むユーザプロファイルの取得と更新

SMS ベースの MFA

有効にすると、サインアップ、パスワード紛失におけるフローの一環として

SMS を通じた確認コードによる多要素認証(MFA)を利用可能

トークンベースの認証

OpenID Connect (OIDC) とOAuth2.0の標準をベースとしたJSON Web

Tokens (JWT)を利用

AWS Lambdaを利用した認証フローのカスタマイズ

(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

(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)

User Poolに対する管理者の操作

ユーザの管理

アプリの

パーミッション

パスワードポリシーの

セットアップ

ユーザプールの

作成と管理

ユーザーパスワードのリセット、ユーザーの確認、MFAの有効化、ユーザーの削除、

グローバルサインアウトといった管理操作

アプリ単位での各ユーザ属性に対するRead/Writeパーミッションの設定

最小文字数/大文字/特殊文字を含めるといったパスワード要件のコントロール

AWS アカウント内に複数のユーザプールを作成、構成、削除可能

属性の定義

ユーザプロファイル用のカスタム属性

必須属性データの要求

サインアッププロセスの完了前にユーザによって提供される必要がある属性の選択

ユーザの検索

コンソールもしくはAdminAPIを通じた属性に完全一致もしくは前方一致ベースのユー

ザ検索

42

(43)

デバイスの記憶

ユーザに関連づいたデバイスを

Cognitoが記憶し、操作APIを提供

1

サインインごとに2要素のチャレン

ジを完了させる必要があるとき、

ユーザが直面する手間を軽減す

るにはどうするべきか?

特定のビジネス要件を達成する

ためにユーザーとデバイスを関

連付けるロジックを構築するには

どうするべきか?

2

43

Ex) あるユーザの持つ全デバイスを

強制サインアウトさせるには?

(44)

既存のユーザ管理からの移行 - インポートパターン

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"

],

(45)

既存のユーザ管理からの移行 - 既存処理をフックするパターン

45

1. Your User Poolsでのログイ

ンを試行

2. UserNotFoundExceptionで

あれば、ユーザ名とパスワー

ドを保持しながら既存システ

ムでのログインを試行

3. 既存システムでのログインが

成功したらUser Poolにユー

ザを作る

Amazon Cognito 既存ログイン サーバ

①username,

password

②username,

password

で引当

③User

NotFound

④username,

password

⑤ログイン成功

⑥username,

passwordk

でサインアップ

(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);

(47)

Amazon API Gatewayとのインテグレーション

カスタムオーソライザー

ネイティブサポート

ユーザプール内に存在するユーザをもとにした

認 証 の た め の ID ト ー ク ン を 受 け 取 る よ う に

API Gatewayを構成

OAuthやSAMLといったベアラートークン認証

の仕組みを用いて APIへのアクセスをコント

ロール。Lambdaファンクションを用いて許可す

るアクセスポリシーを生成して返す

1

2

47

(48)

Federated Identities

48 Facebook Corporate ID Etc. Sign in with SAML

(49)

Federated Identities

AWSリソースへのアクセスを制御するTemporary Credentials

を払い出す

アプリにハードコーディングしなくてよい(してはいけない)

未認証のゲストユーザ用IAM Roleも設定可能

各種のIdentity Providerに対応

対応する外部プロバイダー(Web Identity)

Amazon, Facebook, Twitter/Digits, Google,

OpenID Connect準拠の認証サービス

独自開発の認証システム(Developer Identity)

SAML ID Provider

(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)

Federated Identitiesの認証フロー

WebIdentity(外部プロバイダー, OIDC)の場合

(52)

Federated Identitiesの認証フロー

Developer Identity(独自開発の認証システム)の場合

(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

;

});

(54)

Tips:Federated Identitiesでユーザごとに異なる権限を与える

54

ロールベースアクセスコントロール

Your User PoolsのUser Groupで分ける

Your User Poolsのユーザ属性で分ける

IAM Roleのポリシー変数でIdentityIDごとに制御

SAMLプロバイダでカスタムRoleを指定

(55)

Your User PoolsのUser Groupで権限を分ける-1

55

User Poolでグループを作成する際にIAM Roleを設定

(56)

Your User PoolsのUser Groupで権限を分ける-2

56

Identity PoolにIDプロバイダとして

User Poolを紐付ける際に

“Choose role from token” を選択

(57)

Your User Poolsのユーザ属性で権限を分ける

(58)

IAM Roleのポリシー変数でIdentityIDごとに制御

58

要件:「自分のリソースだけにアクセスさせたい」

特に2-Tierアーキテクチャの採用時に有効

(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)

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)

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)

Cognito Identityがカバーするユースケース

Business to Consumer

IoT

Business to Employee

SAML

Federation EnterpriseDirectory 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

(63)

Cognito Sync

(64)

Cognito Sync

64

User Data

Storage and

Sync

…Any Platform

iOS/Android/FireOS/Webブラウザ

ユーザのデータ、設定や情報を保存

アプリとデバイスのデータをクラウドに保存でき、

未認証Identityで保存したデータは認証後にマージ

クロスデバイス/クロス OS な同期

数行のコードでデバイスやプラットフォームをま

たがってユーザのデータや設定を同期

オフライン動作

データは常にローカルのストレージにまず保存さ

れるので電波が不安定もしくは不通であっても

シームレスに動作

k/v data Identity pool

バックエンド不要

スケーラブルで信頼性の高いデータ同期基盤

をシンプルなクライアント SDK を組み込む

だけで利用可能

(65)

Cognito Federated Identityと

Cognito Sync のデータモデル

Identity Pool: アプリユーザのPool。アプ

リ間で共有する場合もある

Identity: 個々のユーザ。IDプロバイダ間

をまたいでユニーク。ゲストユーザも可

Dataset: ユーザごとのデータのグループ

Record: Key/Valueのユーザデータ

AWS Account Dataset IdentityIdentity Identity DatasetDataset Identity Pool 1:60 1:n 1:20 DatasetDataset Record 1:1024

You

Your App

Your App Users

User Data

Container

User Data

(66)

2種類の同期処理

synchronize

接続が不安定な場合などのエラー時の処理は自分で実装する必要がある

コールされるとクラウド上の変更がpullされ、ローカルの変更はpushさ

れる

synchronizeOnConnectivity

実行時に接続可能であれば通常のsynchronizeメソッドと同様の振る舞

いをする

接続できなかったときは接続状態を監視し可能になったら同期される

複数回呼び出した場合は最後のオペレーションがキープされる

66

(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.html

(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.html 68

(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

(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)

モバイルアプリ

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)

料金体系

(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

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

(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/

(76)

オンラインセミナー資料の配置場所

• AWS クラウドサービス活用資料集

http://aws.amazon.com/jp/aws-jp-introduction/

• AWS Solutions Architect ブログ

– 最新の情報、セミナー中のQ&A等が掲載されています

http://aws.typepad.com/sajp/

(77)

公式Twitter/Facebook

AWSの最新情報をお届けします

@awscloud_jp

検索

最新技術情報、イベント情報、お役立ち情報、

お得なキャンペーン情報などを日々更新しています!

もしくは

http://on.fb.me/1vR8yWm

77

(78)

AWSの導入、お問い合わせのご相談

AWSクラウド導入に関するご質問、お見積り、資料請求を

ご希望のお客様は以下のリンクよりお気軽にご相談ください

https://aws.amazon.com/jp/contact-us/aws-sales/

※「AWS 問い合わせ」で検索してください

78

(79)

ご参加ありがとうございました

(80)

参照

関連したドキュメント

The LLC current mode means that the operating frequency of an LLC converter is not controlled via voltage (or current) controlled oscillator but is directly derived from the

The RSL10 SIP serves as the processing hub of the camera, and Bluetooth ® Low Energy (Bluetooth LE) connectivity enabling remote control and transfer of captured image and sensor

 Do not apply more than 0.5 lb active ingredient (1 quart) per acre per season including at-plant, PRE, PPI and foliar applications of RUCKUS™ LFR® Soil Insecticide and

Save DUT as Hex ­ allows you to save the content of the DUT tab (the DUT memory mirror) into a hex file The default location when saving this file is the Patterns directory under

At minimum line input voltage and maximum output power the inductor peak current is at the maximum, which causes the greatest stress to the power components.. The components

04h INT_MSK1 RW FFh Mask register 1 to enable or disable interrupt sources (trim) 05h INT_MSK2 RW FFh Mask register 2 to enable or disable interrupt sources (trim). 06h PID R

The Strata graphical user interface ensures an easy startup for evaluation purposes like controlling motor voltage/frequency, choosing between closed loop Field Oriented Control

The resulting loop response after compensation is shown in Figure 19, where the crossover frequency is 1.3 kHz, with a phase margin of 60 ° , measured at low−line and nominal