モバイルアプリのための Amazon Cognito の使用 - AWS Identity and Access Management

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

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

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

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

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


      Amazon Cognito を使用してモバイルアプリケーションのユーザーのフェデレーションを行うサンプルワークフロー

  1. 顧客はモバイルデバイスでアプリを起動します。アプリはユーザーにサインインするように求めます。

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

  3. このアプリは Amazon Cognito API オペレーションの GetIdGetCredentialsForIdentity を使用して、Login with Amazon ID トークンを Amazon Cognito トークンに置き換えます。Login with Amazon プロジェクトを信頼するように設定されている Amazon Cognito は、一時的なセッション認証情報として AWS STS と交換するトークンを生成します。

  4. このアプリで Amazon Cognito から一時的なセキュリティ認証情報を受信します。また、アプリは Amazon Cognito のベーシック (クラシック) ワークフローを使用して、AssumeRoleWithWebIdentity を使用する AWS STS からトークンを取得します。詳細については、「Amazon Cognito 開発者ガイド」の「ID プール (フェデレーション ID) 認証フロー」を参照してください。

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

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

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

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

  3. AWS Amplify をアプリと統合して、Amazon Cognito の使用に必要なファイルをインポートします。

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

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

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