メニュー
AWS Identity and Access Management
ユーザーガイド

モバイルアプリへの Amazon Cognito の使用

ウェブ ID フェデレーションの推奨される使い方は、Amazon Cognito を使用することです。たとえば、開発者の Adele は、モバイルデバイス用のゲームを開発しています。スコアやプロファイルのようなユーザーデータは Amazon S3 と Amazon DynamoDB に保存します。Adele はこのデータを 1 台のデバイスにローカルで保存して、Amazon Cognito を使って他のデバイス間で同期を取ることもできます。セキュリティおよびメンテナンス上の理由により、長期的な AWS セキュリティ認証情報をこのゲームで配布することはできません。また、このゲームが多数のユーザーを集めることもわかっています。以上のような理由から、IAM でプレーヤーごとに新しいユーザー ID を作成することはしません。代わりに、ユーザーがよく知られた ID プロバイダー(Login with AmazonFacebookGoogle など)や任意の OpenID Connect (OIDC) 互換の ID プロバイダーですでに確立した ID を使用してサインインできるようにゲームを開発します。ゲームでは、このようなプロバイダーの認証メカニズムを活用して、ユーザーの ID を検証できます。

モバイルアプリから自分の AWS リソースにアクセスできるようにするために、Adele はまず自分の選択した IdP に開発者 ID を登録します。また、これらのプロバイダーそれぞれについてアプリケーションを設定します。ゲーム用の Amazon S3 バケットおよび DynamoDB テーブルを含む AWS アカウントで、Amazon Cognito を使用して、ゲームに必要なアクセス権限を厳密に定義する IAM ロールを作成します。OIDC IdP を使用している場合は、IAM OIDC ID プロバイダーのエンティティも作成して、AWS アカウントと IdP との間に信頼を確立します。

アプリのコードでは、前の手順で設定した IdP のサインインインターフェイスを呼び出します。IdP がユーザーのサインイン操作をすべて処理し、アプリは OAuth アクセストークンまたは OIDC ID トークンをプロバイダーから取得します。アプリは、この認証情報を、AWS アクセスキー ID、シークレットアクセスキー、およびセッショントークンで構成される一時的セキュリティ認証情報のセットと交換できます。その後、アプリはこれらの認証情報を使用して、AWS によって提供されるウェブサービスにアクセスできます。アプリは、引き受けるロールで定義されているアクセス権限に制限されます。

以下の図は、この処理の流れを単純化して示しており、IdP として Login with Amazon を使用しています。ステップ 2 については、アプリで、Facebook、Google、その他の OIDC 互換 ID プロバイダーを利用することもできますが、この図には示していません。

Amazon Cognito を使用してモバイルアプリケーションのユーザーのフェデレーションを行うサンプルワークフロー
  1. 顧客はモバイルデバイスでアプリを起動します。アプリはユーザーにサインインするように求めます。

  2. アプリは Login with Amazon を使用して、ユーザーの認証情報を承認します。

  3. アプリは Cognito API を使用して、Login with Amazon ID トークンを Cognito トークンに置き換えます。

  4. アプリは AWS STS に一時的なセキュリティ証明書をリクエストして、Cognito トークンを渡します。

  5. アプリは一時的なセキュリティ証明書を使用して、アプリの動作に必要ないずれの AWS リソースにもアクセスできます。一時的なセキュリティ証明書に関連付けられたロールとその割り当てられたポリシーによって、アクセス可能なリソースが決まります。

以下のプロセスに従って、Amazon Cognito を使用してユーザーを認証してアプリに AWS リソースへのアクセス権を付与するように、アプリを設定します。このシナリオを実行するための具体的な手順については、Amazon Cognito のドキュメントを参照してください。

  1. (オプション)Login with Amazon、Facebook、Google、または他の任意の OpenID Connect (OIDC) 互換 ID プロバイダーで開発者としてサインアップし、プロバイダーで 1 つ以上のアプリを設定します。Amazon Cognito ではユーザーの認証されていない(ゲスト)アクセスがサポートされているので、この手順はオプションです。

  2. AWS マネジメントコンソール で Amazon Cognito に移動します。Amazon Cognito ウィザードを使用して ID プールを作成します。これは、アプリのために Amazon Cognito がエンドユーザー ID を整理しておくために使用するコンテナです。ID プールは、アプリ間で共有できます。ID プールをセットアップすると、Amazon Cognito ユーザーのアクセス権限を定義する 1 つまたは 2 つの IAM ロールが Amazon Cognito によって作成されます(1 つは認証された ID 用、2 つ目は認証されていない "ゲスト" ID 用)。

  3. iOS 向け AWS SDK または Android 向け AWS SDK をダウンロードしてアプリと統合し、Amazon Cognito の使用に必要なファイルをインポートします。

  4. ID プール ID、AWS アカウント番号、および ID プールに関連付けたロールの Amazon リソースネーム(ARN)を渡して、Amazon Cognito 認証情報プロバイダーのインスタンスを作成します。AWS マネジメントコンソール の Amazon Cognito ウィザードによって、作業の開始に役立つサンプルコードが提供されます。

  5. アプリが AWS リソースにアクセスするときに、認証情報プロバイダーインスタンスをクライアントオブジェクトに渡します。このオブジェクトが一時的なセキュリティ認証情報をクライアントに渡します。認証情報のアクセス権限は、前に定義したロールに基づいています。

詳細については、以下を参照してください。