【AWS Black Belt Online Seminar】
Amazon Cognito
Amazon Web Services Japan K.K.
Solutions Architect Akihiro Tsukada
2017.05.17
Akihiro Tsukada
Start-up
Mobile
Serverless
Blockchain
2AWS 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/
内容についての注意点
•
本資料では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.
アジェンダ
AWSのモバイルサービス
Amazon Cognito概論
Cognito Identity
Your User Pools
Federated Identities
Cognito Sync
料金体系
AWSのモバイルサービス
ユーザ認証、アクセス認可
データの同期
ユーザ行動分析
メディアの管理
メディアの配信
プッシュ通知の送信
共有データの保存
モバイル アプリAmazon Cognito
(Identity)
Amazon Cognito
(Sync)
AWS Lambda
Amazon CloudFront
(Device Detection)
Amazon DynamoDB
Amazon SNS
Mobile Push
AWS Mobile SDKAmazon 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
全てのサービスに共通の認証機構
オンライン・オフラインを自動でハンドリング
クロスプラットフォームのサポート:
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概論
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などの処理を連動させるこ
とも可能
Cognitoが解決する課題の例
モバイル・Webアプリでユーザ認証を簡単に実装したい
� Your User Pools
FacebookやTwitter等でログイン可能にしたい
� Federated Identities
認証されたユーザや管理者ユーザ限定のコンテンツを配信したい
� Your User Pools, Federated Identities
スケーラブルなAWSの各サービスをモバイルのバックエンドとして使いたいが、
AccessKey等の認証情報をアプリにハードコーディングしたくない
� Federated Identities
一人複数デバイスの利用をサポートしてUXを向上させたい
� Federated Identities, Cognito Sync
Cognitoを利用したアプリのシミュレーション
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 ※この他、独自認証 サーバも利用可完成図
15Dataset1 { 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ブラウザのローカルにも反映される
ユーザとデバイス 所有・操作
ユーザはモバイルアプリとWebブラウザを利用
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 18Cognito Your User Pools
対応Identity Provider
ユーザとデバイス User Pool 1 User Pool n…
Group n User Pool 2 所有・操作 Identity Pool 1 IAM role Logins Cognito Federated IdentitiesIdentity Poolを作成し、IAM RoleとIdPを
Identity Poolに紐付け
SAML
サインアップ 〜 サインイン 〜 AWS Credentialsの取得
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 21Cognito 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 22Cognito 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 23Token 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 TokenFederated Identityは該当IdPにアクセスしTokenを検証
SAML Amazon アカウントA 24Cognito 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 25Cognito 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 IdentitiesFederated IdentityはAWS IAM(STS)から
Roleに基づいたTemporary Credentialsを取得
SAML
Amazon アカウントA
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 IdentitiesFederated Identityはクライアントデバイスに
Temporary Credentialsを渡す
SAML Amazon アカウントA 27Cognito 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複数デバイス間でのデータ同期とフック処理
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 30Cognito 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 31Cognito 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 IdentitiesWebブラウザで同期処理を実行するとモバイルデバイスで
の変更がWebブラウザのローカルに反映される
SAML Amazon アカウントA 32Dataset1 { 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アジェンダ
AWSのモバイルサービス
Amazon Cognito概論
Cognito Identity
Your User Pools
Federated Identities
Cognito Sync
料金体系
Cognito Identity
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 guestYour User Pools
37 Sign in Username Password Submit Or Start as a guestYour User Pools
サーバについて心配することな く、モバイルやWebアプリにサ インアップ、サインイン機能を 簡単に追加サーバレスの認証と
ユーザ管理
電話番号やemailアドレスの検 証と多要素認証の提供拡張された
セキュリティ機能
シンプル、セキュア、低コスト かつフルマネージドなサービス による、数億ユーザまでスケー ルするユーザディレクトリの作 成と維持マネージドな
ユーザディレクトリ
1
2
3
38User Poolに対するユーザの操作
Email もしくは
電話番号による確認
パスワード紛失
ユーザのサインアップ
とサインイン
アカウントを確認するための Email アドレスや電話番号の検証
パスワードを紛失した場合にユーザは自分自身でパスワード変更可能
Email、電話番号もしくはユーザ名とパスワードを使用したサインアップ
サインアップ後のサインイン
ユーザプロファイル
カスタム属性を含むユーザプロファイルの取得と更新
SMS ベースの MFA
有効にすると、サインアップ、パスワード紛失におけるフローの一環として
SMS を通じた確認コードによる多要素認証(MFA)を利用可能
トークンベースの認証
OpenID Connect (OIDC) とOAuth2.0の標準をベースとしたJSON Web
Tokens (JWT)を利用
AWS Lambdaを利用した認証フローのカスタマイズ
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
カスタム認証フロー
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.htmlUser Poolに対する管理者の操作
ユーザの管理
アプリの
パーミッション
パスワードポリシーの
セットアップ
ユーザプールの
作成と管理
ユーザーパスワードのリセット、ユーザーの確認、MFAの有効化、ユーザーの削除、
グローバルサインアウトといった管理操作
アプリ単位での各ユーザ属性に対するRead/Writeパーミッションの設定
最小文字数/大文字/特殊文字を含めるといったパスワード要件のコントロール
AWS アカウント内に複数のユーザプールを作成、構成、削除可能
属性の定義
ユーザプロファイル用のカスタム属性
必須属性データの要求
サインアッププロセスの完了前にユーザによって提供される必要がある属性の選択
ユーザの検索
コンソールもしくはAdminAPIを通じた属性に完全一致もしくは前方一致ベースのユー
ザ検索
42デバイスの記憶
ユーザに関連づいたデバイスを
Cognitoが記憶し、操作APIを提供
1
サインインごとに2要素のチャレン
ジを完了させる必要があるとき、
ユーザが直面する手間を軽減す
るにはどうするべきか?
特定のビジネス要件を達成する
ためにユーザーとデバイスを関
連付けるロジックを構築するには
どうするべきか?
2
43Ex) あるユーザの持つ全デバイスを
強制サインアウトさせるには?
既存のユーザ管理からの移行 - インポートパターン
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
1. Your User Poolsでのログイ
ンを試行
2. UserNotFoundExceptionで
あれば、ユーザ名とパスワー
ドを保持しながら既存システ
ムでのログインを試行
3. 既存システムでのログインが
成功したらUser Poolにユー
ザを作る
Amazon Cognito 既存ログイン サーバ①username,
password
②username,
password
で引当
③User
NotFound
④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);
Amazon API Gatewayとのインテグレーション
カスタムオーソライザー
ネイティブサポート
ユーザプール内に存在するユーザをもとにした
認 証 の た め の ID ト ー ク ン を 受 け 取 る よ う に
API Gatewayを構成
OAuthやSAMLといったベアラートークン認証
の仕組みを用いて APIへのアクセスをコント
ロール。Lambdaファンクションを用いて許可す
るアクセスポリシーを生成して返す
1
2
47Federated Identities
48 Facebook Corporate ID Etc. Sign in with SAMLFederated Identities
AWSリソースへのアクセスを制御するTemporary Credentials
を払い出す
アプリにハードコーディングしなくてよい(してはいけない)
未認証のゲストユーザ用IAM Roleも設定可能
各種のIdentity Providerに対応
対応する外部プロバイダー(Web Identity)
Amazon, Facebook, Twitter/Digits, Google,
OpenID Connect準拠の認証サービス
独自開発の認証システム(Developer Identity)
SAML ID Provider
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.htmlFederated Identitiesの認証フロー
WebIdentity(外部プロバイダー, OIDC)の場合
Federated Identitiesの認証フロー
Developer Identity(独自開発の認証システム)の場合
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
;
});
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を設定
Your User PoolsのUser Groupで権限を分ける-2
56
Identity PoolにIDプロバイダとして
User Poolを紐付ける際に
“Choose role from token” を選択
Your User Poolsのユーザ属性で権限を分ける
IAM Roleのポリシー変数でIdentityIDごとに制御
58
要件:「自分のリソースだけにアクセスさせたい」
特に2-Tierアーキテクチャの採用時に有効
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.htmlCognito Identityがカバーするユースケース
Business to Consumer
IoT
Business to Employee
SAMLFederation EnterpriseDirectory app app Partner A Partner B app
Business to Business
AWS IoTAPI Gateway with Lambda
Allow Custom
Authorizer
Access Control for AWS Resources
AWS IAM
62
Cognito Sync
Cognito Sync
64User Data
Storage and
Sync
…Any Platform
iOS/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 IdentityIdentity Identity DatasetDataset Identity Pool 1:60 1:n 1:20 DatasetDataset Record 1:1024You
Your App
Your App Users
User Data
Container
User Data
2種類の同期処理
synchronize
接続が不安定な場合などのエラー時の処理は自分で実装する必要がある
コールされるとクラウド上の変更がpullされ、ローカルの変更はpushさ
れる
synchronizeOnConnectivity
実行時に接続可能であれば通常のsynchronizeメソッドと同様の振る舞
いをする
接続できなかったときは接続状態を監視し可能になったら同期される
複数回呼び出した場合は最後のオペレーションがキープされる
66コード例(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
コード例(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モバイルアプリ (デバイス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
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
モバイルアプリ
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料金体系
料金体系
Cognito Identity
Federated Identities: 無料
Your User Pools:
73