aws black belt online seminar · 【aws black belt online seminar】 amazon cognito amazon web...
TRANSCRIPT
【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
Akihiro Tsukada
Start-up
Mobile
Serverless
Blockchain
2
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
オンラインセミナー資料の配置場所
• AWS クラウドサービス活用資料集– http://aws.amazon.com/jp/aws-jp-introduction/
• AWS Solutions Architect ブログ– 最新の情報、セミナー中のQ&A等が掲載されています
– http://aws.typepad.com/sajp/
4
内容についての注意点
• 本資料では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
アジェンダ
AWSのモバイルサービス
Amazon Cognito概論
Cognito IdentityYour User Pools
Federated Identities
Cognito Sync
料金体系
6
AWSのモバイルサービス
7
ユーザ認証、アクセス認可
データの同期
ユーザ行動分析
メディアの管理
メディアの配信
プッシュ通知の送信
共有データの保存
モバイルアプリ
Amazon Cognito(Identity)
Amazon Cognito(Sync)
AWS Lambda
Amazon CloudFront(Device Detection)
Amazon DynamoDB
Amazon SNS Mobile Push
AWS Mobile SDK
Amazon S3Transfer Manager
ビジネスロジックの実行
実機テストの並列実行
AWS DeviceFarm
AWSのモバイルサービス https://aws.amazon.com/jp/mobile/
RESTful APIサーバ
Amazon PinpointAmazon Pinpoint
Amazon Mobile Analytics
ログストリーム
Amazon Kinesis
8
チャットボット
Amazon Lex
AWS Mobile Hub
Amazon API Gateway
サポートするモバイル開発プラットフォーム
9
全てのサービスに共通の認証機構
オンライン・オフラインを自動でハンドリング
クロスプラットフォームのサポート:Android, iOS, Fire OS, Unity, Xamarin, React Native(Dev Preview)
Mobile OS への最適化
例: ローカルオフラインキャッシュを利用するアーキテクチャ
メモリフットプリントの削減
各プラットフォームのエンハンスに追従
グローバルなお客様利用事例
10
Amazon Cognito
AWS Device Farm
AWS Lambda
API Gateway
Simple Email Service
Amazon SNS
Amazon Cognito概論
11
12
Amazon Cognitoの構成要素
Cognito Identity
Your User Pools Federated Identities
Cognito Sync
マネージドな数億ユーザまでス
ケールするセキュアなユーザー
管理サービス
サインアップ、サインイン、サ
インアウト = 認証を担当
MFAオプション、パスワードポ
リシー、ユーザのグルーピング、
認証フローのカスタマイズなど
をサポート
AWSリソースアクセス用のTemporary Credentialsを払い出す = 認可を担当
認証は外部Identity Provider等に移譲
未認証ユーザにUnauthIdentityとしてゲスト用権限を払い出すことも可能
一人の人間が持つ複数のIdentity Providerのアカウント情報を”Identity”としてまとめる(=Federation)
Federated Identitiesの
”Identity” が持つ複数デバイス
間でデータの同期を担当
Identityをまたいだデータ共有
ではない
オフラインサポート
コンフリクト解決ロジックのカス
タマイズサポート
データ同期実行時にPush Sync、
Cognito Streams、Cognito
Eventsなどの処理を連動させるこ
とも可能
Cognitoが解決する課題の例
モバイル・Webアプリでユーザ認証を簡単に実装したい
� Your User Pools
FacebookやTwitter等でログイン可能にしたい
� Federated Identities
認証されたユーザや管理者ユーザ限定のコンテンツを配信したい
� Your User Pools, Federated Identities
スケーラブルなAWSの各サービスをモバイルのバックエンドとして使いたいが、AccessKey等の認証情報をアプリにハードコーディングしたくない
� Federated Identities
一人複数デバイスの利用をサポートしてUXを向上させたい
� Federated Identities, Cognito Sync
13
Cognitoを利用したアプリのシミュレーション
14
Dataset1 {key1: val1,key2: val2...
}
SAML
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
AmazonアカウントA
Identity Pool 1
IAM
roleAWS STS
Temporary
Credential
Temporary
Credential
Token
Token Validation
Identity A
Cognito Sync
Logins
UserPool 2
Dataset1{key1: val1…}
Dataset1{key1: val1…}
Local Storage
所有・操作
Temporary
Credential
CognitoFederated Identities
Amazon
SNS
Amazon
Kinesis
AWS
Lambda
※この他、独自認証サーバも利用可
完成図
15
Dataset1 {key1: val1,key2: val2...
}
SAML
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
AmazonアカウントA
Identity Pool 1
IAM
roleAWS STS
Temporary
Credential
Temporary
Credential
Token
Token Validation
Identity A
Cognito Sync
Logins
UserPool 2
Dataset1{key1: val1…}
Dataset1{key1: val1…}
Local Storage
所有・操作
Temporary
Credential
CognitoFederated 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
ユーザとデバイス
所有・操作
ユーザはモバイルアプリとWebブラウザを利用
17
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…
Group n
UserPool 2
所有・操作
IAM
role
このアプリで使うUser PoolとGroupを作成GroupにIAM Roleを紐付け
SAML
18
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
role
Logins
CognitoFederated Identities
Identity Poolを作成し、IAM RoleとIdPをIdentity Poolに紐付け
SAML
19
サインアップ 〜 サインイン 〜 AWS Credentialsの取得
20
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
role
Logins
CognitoFederated Identities
SAML
21
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
role
Logins
CognitoFederated Identities
各デバイスから各アカウントにサインアップ & イン
SAMLAmazon
アカウントA
22
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
role
Logins
CognitoFederated Identities
Token
各IdPから返されたTokenをFederated Identityに渡す
SAMLAmazon
アカウントA
23
Token Validation
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
role
Logins
CognitoFederated Identities
Token
Federated Identityは該当IdPにアクセスしTokenを検証
SAMLAmazon
アカウントA
24
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
role
Logins
Token
Token Validation
Identity A
CognitoFederated Identities
検証成功すれば、Identity Pool内にIdentityを作成しLoginsとしてIdPおよびTokenをIdentityに紐付け
SAMLAmazon
アカウントA
25
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
roleAWS STS
Logins
Token
Token Validation
Identity A
Temporary
Credential
CognitoFederated Identities
Federated IdentityはAWS IAM(STS)からRoleに基づいたTemporary Credentialsを取得
SAMLAmazon
アカウントA
26
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
roleAWS STS
Logins
Token
Token Validation
Identity A
Temporary
Credential
Temporary
Credential
CognitoFederated Identities
Federated IdentityはクライアントデバイスにTemporary Credentialsを渡す
SAMLAmazon
アカウントA
27
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
roleAWS STS
Logins
Token
Token Validation
Identity A
Temporary
Credential
Temporary
CredentialTemporary
Credential
CognitoFederated Identities
デバイスはCredentialsを使ってAWSリソースにアクセス
SAMLAmazon
アカウントA
28
複数デバイス間でのデータ同期とフック処理
29
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
roleAWS STS
Logins
Token
Token Validation
Identity A
Temporary
Credential
Temporary
CredentialTemporary
Credential
CognitoFederated Identities
SAMLAmazon
アカウントA
30
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
roleAWS STS
Logins
Token
Token Validation
Identity A
Temporary
Credential
Temporary
CredentialTemporary
Credential
Dataset1 {key1: val1,key2: val2...
}
Dataset1{key1: val1…}
Local Storage
Cognito Sync
CognitoFederated Identities
モバイルデバイスでローカルストレージにデータを保存し同期処理実行
SAMLAmazon
アカウントA
31
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
UserPool 2
所有・操作
Identity Pool 1
IAM
roleAWS 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…}
CognitoFederated Identities
Webブラウザで同期処理を実行するとモバイルデバイスでの変更がWebブラウザのローカルに反映される
SAMLAmazon
アカウントA
32
Dataset1 {key1: val1,key2: val2...
}
Cognito Your User Pools
対応Identity Provider ユーザとデバイス
UserPool 1
User Pool n
…User PoolsアカウントA
Group n
Identity Pool 1
IAM
roleAWS STS
Temporary
Credential
Temporary
Credential
Token
Token Validation
Identity A
Logins
UserPool 2
Dataset1{key1: val1…}
Dataset1{key1: val1…}
Local Storage
所有・操作
Temporary
Credential
CognitoFederated Identities
Amazon
SNS
Amazon
Kinesis
AWS
Lambda
Cognito Sync
同期処理実行時、Cognito Syncは設定されたフック処理(SNS, Kinesis, Lambda)があれば起動する
SAMLAmazon
アカウントA
33
アジェンダ
AWSのモバイルサービス
Amazon Cognito概論
Cognito IdentityYour User Pools
Federated Identities
Cognito Sync
料金体系
34
Cognito Identity
35
Cognito Identity
36
Your User Pools
モバイルやWebアプリに、簡単かつ
セキュアにサインアップとサインインの機能を追加可能
数億ユーザのスケールをサポートするフルマネージドサービス
Federated Identities
FacebookなどのソーシャルアカウントやSAMLプロバイダといったサードパーティのアイデンティティプロバイダでサインインAWSリソースへのアクセス権の管理
Corporate
ID
Etc.
Sign in with
SAML
Sign in
Username
Password
Submit
Or
Start as a
guest
Your User Pools
37
Sign in
Username
Password
Submit
Or
Start as a
guest
Your User Pools
サーバについて心配することなく、モバイルやWebアプリにサインアップ、サインイン機能を簡単に追加
サーバレスの認証とユーザ管理
電話番号やemailアドレスの検証と多要素認証の提供
拡張されたセキュリティ機能
シンプル、セキュア、低コストかつフルマネージドなサービスによる、数億ユーザまでスケールするユーザディレクトリの作成と維持
マネージドなユーザディレクトリ
1 2 3
38
User Poolに対するユーザの操作
Email もしくは電話番号による確認
パスワード紛失
ユーザのサインアップとサインイン
アカウントを確認するための Email アドレスや電話番号の検証
パスワードを紛失した場合にユーザは自分自身でパスワード変更可能
Email、電話番号もしくはユーザ名とパスワードを使用したサインアップサインアップ後のサインイン
ユーザプロファイル カスタム属性を含むユーザプロファイルの取得と更新
SMS ベースの MFA 有効にすると、サインアップ、パスワード紛失におけるフローの一環としてSMS を通じた確認コードによる多要素認証(MFA)を利用可能
トークンベースの認証 OpenID Connect (OIDC) とOAuth2.0の標準をベースとしたJSON Web Tokens (JWT)を利用
AWS Lambdaを利用した認証フローのカスタマイズ
39
Lambdaフックを用いたフローのカスタマイズ
40
カテゴリ フック シナリオ例
Authentication Events
Pre Authenticationサインインリクエストを許可もしくは拒否するカスタムバリデーション
Post Authentication 分析のためにイベントログを記録
Sign-Up
Pre Sign-upサインアップリクエストを許可もしくは拒否するカスタムバリデーション
Post ConfirmationWelcomeメッセージのカスタマイズや分析用にイベントログを記録
Messages Custom Messageメッセージの高度なカスタマイズとローカライゼーション(メッセージの日本語可もこれを利用して可能)
Custom Authentication
Flow
Define Auth Challenge カスタム認証フロー内で次のチャレンジを決定
Create Auth Challenge カスタム認証フロー内でチャレンジの作成
Verify Auth Challenge Response
カスタム認証フロー内でレスポンスが正しいか決定
カスタム認証フロー
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
User Poolに対する管理者の操作
ユーザの管理
アプリのパーミッション
パスワードポリシーのセットアップ
ユーザプールの作成と管理
ユーザーパスワードのリセット、ユーザーの確認、MFAの有効化、ユーザーの削除、グローバルサインアウトといった管理操作
アプリ単位での各ユーザ属性に対するRead/Writeパーミッションの設定
最小文字数/大文字/特殊文字を含めるといったパスワード要件のコントロール
AWS アカウント内に複数のユーザプールを作成、構成、削除可能
属性の定義 ユーザプロファイル用のカスタム属性
必須属性データの要求 サインアッププロセスの完了前にユーザによって提供される必要がある属性の選択
ユーザの検索 コンソールもしくはAdminAPIを通じた属性に完全一致もしくは前方一致ベースのユーザ検索
42
デバイスの記憶
ユーザに関連づいたデバイスをCognitoが記憶し、操作APIを提供
1
サインインごとに2要素のチャレン
ジを完了させる必要があるとき、ユーザが直面する手間を軽減するにはどうするべきか?
特定のビジネス要件を達成するためにユーザーとデバイスを関連付けるロジックを構築するにはどうするべきか?
2
43
Ex) あるユーザの持つ全デバイスを強制サインアウトさせるには?
既存のユーザ管理からの移行 - インポートパターン
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
1. Your User Poolsでのログインを試行
2. UserNotFoundExceptionであれば、ユーザ名とパスワードを保持しながら既存システムでのログインを試行
3. 既存システムでのログインが成功したらUser Poolにユーザを作る
AmazonCognito
既存ログインサーバ
①username,password
②username,passwordで引当
③UserNotFound
④username,password
⑤ログイン成功
⑥username,passwordkでサインアップ
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)=>{}});
Amazon API Gatewayとのインテグレーション
カスタムオーソライザー ネイティブサポート
ユーザプール内に存在するユーザをもとにした認証のための IDトークンを受け取るようにAPI Gatewayを構成
OAuthやSAMLといったベアラートークン認証の仕組みを用いてAPIへのアクセスをコントロール。Lambdaファンクションを用いて許可するアクセスポリシーを生成して返す
1 2
47
Federated Identities
48
Corporate
ID
Etc.
Sign in with
SAML
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
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
Federated Identitiesの認証フローWebIdentity(外部プロバイダー, OIDC)の場合
51 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/authentication-flow.html
Federated Identitiesの認証フローDeveloper Identity(独自開発の認証システム)の場合
52 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/authentication-flow.html
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
Tips:Federated Identitiesでユーザごとに異なる権限を与える
54
ロールベースアクセスコントロールYour User PoolsのUser Groupで分ける
Your User Poolsのユーザ属性で分ける
IAM Roleのポリシー変数でIdentityIDごとに制御
SAMLプロバイダでカスタムRoleを指定
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/
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/
Your User Poolsのユーザ属性で権限を分ける
57 https://aws.amazon.com/jp/blogs/aws/new-amazon-cognito-groups-and-fine-grained-role-based-access-control-2/
IAM Roleのポリシー変数でIdentityIDごとに制御
58
要件:「自分のリソースだけにアクセスさせたい」
特に2-Tierアーキテクチャの採用時に有効
http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/iam-roles.html
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}/*”]
}
]
}
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}"]
}
}
}
]
}
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
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
CustomAuthorizer
Access Control for AWS Resources
AWS IAM
62
Deny
Cognito Sync
63
Cognito Sync
64
User Data Storage andSync
…Any PlatformiOS/Android/FireOS/Webブラウザ
ユーザのデータ、設定や情報を保存アプリとデバイスのデータをクラウドに保存でき、未認証Identityで保存したデータは認証後にマージ
クロスデバイス/クロス OS な同期数行のコードでデバイスやプラットフォームをまたがってユーザのデータや設定を同期
オフライン動作データは常にローカルのストレージにまず保存されるので電波が不安定もしくは不通であってもシームレスに動作
k/v data
Identity pool
バックエンド不要スケーラブルで信頼性の高いデータ同期基盤をシンプルなクライアント SDK を組み込むだけで利用可能
Cognito Federated IdentityとCognito Sync のデータモデル
Identity Pool: アプリユーザのPool。アプ
リ間で共有する場合もある
Identity: 個々のユーザ。IDプロバイダ間
をまたいでユニーク。ゲストユーザも可
Dataset: ユーザごとのデータのグループ
Record: Key/Valueのユーザデータ
AWS Account
Dataset
IdentityIdentityIdentity
DatasetDataset
Identity
Pool
1:60
1:n
1:20
DatasetDatasetRecord
1:1024
You
Your App
Your App Users
User Data Container
User Data
65
2種類の同期処理
synchronize接続が不安定な場合などのエラー時の処理は自分で実装する必要がある
コールされるとクラウド上の変更がpullされ、ローカルの変更はpushされる
synchronizeOnConnectivity実行時に接続可能であれば通常のsynchronizeメソッドと同様の振る舞いをする
接続できなかったときは接続状態を監視し可能になったら同期される
複数回呼び出した場合は最後のオペレーションがキープされる
66
コード例(Android)
// Cognito Sync client の初期化
CognitoSyncManager syncClient = new CognitoSyncManager(getApplicationContext(),Regions.AP_NORTHEAST_1, // RegioncredentialsProvider);
//Datasetをオープンし、レコードを追加
Dataset dataset = syncClient.openOrCreateDataset("myDataset");dataset.put("myKey", "myValue");
//同期処理の実行
dataset.synchronize(new DefaultSyncCallback() {@Overridepublic void onSuccess(Dataset dataset, List newRecords) {
//Your handler code here}
});
http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/handling-callbacks.html67
コード例(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
モバイルアプリ(デバイス1)
Mobile SDK Amazon CognitoSync Dataset
2. データ同期
モバイルアプリ(デバイス2)
Mobile SDKAmazon SNSMobile Push
3. プッシュ通知
4. データ同期
Amazon SNS Mobile Push との連携
Amazon Cognito がデータセットが更新されたタイミングで、Amazon SNS Mobile Push と連携して、データセットにサブスクライブしている各デバイスにプッシュ通知を送信できる。プッシュ通知を受け取ったアプリはデータストアの再同期を行うように実装するなど。
Amazon Cognito Push Sync
69
1. サブスクライブ
Amazon Kinesis との連携
Amazon Cognito のデータセットが更新されたタイミングで、Amazon Kinesis ストリームで更新や同期のデータを受け取ることができる。
モバイルアプリ
Mobile SDK
Amazon CognitoSync Store
1. データ同期
Amazon Kinesis
2. StreamContent
ストリームの内容
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
AWSLambda
モバイルアプリ
Mobile SDK Amazon CognitoSync Store
1. データ同期AWS Lambda
2. Sync Trigger
Amazon Lambda との連携
3. 何か処理
Amazon Cognito Events
Key Value
住所 東京都□渋谷区□松濤□1丁目
Key Value
住所 東京都渋谷区松濤1丁目
元データ
修正済みデータ空白を削除
するプログラム
Lambda Function
71
料金体系
72
料金体系
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
例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/月
参考資料
Amazon Cognito 開発者用リソースhttps://aws.amazon.com/jp/cognito/dev-resources/
AWS Mobile Bloghttps://aws.amazon.com/jp/blogs/mobile/
Amazon Cognito よくある質問https://aws.amazon.com/jp/cognito/faqs/
75
オンラインセミナー資料の配置場所
• AWS クラウドサービス活用資料集– http://aws.amazon.com/jp/aws-jp-introduction/
• AWS Solutions Architect ブログ– 最新の情報、セミナー中のQ&A等が掲載されています
– http://aws.typepad.com/sajp/
76
公式Twitter/FacebookAWSの最新情報をお届けします
@awscloud_jp
検索
最新技術情報、イベント情報、お役立ち情報、お得なキャンペーン情報などを日々更新しています!
もしくはhttp://on.fb.me/1vR8yWm
77
AWSの導入、お問い合わせのご相談
AWSクラウド導入に関するご質問、お見積り、資料請求をご希望のお客様は以下のリンクよりお気軽にご相談くださいhttps://aws.amazon.com/jp/contact-us/aws-sales/
※「AWS 問い合わせ」で検索してください
78
ご参加ありがとうございました
79
80