

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

# Amazon Cognito の認証と認可を、ウェブアプリケーションとモバイルアプリケーションに統合する
<a name="cognito-integrate-apps"></a>

Amazon Cognito の実装は、 AWS マネジメントコンソール または AWS SDK 管理ツールと、アプリケーション内の SDK ライブラリを組み合わせたものです。Amazon Cognito コンソールは、Amazon Cognito ユーザープールとアイデンティティプールを設定および管理するためのビジュアルインターフェイスです。

Amazon Cognito ユーザープールと最も簡単に統合するには、[マネージドログイン](cognito-terms.md#terms-managedlogin)を使用します。マネージドログインは、Amazon Cognito ユーザープールを迅速にテストおよびデプロイするための、即座に使用できるウェブベースのサインインアプリケーションです。マネージドログインによるユーザープール認証には、ホストされたサインインページにユーザーを誘導する OpenID Connect (OIDC) ライブラリが必要です。この一連のユーザーインタラクティブなリダイレクトウェブエンドポイントでは、サードパーティによるサインイン、多要素認証 (MFA)、認証フローの選択などの認証フローを Amazon Cognito が処理します。アプリケーションは、Amazon Cognito がレスポンスで返す認証結果だけを処理する必要があります。

また、 AWS SDK をアプリケーションに追加したり、認証インターフェイスをカスタムビルドしたり、ユーザーの認証と認可のために API オペレーションを呼び出すこともできます。 [AWS Amplify](https://docs.amplify.aws/)は、バックエンドで Amazon Cognito 認証を使用してフルスタックアプリケーションを構築 AWS のサービス するための です。

例えば、アプリケーションは、ユーザーのサインインのためにマネージドログインを呼び出し、次にアプリケーションコードからトークンエンドポイントを呼び出して、ユーザーの認可コードをトークンと交換する場合があります。この場合、アプリケーションはユーザーのトークンを解釈して保存し、認証と認可のための適切なコンテキストでトークンを提示する必要があります。Amplify は、これらのプロセス用の組み込み機能を備えたガイド付き統合ツールを追加します。

Amazon Cognito リソースをすべてコードで構築することもできます。ID プールには、ユーザープールと同じマネージド認証オプションはありません。アプリケーションで AWS 認証情報にアクセスするには、インポートされた SDK モジュールに ID プールオペレーションを実装します。独自にカスタム構築したアプリケーションコードの使用を開始するには、[AWS SDK](https://aws.amazon.com/developer/tools/) の Amazon Cognito [コード例](https://docs.aws.amazon.com/cognito/latest/developerguide/service_code_examples.html)を参照してください。OpenID Connect ID プロバイダーとして Amazon Cognito と統合するには、[OpenID Connect デベロッパーツール](https://openid.net/certified-open-id-developer-tools/)を使用します。

Amazon Cognito の認証と認可を使用する前に、アプリプラットフォームを選択し、サービスと統合するためのコードを準備します。 AWS SDKs「」を参照してください[AWS SDKsによる認証](#amazon-cognito-authentication-with-sdks)。 AWS CLI は Amazon Cognito およびその他のコマンドライン SDK であり AWS のサービス、Amazon Cognito API オペレーションとその構文に慣れるための貴重な場所です。

**注記**  
Amazon Cognito の一部のコンポーネントは、API でのみ設定できます。例えば、ユーザープールの[カスタム SMS または E メール送信者](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-sender-triggers.html)の Lambda トリガーは、[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) または [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API リクエスト内の [UserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserPoolType.html) クラスの `LambdaConfig` プロパティを更新するリクエストでのみ設定できます。

Amazon Cognito ユーザープール API は、その名前空間を複数の API オペレーションクラスと共有します。1 つのクラスでは、ユーザープールとそのプロセス、ID プロバイダー、ユーザーを設定します。別のクラスでは、パブリッククライアントでユーザーがサインイン、サインアウト、プロファイルの管理を行うための認証されていないオペレーションを提供します。API オペレーションの最後のクラスでは、機密のサーバー側クライアントで、独自の  AWS  認証情報で認可したユーザーオペレーションを実行します。アプリケーションコードの実装を始める前に、目的のアプリケーションアーキテクチャを知っておく必要があります。詳細については、「[API、OIDC、マネージドログインページの認証についての理解](authentication-flows-public-server-side.md#user-pools-API-operations)」を参照してください。

**Topics**
+ [による認証 AWS Amplify](#cognito-integrate-apps-amplify)
+ [AWS SDKsによる認証](#amazon-cognito-authentication-with-sdks)
+ [Amazon Cognito による認証の仕組み](cognito-how-to-authenticate.md)
+ [AWS SDK でのこのサービスの使用](sdk-general-information-section.md)
+ [Amazon Verified Permissions による承認](amazon-cognito-authorization-with-avp.md)

## による認証 AWS Amplify
<a name="cognito-integrate-apps-amplify"></a>

AWS Amplify は、ウェブおよびモバイルアプリケーションを構築するための完全なソリューションです。Amplify を使用すると、Amplify ライブラリを使用して既存のリソースに接続したり、Amplify コマンドラインインターフェイス (CLI) を使用して新しいリソースを作成および設定したりできます。Amplify には、[Authenticator](https://ui.docs.amplify.aws/react/connected-components/authenticator) などの UI コンポーネントも接続されており、アプリケーションでのサインインやサインアップエクスペリエンスの設定とカスタマイズに使用できます。

フロントエンドアプリケーションで Amplify の認証機能を使用するには、プラットフォーム別の以下のドキュメントを参照してください。
+ [React 向けの Amplify 認証](https://docs.amplify.aws/react/start/)
+ [React Native 向けの Amplify 認証](https://docs.amplify.aws/react-native/start/)
+ [Swift 向けの Amplify 認証 (iOS)](https://docs.amplify.aws/swift/start/)
+ [Android 向けの Amplify 認証](https://docs.amplify.aws/android/start/)
+ [Flutter 向けの Amplify 認証](https://docs.amplify.aws/flutter/start/)

Amplify ライブラリはオープンソースで、[GitHub](https://github.com/aws-amplify) で利用できます。Amplify Auth が Amazon Cognito 認証をどのように実装するかの詳細については、以下のライブラリを参照してください。
+ [amplify-js](https://github.com/aws-amplify/amplify-js/tree/main/packages/auth)
+ [amplify-swift](https://github.com/aws-amplify/amplify-swift/tree/main/Amplify/Categories/Auth)
+ [amplify-flutter](https://github.com/aws-amplify/amplify-flutter/tree/main/packages/auth)
+ [amplify-android](https://github.com/aws-amplify/amplify-android/tree/main/aws-auth-cognito)

### Amplify によるユーザーインターフェイス (UI) の作成
<a name="cognito-integrate-apps-amplify-ui"></a>

[ユーザープールのマネージドログイン](cognito-user-pools-managed-login.md)は、ウェブまたはモバイルアプリの認証フロントエンドの最も重要なニーズを満たすことができます。マネージドログインで対応できるパラメータを超えてユーザーインターフェイス (UI) をカスタマイズするには、アプリケーションをカスタム構築します。[Amplify UI](https://ui.docs.amplify.aws/) は、さまざまな言語でのカスタマイズ可能なフロントエンドコンポーネントのコレクションです。

![\[Amplify Authenticator アプリケーションの例を示すスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/amplify-authenticator-ui.png)


カスタム認証コンポーネントの使用を開始するには、Authenticator コンポーネントに関する以下のドキュメントを参照してください。
+ [Authenticator for Android](https://ui.docs.amplify.aws/android/connected-components/authenticator)
+ [Authenticator for Angular](https://ui.docs.amplify.aws/angular/connected-components/authenticator)
+ [Authenticator for Flutter](https://ui.docs.amplify.aws/flutter/connected-components/authenticator)
+ [Authenticator for React](https://ui.docs.amplify.aws/react/connected-components/authenticator)
+ [Authenticator for React Native](https://ui.docs.amplify.aws/react-native/connected-components/authenticator)
+ [Authenticator for Swift](https://ui.docs.amplify.aws/swift/connected-components/authenticator)
+ [Authenticator for Vue](https://ui.docs.amplify.aws/vue/connected-components/authenticator)

## AWS SDKsによる認証
<a name="amazon-cognito-authentication-with-sdks"></a>

安全なバックエンドを使用して Amazon Cognito とやり取りする独自の ID マイクロサービスを構築するには、選択した言語で AWS SDK を使用して Amazon Cognito ユーザープールと Amazon Cognito ID プール API に接続します。

各 API オペレーションの詳細については、「[Amazon Cognito ユーザープール API リファレンス](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_Operations.html)」と「[Amazon Cognito API リファレンス](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/Welcome.html)」を参照してください。これらのドキュメントには、サポートされているプラットフォームでさまざまな SDK を使用するためのリソースに関する、「[https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#API_InitiateAuth_SeeAlso](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#API_InitiateAuth_SeeAlso)」セクションが含まれています。
+ [AWS コマンドラインインターフェイス](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/index.html#cli-aws-cognito-idp)
+ [AWS SDK for .NET](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CognitoIdentityProvider/TCognitoIdentityProviderClient.html)
+ [AWS SDK for C\$1\$1](https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-cognito-idp/html/class_aws_1_1_cognito_identity_provider_1_1_cognito_identity_provider_client.html)
+ [AWS SDK for Go](https://docs.aws.amazon.com/sdk-for-go/api/service/cognitoidentityprovider/#CognitoIdentityProvider)
+ [AWS SDK for Java V2](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/cognitoidentityprovider/CognitoIdentityProviderClient.html)
+ [AWS SDK for JavaScript](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html)
+ [AWS SDK for PHP V3](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.CognitoIdentityProvider.CognitoIdentityProviderClient.html)
+ [AWS SDK for Python](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cognito-idp.html)
+ [AWS SDK for Ruby V3](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/CognitoIdentityProvider/Client.html)

# Amazon Cognito による認証の仕組み
<a name="cognito-how-to-authenticate"></a>

顧客が Amazon Cognito ユーザープールにサインインすると、アプリケーションは JSON ウェブトークン (JWT) を受け取ります。

顧客がユーザープールトークンまたは他のプロバイダーを使用して ID プールにサインインすると、アプリケーションは一時的な AWS 認証情報を受け取ります。

ユーザープールサインインを使用すると、 AWS SDK を使用して認証と認可を完全に実装できます。独自のユーザーインターフェイス (UI) コンポーネントを構築しない場合は、構築済みのウェブ UI (マネージドログイン) またはサードパーティの ID プロバイダー (IdP) のサインインページを起動できます。

このトピックでは、アプリケーションが Amazon Cognito とやり取りして ID トークンによる認証、アクセストークンによる認可、および ID プール認証情報 AWS のサービス によるアクセスを行う方法の概要を説明します。

**Topics**
+ [マネージドログインによるユーザープール認証](#cognito-authentication-concepts-managed-login)
+ [AWS SDK を使用したユーザープール API の認証と認可](#cognito-authentication-concepts-apiauth)
+ [サードパーティー ID プロバイダーによるユーザープール認証](#cognito-authentication-concepts-thirdparty)
+ [アイデンティティプール認証](#cognito-authentication-concepts-identitypools)

## マネージドログインによるユーザープール認証
<a name="cognito-authentication-concepts-managed-login"></a>

[マネージドログイン](cognito-user-pools-managed-login.md)は、ユーザープールとアプリケーションクライアントにリンクされたウェブサイトです。ユーザーのサインイン、サインアップ、パスワードリセットの操作を実行できます。認証用のマネージドログインコンポーネントを持つアプリケーションでは、デベロッパーによる実装の労力を軽減できます。アプリケーションは、認証用の UI コンポーネントをスキップし、マネージドログインのウェブページをユーザーのブラウザで起動できます。

アプリケーションは、ウェブまたはアプリケーションのリダイレクトロケーションを使用してユーザーの JWT を収集します。マネージドログインを実装したアプリケーションは、OpenID Connect (OIDC) の IdP であるかのように、認証のためにユーザープールに接続できます。

マネージドログインは、アプリケーションが OIDC 認可サーバーの認証サービスを必要とするが、カスタム認証、アイデンティティプールの統合、ユーザー属性のセルフサービスなどの機能をすぐには必要としないモデルに適しています。これらの高度なオプションの一部を使用する場合は、SDK のユーザープールコンポーネントで実装できます。

OIDC 実装に主に依存する、マネージドログインやサードパーティ IdP の認可モデルは、OAuth 2.0 スコープを使用する高度な認可モデルに最適です。

次の図は、マネージドログイン認証の一般的なサインインセッションを示しています。

![\[ユーザーに入力を求め、マネージドログインでユーザーをサインインさせるアプリケーションを示すフローチャート。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/authentication-managed-login.png)


**マネージドログイン認証フロー**

1. ユーザーがアプリケーションにアクセスします。

1. [サインイン] リンクを選択します。

1. アプリケーションは、ユーザープールドメインのマネージドログインページのサインインプロンプトへと、ユーザーを誘導します。

1. ユーザー名とパスワードを入力します。

1. ユーザープールはユーザーの認証情報を検証し、ユーザーが多要素認証 (MFA) をアクティブ化したと判断します。

1. マネージドログインページは、MFA コードを入力するようユーザーに求めます。

1. ユーザーが MFA コードを入力します。

1. ユーザープールは、ユーザーをアプリケーション URL にリダイレクトします。

1. アプリケーションは、マネージドログインで[コールバック URL](cognito-terms.md#term-callbackurl) に追加した URL リクエストパラメータから認証コードを収集します。

1. アプリケーションは、認証コードを使用してトークンをリクエストします。

1. トークンエンドポイントは JWT をアプリケーションに返します。

1. アプリケーションは、ユーザーの JWT についてデコード、検証、保存、キャッシングを行います。

1. アプリケーションには、リクエストの対象である、アクセスコントロールコンポーネントが表示されます。

1. ユーザーはコンテンツを表示します。

1. その後、ユーザーのアクセストークンの有効期限が切れ、アクセスコントロールコンポーネントの表示をリクエストします。

1. アプリケーションは、ユーザーのセッションを持続させる必要があると判断します。更新トークンを使用して、トークンエンドポイントから新しいトークンをリクエストします。

**バリアントとカスタマイズ**  
[ブランディングエディタ](managed-login-brandingeditor.md)を使用して、ユーザープール全体または任意の[アプリケーションクライアント](cognito-terms.md#term-appclient)レベルで、マネージドログインページの外観と操作感をカスタマイズできます。また、独自の ID プロバイダー、スコープ、ユーザー属性へのアクセス、高度なセキュリティ設定を使用して[アプリケーションクライアントを設定](user-pool-settings-client-apps.md)することもできます。

**関連リソース**
+ [ユーザープールのマネージドログイン](cognito-user-pools-managed-login.md)
+ [スコープ、M2M、リソースサーバー](cognito-user-pools-define-resource-servers.md)
+ [ユーザープールのエンドポイントとマネージドログインのリファレンス](cognito-userpools-server-contract-reference.md)

## AWS SDK を使用したユーザープール API の認証と認可
<a name="cognito-authentication-concepts-apiauth"></a>

AWS は、[さまざまな開発者フレームワーク](cognito-integrate-apps.md#amazon-cognito-authentication-with-sdks)で Amazon Cognito ユーザープールまたは *Amazon Cognito ID プロバイダー*用のコンポーネントを開発しました。これらの SDK に組み込まれているメソッドは、[Amazon Cognito ユーザープール API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html) を呼び出します。同じユーザープール API 名前空間には、ユーザープールの設定とユーザー認証のためのオペレーションがあります。詳細については、「[API、OIDC、マネージドログインページの認証についての理解](authentication-flows-public-server-side.md#user-pools-API-operations)」を参照してください。

API 認証は、アプリケーションに既存の UI コンポーネントがあって、かつ、主にユーザーディレクトリとしてユーザープールに依存するモデルに適合します。この設計では、Amazon Cognito を大型アプリケーション内のコンポーネントとして追加します。これには、複雑なチャレンジとレスポンスの連鎖を処理するためのプログラムロジックが必要です。

このアプリケーションでは、OpenID Connect (OIDC) の依拠しているパーティーによる完全な実装を実装する必要はありません。代わりに、JWT をデコードして使用できます。[ローカルユーザー](cognito-terms.md#terms-localuser)のユーザープール機能一式にアクセスするには、開発環境で Amazon Cognito SDK を使用して認証を構築します。

カスタム OAuth スコープを使用した API 認証は、外部 API 認証に向いていません。API 認証からアクセストークンにカスタムスコープを追加するには、[トークン生成前の Lambda トリガー](user-pool-lambda-pre-token-generation.md) を使用して実行時にトークンを変更します。

次の図は、API 認証の一般的なサインインセッションを示しています。

![\[ユーザーに入力を求め、 AWS SDK でサインインするアプリケーションを示すフローチャート。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/authentication-api.png)


**API 認証フロー**

1. ユーザーがアプリケーションにアクセスします。

1. [サインイン] リンクを選択します。

1. ユーザー名とパスワードを入力します。

1. アプリケーションは、[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) リクエストを行うメソッドを呼び出します。リクエストはユーザーの認証情報をユーザープールに渡します。

1. ユーザープールはユーザーの認証情報を検証し、ユーザーが多要素認証 (MFA) をアクティブ化したと判断します。

1. ユーザープールは、MFA コードをリクエストするチャレンジで応答します。

1. アプリケーションは、ユーザーから MFA コードを収集するプロンプトを生成します。

1. アプリケーションは、[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) API リクエストを行うメソッドを呼び出します。リクエストはユーザーの MFA コードを渡します。

1. ユーザープールは、ユーザーの MFA コードを検証します。

1. ユーザープールは、ユーザーの JWT で応答します。

1. アプリケーションは、ユーザーの JWT についてデコード、検証、保存、キャッシングを行います。

1. アプリケーションには、リクエストの対象である、アクセスコントロールコンポーネントが表示されます。

1. ユーザーはコンテンツを表示します。

1. その後、ユーザーのアクセストークンの有効期限が切れ、アクセスコントロールコンポーネントの表示をリクエストします。

1. アプリケーションは、ユーザーのセッションを持続させる必要があると判断します。更新トークンを使用して [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) メソッドを再度呼び出し、新しいトークンを取得します。

**バリアントとカスタマイズ**  
このフローは、独自のカスタム認証チャレンジなど、追加のチャレンジで拡張できます。パスワードが漏洩したユーザー、または予期しないサインイン特性によって悪意のあるサインインの試みがなされたことを示している可能性があるユーザーのアクセスを自動的に制限できます。このフローは、オペレーションがサインアップ、ユーザー属性の更新、パスワードのリセットを行う場合とほぼ同じです。これらのフローのほとんどには、パブリック (クライアント側) と機密 (サーバー側) の API オペレーションが重複しています。

**関連リソース**
+ [Amazon Cognito ユーザープール API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html)
+ [ユーザープールの開始方法](getting-started-user-pools.md)
+ [Amazon Cognito の認証と認可を、ウェブアプリケーションとモバイルアプリケーションに統合する](cognito-integrate-apps.md)
+ [API、OIDC、マネージドログインページの認証についての理解](authentication-flows-public-server-side.md#user-pools-API-operations)

## サードパーティー ID プロバイダーによるユーザープール認証
<a name="cognito-authentication-concepts-thirdparty"></a>

外部 ID プロバイダー (IdP) によるサインイン (または*フェデレーション認証*) は、[マネージドログイン](#cognito-authentication-concepts-managed-login)と似たモデルです。アプリケーションはユーザープールへの OIDC 依拠している当事者であり、ユーザープールは IdP へのパススルーとして機能します。IdP は、Facebook や Google などのコンシューマーユーザーディレクトリにすることも、SAML 2.0 や Azure などの OIDC エンタープライズディレクトリにすることもできます。

アプリケーションは、ユーザーのブラウザでマネージドログインを呼び出す代わりに、ユーザープールの[認可サーバー](cognito-terms.md#term-authzserver)でリダイレクトエンドポイントを呼び出します。ユーザーのビューから、アプリケーションのサインインボタンを選択します。次に、IdP からサインインするよう求められます。マネージドログイン認証と同じように、アプリケーションはアプリ内のリダイレクト場所で JWT を収集します。

サードパーティー IdP による認証は、アプリケーションにサインアップするときにユーザーが新しいパスワードを作らないモデルに適合します。サードパーティ認証は、マネージドログイン認証を実装したアプリケーションに簡単に追加できます。実際、マネージドログインとサードパーティ IdP は、ユーザーのブラウザで何を呼び出すかのわずかな違いに基づいて、一貫した認証結果を生成します。

マネージドログイン認証と同様に、フェデレーション認証は、OAuth 2.0 スコープを使用する高度な認可モデルに最適です。

次の図は、フェデレーション認証の一般的なサインインセッションを示しています。

![\[ユーザーに入力を求め、サードパーティー IdP でサインインするアプリケーションを示すフローチャート。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/authentication-federated.png)


**フェデレーション認証フロー**

1. ユーザーがアプリケーションにアクセスします。

1. [サインイン] リンクを選択します。

1. アプリケーションは、IdP を使用してサインインプロンプトをユーザーに指示します。

1. ユーザー名とパスワードを入力します。

1. IdP はユーザーの認証情報を検証し、ユーザーが多要素認証 (MFA) をアクティブ化したと判断します。

1. IdP は、ユーザーに MFA コードを入力するように求めます。

1. ユーザーが MFA コードを入力します。

1. IdP は、SAML レスポンスまたは認証コードを使用してユーザーをユーザープールにリダイレクトします。

1. ユーザーが認証コードを渡した場合、ユーザープールはコードを IdP トークンにサイレント交換します。ユーザープールは IdP トークンを検証し、新しい認証コードを使用してユーザーをアプリケーションにリダイレクトします。

1. アプリケーションは、[コールバック URL](cognito-terms.md#term-callbackurl) にユーザープールが追加した URL リクエストパラメータから認証コードを収集します。

1. アプリケーションは、認証コードを使用してトークンをリクエストします。

1. トークンエンドポイントは JWT をアプリケーションに返します。

1. アプリケーションは、ユーザーの JWT についてデコード、検証、保存、キャッシングを行います。

1. アプリケーションには、リクエストの対象である、アクセスコントロールコンポーネントが表示されます。

1. ユーザーはコンテンツを表示します。

1. その後、ユーザーのアクセストークンの有効期限が切れ、アクセスコントロールコンポーネントの表示をリクエストします。

1. アプリケーションは、ユーザーのセッションを持続させる必要があると判断します。更新トークンを使用して、トークンエンドポイントから新しいトークンをリクエストします。

**バリアントとカスタマイズ**  
[マネージドログイン](#cognito-authentication-concepts-managed-login)でフェデレーション認証を開始できます。ここで、ユーザーは、[アプリケーションクライアント](cognito-terms.md#term-appclient)に割り当てられたリストから IdP を選択できます。マネージドログインは、E メールアドレスを入力するよう求め、対応する SAML IdP に[ユーザーのリクエストを自動的にルーティング](cognito-user-pools-managing-saml-idp-naming.md)することもできます。サードパーティ ID プロバイダーによる認証では、マネージドログインとのユーザーインタラクションは*必要ありません*。アプリケーションは、ユーザーの[認可サーバーリクエスト](cognito-terms.md#term-authorizationserver)にリクエストパラメータを追加し、ユーザーに IdP サインインページにサイレントリダイレクトさせることができます。

**関連リソース**
+ [サードパーティーの ID プロバイダーを使用したユーザープールへのサインイン](cognito-user-pools-identity-federation.md)
+ [スコープ、M2M、リソースサーバー](cognito-user-pools-define-resource-servers.md)
+ [ユーザープールのエンドポイントとマネージドログインのリファレンス](cognito-userpools-server-contract-reference.md)

## アイデンティティプール認証
<a name="cognito-authentication-concepts-identitypools"></a>

アイデンティティプールは、関数、API 名前空間、および SDK モデルのユーザープールとは異なる、アプリケーションのコンポーネントです。ユーザープールがトークンベースの認証と認可を提供する場合、ID プールは AWS Identity and Access Management (IAM) の認可を提供します。

アイデンティティプールに IdP のセットを割り当て、それを使用してユーザーにサインインできます。ユーザープールはアイデンティティプール IdP として緊密に統合されており、アイデンティティプールに対して、アクセスコントロールの大半のオプションを提供します。同時に、アイデンティティプールにはさまざまな認証オプションがあります。ユーザープールは、SAML、OIDC、ソーシャル、デベロッパー、ゲスト ID ソースを、ID プールからの一時的な AWS 認証情報へのルートとして結合します。

アイデンティティプールによる認証は外部です。以前に説明したユーザープールフローのいずれかに従うか、別の IdP で独自に開発するフローに従います。アプリケーションが初期認証を実行すると、検証をアイデンティティプールに渡して、その見返りとして一時的なセッションを受け取ります。

ID プールを使用した認証は、IAM 認可 AWS のサービス を使用して のアプリケーションアセットとデータのアクセスコントロールを適用するモデルに適合します。[ユーザープールの API 認証](#cognito-authentication-concepts-apiauth)と同様に、成功したアプリケーションには、ユーザーの利益のためにアクセスする各サービスの AWS SDKs が含まれます。 AWS SDKs、ID プール認証からの認証情報を API リクエストの署名として適用します。

次の図は、IdP によるアイデンティティプール認証の一般的なサインインセッションを示しています。

![\[ユーザーに入力を求め、サードパーティー IdP でサインインするアプリケーションを示すフローチャート。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/authentication-identity-pool.png)


**アイデンティティプールの認証フロー**

1. ユーザーがアプリケーションにアクセスします。

1. [サインイン] リンクを選択します。

1. アプリケーションは、IdP を使用してサインインプロンプトをユーザーに指示します。

1. ユーザー名とパスワードを入力します。

1. IdP はユーザーの認証情報を検証します。

1. IdP は、SAML レスポンスまたは認証コードを使用してユーザーをアプリケーションにリダイレクトします。

1. ユーザーが認証コードを渡した場合、アプリケーションはコードを IdP トークンと交換します。

1. アプリケーションは、ユーザーの JWT またはアサーションについてデコード、検証、保存、キャッシングを行います。

1. アプリケーションは [GetId](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetId.html) API リクエストを行うメソッドを呼び出します。ユーザーのトークンまたはアサーションを渡し、アイデンティティ ID をリクエストします。

1. アイデンティティプールは、設定された ID プロバイダーに対してトークンまたはアサーションを検証します。

1. アイデンティティプールはアイデンティティ ID を返します。

1. アプリケーションは、[GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html) API リクエストを行うメソッドを呼び出します。ユーザーのトークンまたはアサーションを渡し、IAM ロールをリクエストします。

1. アイデンティティプールは新しい JWT を生成します。新しい JWT には、IAM ロールをリクエストするクレームが含まれています。アイデンティティプールは、ユーザーのリクエストと、IdP のアイデンティティプール設定のロール選択基準に基づいてロールを決定します。

1. AWS Security Token Service (AWS STS) は、ID プールからの [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) リクエストに応答します。レスポンスには、IAM ロールを持つ一時的セッションの API 認証情報が含まれています。

1. アプリケーションはセッション認証情報を保存します。

1. ユーザーは、 AWSでアクセス保護されたリソースを必要とするアクションをアプリケーションで実行します。

1. アプリケーションは、必要な の API リクエスト[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html)に署名として一時的な認証情報を適用します AWS のサービス。

1. IAM は、認証情報のロールにアタッチされたポリシーを評価します。それらをリクエストと比較します。

1. はリクエストされたデータ AWS のサービス を返します。

1. アプリケーションは、ユーザーのインターフェイスにデータをレンダリングします。

1. ユーザーはデータを表示します。

**バリアントとカスタマイズ**  
ユーザープールによる認証を視覚化するには、**問題トークン/アサーション**ステップの後に、以前のユーザープールの概要のいずれかを挿入します。デベロッパー認証は、**ID のリクエスト**前のすべてのステップを、[デベロッパー認証情報](cognito-terms.md#term-developercredentials)によって署名されたリクエストに置き換えます。また、ゲスト認証は **ID のリクエスト**に直接スキップし、認証を検証せず、[アクセスが制限された](iam-roles.md#access-policies-scope-down-services) IAM ロールの認証情報を返します。

**関連リソース**
+ [Amazon Cognito アイデンティティプール](cognito-identity.md)
+ [ユーザー IAM ロール](identity-pools.md#user-iam-roles)
+ [ID プールの認証フロー](authentication-flow.md)

# AWS SDK でのこのサービスの使用
<a name="sdk-general-information-section"></a>

AWS Software Development Kit (SDKsは、多くの一般的なプログラミング言語で使用できます。各 SDK には、デベロッパーが好みの言語でアプリケーションを簡単に構築できるようになる API、コード例、およびドキュメントが提供されています。


| SDK ドキュメント | コード例 | 
| --- | --- | 
| [AWS SDK for C\$1\$1](https://docs.aws.amazon.com/sdk-for-cpp) | [AWS SDK for C\$1\$1 コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp) | 
| [AWS CLI](https://docs.aws.amazon.com/cli) | [AWS CLI コード例](https://docs.aws.amazon.com/code-library/latest/ug/cli_2_code_examples.html) | 
| [AWS SDK for Go](https://docs.aws.amazon.com/sdk-for-go) | [AWS SDK for Go コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2) | 
| [AWS SDK for Java](https://docs.aws.amazon.com/sdk-for-java) | [AWS SDK for Java コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2) | 
| [AWS SDK for JavaScript](https://docs.aws.amazon.com/sdk-for-javascript) | [AWS SDK for JavaScript コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3) | 
| [AWS SDK for Kotlin](https://docs.aws.amazon.com/sdk-for-kotlin) | [AWS SDK for Kotlin コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin) | 
| [AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net) | [AWS SDK for .NET コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3) | 
| [AWS SDK for PHP](https://docs.aws.amazon.com/sdk-for-php) | [AWS SDK for PHP コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php) | 
| [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell) | [AWS Tools for PowerShell コード例](https://docs.aws.amazon.com/code-library/latest/ug/powershell_5_code_examples.html) | 
| [AWS SDK for Python (Boto3)](https://docs.aws.amazon.com/pythonsdk) | [AWS SDK for Python (Boto3) コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python) | 
| [AWS SDK for Ruby](https://docs.aws.amazon.com/sdk-for-ruby) | [AWS SDK for Ruby コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/ruby) | 
| [AWS SDK for Rust](https://docs.aws.amazon.com/sdk-for-rust) | [AWS SDK for Rust コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rustv1) | 
| [AWS SDK for SAP ABAP](https://docs.aws.amazon.com/sdk-for-sapabap) | [AWS SDK for SAP ABAP コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap) | 
| [AWS SDK for Swift](https://docs.aws.amazon.com/sdk-for-swift) | [AWS SDK for Swift コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift) | 

**可用性の例**  
必要なものが見つからなかった場合。このページの下側にある [**Provide feedback**] リンクから、コードの例をリクエストしてください。

# Amazon Verified Permissions による承認
<a name="amazon-cognito-authorization-with-avp"></a>

[Amazon Verified Permissions](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/what-is-avp.html) は、お客様が構築するアプリケーションの認可サービスです。Amazon Cognito ユーザープールを ID ソースとして追加すると、アプリケーションはユーザープールアクセスまたはアイデンティティ (ID) トークンを Verified Permissions に渡して、許可または拒否を決定できます。Verified Permissions は、[Cedar ポリシー言語](https://docs.cedarpolicy.com/)で記述したポリシーに基づいてユーザーのプロパティとリクエストコンテキストを考慮します。リクエストコンテキストには、リクエストしたドキュメント、画像、その他のリソースの ID と、ユーザーがリソースに対して実行するアクションを含めることができます。

アプリケーションは、[IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html) API リクエストまたは [BatchIsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorizedWithToken.html) API リクエストで Verified Permissions にユーザーの ID またはアクセストークンを提供できます。これらの API オペレーションは、ユーザーを `Principal` として受け入れ、アクセスする `Resource` の `Action` についての認可に関する決定を行います。カスタム `Context` を追加することで、より詳細なアクセス決定を行うことができます。

アプリケーションが `IsAuthorizedWithToken` API リクエストでトークンを提示すると、Verified Permissions は次の検証を実行します。

1. ユーザープールは、リクエストされたポリシーストアに設定された Verified Permissions の [ID ソース](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/identity-providers.html)です。

1. アクセストークンまたは ID トークンの `client_id` または `aud` クレームは、それぞれ Verified Permissions に提供したユーザープールアプリケーションのクライアント ID と一致します。このクレームを検証するには、Verified Permissions の ID ソースで[クライアント ID 検証](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/cognito-validation.html)を設定する必要があります。

1. トークンの有効期限は切れていません。

1. トークン内の `token_use` クレームの値は、`IsAuthorizedWithToken` に渡したパラメータと一致します。`token_use` クレームは、`accessToken` パラメータに渡した場合は `access` である必要があり、`identityToken` パラメータに渡した場合は `id` である必要があります。

1. トークンの署名は、ユーザープールの公開された JSON ウェブキー (JWK) から取得されます。JWK は、`https://cognito-idp.Region.amazonaws.com/your user pool ID/.well-known/jwks.json` で確認できます。

**失効したトークンと削除されたユーザー**  
Verified Permissions は、ID ソースとユーザートークンの有効期限からの既知の情報のみを検証します。Verified Permissions では、トークンの失効やユーザーの存在は確認されません。ユーザーのトークンを取り消したり、ユーザープールからユーザープロファイルを削除したりした場合でも、Verified Permissions は有効期限が切れるまでトークンを有効と見なします。

**ポリシーの評価**  
ユーザープールを[ポリシーストア](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/terminology.html#term-policy-store)の [ID ソース](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/identity-providers.html)として設定します。Verified Permissions へのリクエストでユーザーのトークンを送信するようにアプリケーションを設定します。Verified Permissions はリクエストごとに、トークンのクレームをポリシーと比較します。Verified Permissions は、 AWSの IAM ポリシーに似ていて、プリンシパル**、リソース**、およびアクション**を宣言します。Verified Permissions は、リクエストが許可されたアクションと一致し、明示的な `Deny` アクションと一致しない場合は `Allow` で応答し、それ以外の場合は `Deny` で応答します。詳細については、「[Amazon Verified Permissions ユーザーガイド](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policies.html)」の「*Amazon Verified Permissions のポリシー*」を参照してください。

**トークンをカスタマイズする**  
Verified Permissions に提示するユーザークレームを変更、追加、削除するには、アクセストークンと ID トークンの内容を [トークン生成前の Lambda トリガー](user-pool-lambda-pre-token-generation.md) でカスタマイズします。プレトークンを生成するトリガーを使用すると、トークンでクレームを追加および変更できます。例えば、データベースで追加のユーザー属性をクエリし、それらを ID トークンにエンコードできます。

**注記**  
Verified Permissions がクレームを処理する方法を考慮して、`cognito`、`dev`、または `custom` という名前のクレームをプレトークンの生成機能に追加しないでください。これらの予約済みクレームのプレフィックスを、`cognito:username` のようにコロンで区切られた形式ではなく、完全なクレーム名として提示すると、承認リクエストは失敗します。

**その他のリソース**
+ [Amazon Cognito トークンを Verified Permissions スキーマにマッピングする](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/identity-sources_map-token-to-schema.html)
+ [Amazon Verified Permissions と Amazon Cognito を使用して API Gateway API を認可する](https://aws.amazon.com/blogs/security/authorize-api-gateway-apis-using-amazon-verified-permissions-and-amazon-cognito/)
+ [ワークショップ: Amazon Cognito と Verified Permissions による認証と認可](https://catalog.workshops.aws/app-auth)

## Verified Permissions を使用した API 認可
<a name="amazon-cognito-authorization-with-avp-api-authorization"></a>

ID トークンまたはアクセストークンは、Verified Permissions を使用してバックエンド Amazon API Gateway REST API へのリクエストを認可できます。ユーザープールと API への即時リンクを含む[ポリシーストア](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores.html)を作成できます。「[API Gateway と ID ソースを使用してセットアップする](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores_create.html)」を開始オプションとして使用すると、Verified Permissions はユーザープールの ID ソースをポリシーストアに追加し、Lambda オーソライザーを API に追加します。アプリケーションがユーザープールベアラトークンを API に渡すと、Lambda オーソライザーは Verified Permissions を呼び出します。オーソライザーはトークンをプリンシパルとして、リクエストパスとメソッドをアクションとして渡します。

次の図は、Verified Permissions を使用した API Gateway API 承認フローを示しています。詳細については、「Amazon Verified Permissions ユーザーガイド」の「[API-linked policy stores](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores_api-userpool.html)」を参照してください。

![\[Amazon Verified Permissions を使用した API 認証のフローを示す図。アプリケーションは Amazon API Gateway API にリクエストを行います。API は Lambda オーソライザーを呼び出します。オーソライザーは、Verified Permissions に API リクエストを行います。Verified Permissions はトークンの有効性をチェックし、認可に関する決定を返します。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/amazon-cognito-avp-use-case.png)


Verified Permissions は、[ユーザープールグループ](cognito-user-pools-user-groups.md)に関する API 認可を構築します。ID トークンとアクセストークンの両方に `cognito:groups` クレームが含まれているため、ポリシーストアはさまざまなアプリケーションコンテキストで API のロールベースのアクセス制御 (RBAC) を管理できます。

### ポリシーストア設定の選択
<a name="amazon-cognito-authorization-with-avp-api-authorization-token-type"></a>

ポリシーストアで ID ソースを設定するときは、アクセストークンを処理するか、ID トークンを処理するかを選択する必要があります。この決定は、ポリシーエンジンの動作方法にとって重要です。ID トークンにはユーザー属性が含まれます。アクセストークンには、[OAuth スコープ](cognito-user-pools-define-resource-servers.md)というユーザーアクセスコントロール情報が含まれています。どちらのトークンタイプにもグループメンバー情報が含まれていますが、通常は Verified Permissions ポリシーストアを使用して RBAC のアクセストークンを使用することをお勧めします。アクセストークンは、認可に関する決定に役立つスコープをグループメンバーシップに追加します。アクセストークンのクレームは、認可リクエストの[コンテキスト](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/context.html)になります。

ユーザープールを ID ソースとして設定する場合は、ユーザーエンティティタイプとグループエンティティタイプも設定する必要があります。エンティティタイプは、Verified Permissions ポリシーで参照できるプリンシパル、アクション、リソース識別子です。ポリシーストア内のエンティティは*メンバーシップ*関係を持つことができ、1 つのエンティティを*親*エンティティのメンバーにすることができます。メンバーシップを使用すると、プリンシパルグループ、アクショングループ、リソースグループを参照できます。ユーザープールグループの場合、指定するユーザーエンティティタイプはグループエンティティタイプのメンバーである必要があります。[API リンクポリシーストア](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores_api-userpool.html)をセットアップするか、Verified Permissions コンソールで**ガイド付きセットアップ**に従うと、ポリシーストアは自動的にこの親メンバー関係を持ちます。

ID トークンは、RBAC を属性ベースのアクセス制御 (ABAC) と組み合わせることができます。[API リンクポリシーストア](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores_api-userpool.html)を作成したら、[ユーザー属性](#amazon-cognito-authorization-with-avp-example-policy)*と*グループメンバーシップを使用してポリシーを強化できます。ID トークンの属性クレームは、認可リクエストの[プリンシパル属性](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policies_examples-abac.html)になります。ポリシーは、プリンシパル属性に基づいて認可に関する決定を行うことができます。

また、指定した許容可能なアプリケーションクライアントのリストに一致する `aud` クレームまたは `client_id` クレームを持つトークンを受け入れるようにポリシーストアを設定することもできます。

### ロールベースの API 認可用ポリシーの例
<a name="amazon-cognito-authorization-with-avp-api-authorization-example"></a>

次のポリシー例は、[PetStore](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-from-example.html) サンプル REST API 用の Verified Permissions ポリシーストアのセットアップによって作成されました。

```
permit(
  principal in PetStore::UserGroup::"us-east-1_EXAMPLE|MyGroup",
  action in [ PetStore::Action::"get /pets", PetStore::Action::"get /pets/{petId}" ],
  resource
  );
```

Verified Permissions は、次の場合にアプリケーションからの認可リクエストに `Allow` 決定を返します。

1. アプリケーションは、`Authorization` ヘッダー内の ID トークンまたはアクセストークンをベアラトークンとして渡しました。

1. アプリケーションは、文字列 `MyGroup` を含む `cognito:groups` クレームでトークンを渡しました。

1. アプリケーションは、`https://myapi.example.com/pets` または `https://myapi.example.com/pets/scrappy` などに `HTTP GET` リクエストを行いました。

## Amazon Cognito ユーザーのポリシーの例。
<a name="amazon-cognito-authorization-with-avp-example-policy"></a>

ユーザープールは、API リクエスト以外の条件で Verified Permissions への認可リクエストを生成することもできます。アプリケーション内のアクセスコントロールの決定は、ポリシーストアに送信できます。例えば、リクエストがネットワークを通過する前に、属性ベースのアクセス制御で Amazon DynamoDB または Amazon S3 セキュリティを補完し、クォータの使用量を減らすことができます。

次の例では、[Cedar ポリシー言語](https://docs.cedarpolicy.com/)を使用して、1 つのユーザープールアプリケーションクライアントで認証する Finance ユーザーに `example_image.png` の読み取りと書き込みを許可しています。アプリケーションのユーザーである John は、アプリケーションクライアントから ID トークンを受け取り、それを GET リクエストで認可が必要な URL`https://example.com/images/example_image.png`に渡します。John の ID トークンには、ユーザープールアプリケーションのクライアント ID `1234567890example` の `aud` クレームが含まれています。また、プレトークンを生成する Lambda 関数によって、John 用に新しいクレーム `costCenter` (値は `Finance1234`) が挿入されています。

```
permit (
   principal,
   actions in [ExampleCorp::Action::"readFile", "writeFile"],
   resource == ExampleCorp::Photo::"example_image.png"
)
when {
   principal.aud == "1234567890example" &&
   principal.custom.costCenter like "Finance*"
};
```

次のリクエスト本文の結果は `Allow` レスポンスになります。

```
{
   "accesstoken": "[John's ID token]",
   "action": {
      "actionId": "readFile",
      "actionType": "Action"
   },
   "resource": {
      "entityId": "example_image.png",
      "entityType": "Photo"
   }
}
```

Verified Permissions でプリンシパルを指定する場合は、次の形式を使用してください。

```
permit (
   principal == [Namespace]::[Entity]::"[user pool ID]|[user sub]",
   action,
   resource
);
```

以下は、ID `us-east-1_Example`、サブ ID (ユーザー ID) `973db890-092c-49e4-a9d0-912a4c0a20c7` を持つユーザープール内のユーザーのプリンシパルの例です。

```
principal == ExampleCorp::User::"us-east-1_Example|973db890-092c-49e4-a9d0-912a4c0a20c7",
```

Verified Permissions でユーザーグループを指定する場合は、次の形式を使用してください。

```
permit (
   principal in [Namespace]::[Group Entity]::"[Group name]",
   action,
   resource
);
```

**属性ベースのアクセスコントロール**  
アプリの Verified Permissions による認可と、 AWS 認証情報の Amazon Cognito ID プールの[アクセスコントロール機能の属性](https://docs.aws.amazon.com/cognito/latest/developerguide/attributes-for-access-control.html)は、どちらも属性ベースのアクセスコントロール (ABAC) の形式です。以下は、Verified Permissions と Amazon Cognito ABAC の機能を比較したものです。ABAC では、システムがエンティティの属性を検査し、定義した条件に基づいて承認の決定を行います。


| サービス | プロセス | 結果 | 
| --- |--- |--- |
| Amazon Verified Permissions | Returns an 許可 or 拒否 decision from analysis of a user pool JWT. | Access to application resources succeeds or fails based on Cedar policy evaluation. | 
| Amazon Cognito identity pools (attributes for access control) | Assigns [セッションタグ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) to your user based on their attributes. IAM policy conditions can check tags 許可 or 拒否 user access to AWS のサービス. | A tagged session with temporary AWS credentials for an IAM role. | 