[Amazon Cognito] Cognito の導入方法がより簡単になりました!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Identity Pool の作成がより簡単に

先日(2015/01/20)、 Amazon Cognito のアップデートがありました。

  1. Cognito Sync Store で保存した情報に開発者からアクセス
  2. AWS Management Console で Identity Pool ID の検索
  3. Identity Pool への Role の紐付け
  4. AWS Mobile SDK での初期化処理の簡素化

今回のアップデートにより Identity Pool の作成がより簡単になりました!これは有り難いアップデートですよね。

ということで、改めて Identity Pool の作成方法についてまとめてみたいと思います。Cognito とは何ぞや?というかたは以下をお読みいただければと思います!

Identity Pool の作成

まずは次のページにアクセスしましょう。

3つのステップのウィザードが開始されます。ステップ3は AWS Mobile SDK の埋め込みのガイドなので、AWS Management Console から行うことは実質2ステップです。まずは Identity Pool の設定です。

new-identity-pool01

各設定項目の解説は以下の通りです。なお、最低限必要なのは ① と ② だけです。とりあえず試してみたいだけであれば ③ 移行は必須ではありません。

① 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 です。

new-identity-pool02

ちなみに、このウィザードで作成される IAM Role の Policy は次にようになります。Mobile Analytics と Cognito Sync へのアクセスが許可されています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "mobileanalytics:PutEvent",
        "cognito-sync:*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

次のステップに進むと、アプリに導入するためのサンプルコードが表示されます。以上で AWS Management Console で行う作業は一旦完了です。

new-identity-pool03

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 でログインできていることが確認できます。

new-identity-pool04

Identity Pool ID と Cognito Sync の確認

今回のアップデートでは、Identity Pool にログインした ID を AWS Management Console から一覧することができるとともに、Cognito Sync を利用して保存した DataSet の確認と編集が行えるようになりました。ということで見てみます。「Identity Browser」をクリックしてみましょう。

new-identity-pool04-2

いままでログインしたことがある Identity Pool ID が一覧できます!「Linked Logins」が 0 になっている ID は匿名の ID ですね。紐付いているプロバイダでフィルターできると良いなぁ…

new-identity-pool05

Identity Pool ID をクリックすると、その ID で作成した Cognito Sync の DataSet が確認できます。

new-identity-pool06

さらに進むと、DataSet で保存した各値を確認したり、編集することができます。

new-identity-pool07

まとめ

以前と比べるとかなり簡単になったので、アプリへの導入コストがより低くなったのではないでしょうか。今後も Cognito さんにご期待ください!