[Amazon Cognito] Cognito の導入方法がより簡単になりました!
Identity Pool の作成がより簡単に
先日(2015/01/20)、 Amazon Cognito のアップデートがありました。
- Cognito Sync Store で保存した情報に開発者からアクセス
- AWS Management Console で Identity Pool ID の検索
- Identity Pool への Role の紐付け
- AWS Mobile SDK での初期化処理の簡素化
今回のアップデートにより Identity Pool の作成がより簡単になりました!これは有り難いアップデートですよね。
ということで、改めて Identity Pool の作成方法についてまとめてみたいと思います。Cognito とは何ぞや?というかたは以下をお読みいただければと思います!
- Amazon Cognito(アイデンティティおよびデータ同期に関する機能を提供するサービス) | アマゾン ウェブ サービス(AWS 日本語)
- [AWS][iOS] Amazon Cognito のモバイルユーザー認証 & データ同期 を iOS で使ってみた | Developers.IO
- Amazon Cognitoについて - AWSが提案するモバイル時代のアカウント管理 - クックパッド開発者ブログ
Identity Pool の作成
まずは次のページにアクセスしましょう。
3つのステップのウィザードが開始されます。ステップ3は AWS Mobile SDK の埋め込みのガイドなので、AWS Management Console から行うことは実質2ステップです。まずは Identity Pool の設定です。
各設定項目の解説は以下の通りです。なお、最低限必要なのは ① と ② だけです。とりあえず試してみたいだけであれば ③ 移行は必須ではありません。
① Identity Pool Name
新しく作成する Identity Pool の名前を入力します。AWS アカウントの中でユニークな名前を指定します。
② Unauthenticated Identities
Cognito では匿名の ID を登録することができます。Identity Pool で匿名 ID の発行を許可するには「Enable Access to Unauthenticated Identities」にチェックを入れます。
③ Public Identity Providers
Identity Pool と紐付けるプロバイダは、デフォルトで Amazon, Facebook, Google が利用できます。これらのプロバイダを利用するには、各プロバイダのアプリ ID を発行し、設定します。
④ OpenID Connect Providers
Identity Pool には OpenID Connect をサポートしているプロバイダを紐付けることができます。IAM を利用して予め作成済みであれば、この欄にリストが表示されるので選択して紐付けることができます。詳しくは下記ドキュメントをご覧ください。
⑤ Developer Authenticated Identities
Amazon, Facebook, Google でもなければ OpenID Connect プロバイダでもないような、独自の認証システムと紐付けたい場合、独自の認証システム側に手を加える事で Cognito の Identity Pool ID と紐付けることができます。ここでは、独自の認証プロバイダと識別できるような名前を入れます。ここは後から変更できないので注意してください。詳しくは下記ブログをご覧ください。
ここまでできたら次のステップです。認証済みの ID と 匿名の ID が利用する IAM Role を指定します。新しく作成する場合は「Create a new IAM Role」が指定されていれば OK です。
ちなみに、このウィザードで作成される IAM Role の Policy は次にようになります。Mobile Analytics と Cognito Sync へのアクセスが許可されています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "mobileanalytics:PutEvent", "cognito-sync:*" ], "Resource": [ "*" ] } ] }
次のステップに進むと、アプリに導入するためのサンプルコードが表示されます。以上で AWS Management Console で行う作業は一旦完了です。
AWS Mobile SDK の導入
今回は iOS アプリで試してみたいと思います。まずは適当な Xcode プロジェクトに AWS SDK for iOS を CocoaPods を利用してインストールしましょう。ちなみに Cognito Sync を利用しない場合は pod "AWSCognitoSync" は不要です。
pod "AWSiOSSDKv2" pod "AWSCognitoSync"
次に実装です。先ほど表示されたサンプルコードと同じように、AppDelegate に書いてみます。
#import "AppDelegate.h" #import <AWSiOSSDKv2/AWSCore.h> #import <AWSCognitoSync/Cognito.h> @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // ログの出力 [AWSLogger defaultLogger].logLevel = AWSLogLevelVerbose; // ...いずれかのプロバイダの認証処理... // Cognito の認証 AWSCognitoCredentialsProvider *credentialsProvider = [AWSCognitoCredentialsProvider credentialsWithRegionType:AWSRegionUSEast1 identityPoolId:@"us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]; AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider]; [AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration; // Cognito Syncにデータを保存してみる AWSCognito *syncClient = [AWSCognito defaultCognito]; AWSCognitoDataset *dataset = [syncClient openOrCreateDataset:@"myDataset"]; [dataset setString:@"myValue" forKey:@"myKey"]; [dataset synchronize]; return YES; } @end
ここでのポイントは AWSCognitoCredentialsProvider の初期化処理が簡素化されている点です。以前は認証済みの ID で利用する IAM Role Arn と匿名 ID で利用する IAM Role Arn を指定する必要がありました。今回のアップデートにより、Cognito が自動的に IAM Role Arn を参照するようになったため、これらの設定はクライアント側では不要になりました。
なお、上記コードに「いずれかのプロバイダの認証処理」と書きましたが、Cognito Sync は認証済みの ID でしか利用することができません(匿名 ID の場合、起動する毎に ID が変わるため)。Amazon や Facebook、Google のアカウントへの認証処理を含めることで認証済み ID に紐付けることができるため、Cognito Sync が利用できるようになります。ちなみに上記コードのまま実行すると匿名 ID になるので Cognito Sync の処理は失敗しますが、匿名 ID としてログインすることはできます。
以上で完了です。アプリを一回実行すると、AWS Management Console でログインできていることが確認できます。
Identity Pool ID と Cognito Sync の確認
今回のアップデートでは、Identity Pool にログインした ID を AWS Management Console から一覧することができるとともに、Cognito Sync を利用して保存した DataSet の確認と編集が行えるようになりました。ということで見てみます。「Identity Browser」をクリックしてみましょう。
いままでログインしたことがある Identity Pool ID が一覧できます!「Linked Logins」が 0 になっている ID は匿名の ID ですね。紐付いているプロバイダでフィルターできると良いなぁ…
Identity Pool ID をクリックすると、その ID で作成した Cognito Sync の DataSet が確認できます。
さらに進むと、DataSet で保存した各値を確認したり、編集することができます。
まとめ
以前と比べるとかなり簡単になったので、アプリへの導入コストがより低くなったのではないでしょうか。今後も Cognito さんにご期待ください!