サインイン後にアイデンティティプールを使用して AWS のサービス にアクセスする - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

サインイン後にアイデンティティプールを使用して AWS のサービス にアクセスする

ユーザーがユーザープールでサインインすると、アイデンティティプールから発行された一時的な API 認証情報を使用して AWS のサービス にアクセスできます。

ウェブアプリケーションまたはモバイルアプリケーションは、ユーザープールからトークンを受け取ります。ユーザープールをアイデンティティプールの ID プロバイダーとして設定すると、アイデンティティプールはトークンを一時的な AWS 認証情報と交換します。これらの認証情報は、IAM ロールとそのポリシーの範囲に絞り込むことができ、ユーザーは限定された AWS リソースセットにアクセスできます。詳細については、「ID プールの認証フロー」を参照してください。

次の図は、アプリケーションがユーザープールでサインインし、アイデンティティプールの認証情報を取得し、AWS のサービス にアセットをリクエストする方法を示しています。

Amazon Cognito ユーザープールを使用して認証し、アイデンティティプールを使用して AWS リソースへのアクセスを認可するアプリケーションのフロー図。

アイデンティティプールの認証情報を使用すると、次のことができます。

  • ユーザー自身の認証情報を使用して、Amazon Verified Permissions にきめ細かな認証リクエストを行います。

  • IAM への接続を認可する Amazon API Gateway REST API または AWS AppSync GraphQL API に接続します。

  • IAM への接続を認可する Amazon DynamoDB や Amazon RDS などのデータベースバックエンドに接続します。

  • Amazon S3 バケットからアプリケーションアセットを取得します。

  • Amazon WorkSpaces 仮想デスクトップでセッションを開始します。

アイデンティティプールは、ユーザープールを用いて認証されたセッション内でのみ動作するわけではありません。また、サードパーティー ID プロバイダーから直接認証を受け入れ、認証されていないゲストユーザーの認証情報を生成することもできます。

AWS リソースへのアクセスを制御するためのアイデンティティプールとユーザープールグループの併用の詳細については、「ユーザープールにグループを追加する」および「ロールベースアクセスコントロールの使用」を参照してください。また、アイデンティティプールと AWS Identity and Access Management の詳細については、「ID プールの認証フロー」を参照してください。

AWS マネジメントコンソール を使用したユーザープールのセットアップ

Amazon Cognito ユーザープールを作成し、クライアントアプリごとに [User Pool ID] (ユーザープール ID) と [App Client ID] (アプリクライアント ID) をメモしておきます。ユーザープール作成の詳細については、「ユーザープールの開始方法」を参照してください。

AWS マネジメントコンソール を使用した ID プールのセットアップ

次の手順で、AWS マネジメントコンソールを使用して ID プールを 1 つ以上のユーザープールおよびクライアントアプリに統合する方法を説明します。

Amazon Cognito のユーザープール ID プロバイダー (IdP) を追加するには
  1. Amazon Cognito コンソール[ID プールの管理] をクリックします。アイデンティティプールを選択します。

  2. [ユーザーアクセス] タブを選択します。

  3. [ID プロバイダーを追加] を選択します。

  4. [Amazon Cognito ユーザープール] を選択します。

  5. ユーザープール IDアプリクライアント ID を入力します。

  6. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエストするロールを設定するには、[ロール設定] を設定します。

    1. その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを与えることも、ルール付きのロールを選択することもできます。Amazon Cognito ユーザープール IdP では、トークンの優先ロールクレームを持つロールを選択することもできます。cognito:preferred_role クレームの詳細については、「グループへの優先順位の値の割り当て」を参照してください。

      1. [ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースクレーム、ルールへのクレームを比較するために使用するオペレータ、このロール選択と一致する、およびロール割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

      2. [トークンの優先ロールクレームを持つロールを選択] を選択した場合、Amazon Cognito はユーザーの cognito:preferred_role クレームでロールの認証情報を発行します。優先ロールクレームが存在しない場合、Amazon Cognito はロール解決に基づいて認証情報を発行します。

    2. [ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

  7. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。

    • プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

    • sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピングを使用] を選択します。

    • プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピングを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

  8. [変更を保存] を選択します。

ユーザープールを ID プールと統合する

アプリユーザーが認証されると、認証情報プロバイダーのログインマップにユーザーのアイデンティティトークンを追加します。プロバイダー名は、Amazon Cognito ユーザープール ID に応じて異なります。次の構造になります。

cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>

<region> の値は、ユーザープール ID から取得できます。例えば、ユーザープール ID が us-east-1_EXAMPLE1 の場合、<region>us-east-1 になります。ユーザープール ID が us-west-2_EXAMPLE2 の場合、<region>us-west-2 になります。

JavaScript
var cognitoUser = userPool.getCurrentUser(); if (cognitoUser != null) { cognitoUser.getSession(function(err, result) { if (result) { console.log('You are now logged in.'); // Add the User's Id Token to the Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'YOUR_IDENTITY_POOL_ID', Logins: { 'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>': result.getIdToken().getJwtToken() } }); } }); }
Android
cognitoUser.getSessionInBackground(new AuthenticationHandler() { @Override public void onSuccess(CognitoUserSession session) { String idToken = session.getIdToken().getJWTToken(); Map<String, String> logins = new HashMap<String, String>(); logins.put("cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>", session.getIdToken().getJWTToken()); credentialsProvider.setLogins(logins); } });
iOS - objective-C
AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; AWSCognitoIdentityUserPoolConfiguration *userPoolConfiguration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"YOUR_CLIENT_ID" clientSecret:@"YOUR_CLIENT_SECRET" poolId:@"YOUR_USER_POOL_ID"]; [AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:userPoolConfiguration forKey:@"UserPool"]; AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"]; AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"YOUR_IDENTITY_POOL_ID" identityProviderManager:pool];
iOS - swift
let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil) let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", poolId: "YOUR_USER_POOL_ID") AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: "UserPool") let pool = AWSCognitoIdentityUserPool(forKey: "UserPool") let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "YOUR_IDENTITY_POOL_ID", identityProviderManager:pool)