サインイン後の ID プール AWS のサービス を使用した へのアクセス - Amazon Cognito

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

サインイン後の ID プール AWS のサービス を使用した へのアクセス

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

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

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

Amazon Cognito ユーザープールで認証し、ID プールを持つ AWS リソースへのアクセスを許可するアプリケーションのフロー図。

ID プールの認証情報を使用して、次のことができます。

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

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

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

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

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

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

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

を使用したユーザープールのセットアップ AWS Management Console

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

を使用した ID プールのセットアップ AWS Management Console

次の手順では、 を使用して ID プールを 1 つ以上のユーザープールおよびクライアントアプリケーションと AWS Management Console 統合する方法について説明します。

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. トークン で preferred_role クレームを持つロールを選択を選択した場合、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)