

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

# 認証情報プロバイダー
<a name="credential-providers"></a>

****  
**デフォルトの認証情報プロバイダーチェーンがバージョン 1.4.0 で変更された認証情報を解決する順序 詳細については、以下の注意事項を参照してください。**

を使用して Amazon Web Services にリクエストを送信する場合 AWS SDK for Kotlin、リクエストは によって発行された認証情報で暗号的に署名される必要があります AWS。Kotlin SDK は、自動的にリクエストに署名します。認証情報を取得するために、SDK は JVM システムプロパティ、環境変数、共有 AWS `config``credentials`ファイル、Amazon EC2 インスタンスメタデータなど、いくつかの場所にある設定を使用できます。

SDK は*、認証情報プロバイダー*の抽象化を使用して、さまざまなソースから認証情報を取得するプロセスを簡素化します。SDK には[、いくつかの認証情報プロバイダーの実装](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/aws-config/aws.sdk.kotlin.runtime.auth.credentials/index.html)が含まれています。

例えば、取得された設定に共有`config`ファイルからの IAM Identity Center シングルサインオンアクセス設定が含まれている場合、SDK は IAM Identity Center と連携して、リクエストに使用する一時的な認証情報を取得します AWS のサービス。認証情報を取得するこのアプローチでは、SDK は IAM Identity Center プロバイダー (SSO 認証情報プロバイダーとも呼ばれます) を使用します。このガイド[のセットアップセクション](setup-basic-onetime-setup.md#setup-sso-access)では、この設定について説明しました。

特定の認証情報プロバイダーを使用するには、サービスクライアントを作成するときに指定できます。または、デフォルトの認証情報プロバイダーチェーンを使用して、設定を自動的に検索することもできます。

## デフォルトの認証情報プロバイダーチェーン
<a name="default-credential-provider-chain"></a>

クライアントの構築時に明示的に指定しない場合、SDK for Kotlin は認証情報プロバイダーを使用して、認証情報を提供できる各場所を順番にチェックします。このデフォルトの認証情報プロバイダーは、認証情報プロバイダーのチェーンとして実装されます。

デフォルトのチェーンを使用してアプリケーションで認証情報を指定するには、 `credentialsProvider`プロパティを明示的に指定せずにサービスクライアントを作成します。

```
val ddb = DynamoDbClient {
    region = "us-east-2"
}
```

サービスクライアントの作成の詳細については、[「クライアントの構築と設定](creating-clients.md)」を参照してください。

### デフォルトの認証情報プロバイダーチェーンについて説明します。
<a name="default-credentials-retrieval-order"></a>

デフォルトの認証情報プロバイダーチェーンは、次の事前定義されたシーケンスを使用して認証情報設定を検索します。設定された設定が有効な認証情報を提供すると、チェーンは停止します。

**1. [AWS アクセスキー (JVM システムプロパティ)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)**  
SDK は`aws.accessKeyId`、、`aws.secretAccessKey`、および `aws.sessionToken` JVM システムプロパティを検索します。

**2. [AWS アクセスキー (環境変数)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)**  
SDK は `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY`、および `AWS_SESSION_TOKEN` 環境変数から認証情報をロードしようとします。

**3. [ウェブ ID トークン](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role-web.html)**  
SDK は環境変数 `AWS_WEB_IDENTITY_TOKEN_FILE`および `AWS_ROLE_ARN` (または JVM システムプロパティ `aws.webIdentityTokenFile`および ) を検索します`aws.roleArn`。トークン情報とロールに基づいて、SDK は一時的な認証情報を取得します。

**4. [設定ファイルのプロファイル](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)**  
このステップでは、SDK はプロファイルに関連付けられた設定を使用します。デフォルトでは、SDK は共有 AWS `config` ファイルと `credentials` ファイルを使用しますが、`AWS_CONFIG_FILE`環境変数が設定されている場合、SDK はその値を使用します。`AWS_PROFILE` 環境変数 (または `aws.profile` JVM システムプロパティ) が設定され*ていない場合*、SDK は「デフォルト」プロファイルを検索します。それ以外の場合は、`AWS_PROFILE’s`値に一致するプロファイルを検索します。  
SDK は、前の段落で説明した設定に基づいてプロファイルを検索し、そこで定義された設定を使用します。SDK で見つかった設定に、さまざまな認証情報プロバイダーアプローチの設定が混在している場合、SDK は次の順序を使用します。  

1. [AWS アクセスキー (設定ファイル)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html) - SDK は、`aws_access_key_id`、`aws_access_key_id`、および の設定を使用します`aws_session_token`。

1. [ロール設定の引き受け](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role.html) - SDK が `role_arn`および `source_profile`または `credential_source`設定を検出した場合、ロールの引き受けを試みます。SDK が `source_profile`設定を見つけた場合、別のプロファイルから認証情報をソースにして、 で指定されたロールの一時的な認証情報を受け取ります`role_arn`。SDK が `credential_source`設定を検出すると、`credential_source`設定の値に応じて、Amazon ECS コンテナ、Amazon EC2 インスタンス、または環境変数から認証情報が取得されます。次に、これらの認証情報を使用して、ロールの一時的な認証情報を取得します。

   プロファイルには `source_profile`設定または `credential_source`設定を含める必要がありますが、両方を含めることはできません。

1. [ウェブ ID トークン設定](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role-web.html) - SDK が `role_arn`および `web_identity_token_file`設定を検出した場合、 `role_arn`とトークンに基づいて AWS リソースにアクセスするための一時的な認証情報を取得します。

1. [SSO トークン設定](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html) - SDK が `sso_session`、`sso_account_id`、 `sso_role_name`設定 (設定ファイル内のコンパニオン`sso-session`セクションとともに) を検出した場合、SDK は IAM Identity Center サービスから一時的な認証情報を取得します。

1. [レガシー SSO 設定](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-legacy) - SDK が ` sso_start_url`、`sso_region`、`sso_account_id`、および `sso_role_name`設定を検出した場合、SDK は IAM Identity Center サービスから一時的な認証情報を取得します。

1. [ログイン設定](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-legacy) - SDK が`login_session`設定を見つけた場合、ログインセッションの一時的な認証情報を使用するか、5 分未満で期限切れになると更新を試みます。ログインセッションを開始する方法については、 [AWS CLI ユーザーガイド](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html)を参照してください。

1. [プロセス設定](https://docs.aws.amazon.com/sdkref/latest/guide/feature-process-credentials.html) - SDK が`credential_process`設定を見つけた場合、パス値を使用してプロセスを呼び出し、一時的な認証情報を取得します。

**5. [コンテナ認証情報](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html)**  
SDK は、環境変数 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`または `AWS_CONTAINER_CREDENTIALS_FULL_URI`と `AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE`または を検索します`AWS_CONTAINER_AUTHORIZATION_TOKEN`。これらの値を使用して、GET リクエストを通じて指定された HTTP エンドポイントから認証情報をロードします。

**6. [IMDS 認証情報](https://docs.aws.amazon.com/sdkref/latest/guide/feature-imds-credentials.html)**  
SDK は、デフォルトまたは設定された HTTP エンドポイントで[インスタンスメタデータサービス](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)から認証情報を取得しようとします。SDK は [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) のみをサポートします。

この時点で認証情報がまだ解決されない場合、クライアントの作成は例外で失敗します。

**注: 認証情報解決の順序の変更**  
上記の認証情報解決の順序は、 SDK for Kotlin の`1.4.x+`リリースで最新です。`1.4.0` リリース前は、項目番号 3 と 4 が切り替えられ、現在の 4a 項目は現在の 4g 項目に続きました。

## 認証情報プロバイダーを指定する
<a name="explicit-credential-provider"></a>

デフォルトのプロバイダーチェーンを使用する代わりに、認証情報プロバイダーを指定できます。このアプローチにより、SDK が使用する認証情報を直接制御できます。

たとえば、引き受けた IAM ロールの認証情報を使用するには、クライアントの作成`StsAssumeRoleCredentialsProvider`時に を指定します。

```
val ddb = DynamoDbClient {
    region = "us-east-1"
    credentialsProvider = StsAssumeRoleCredentialsProvider()
}
```

複数のプロバイダーを任意の順序で組み合わせたカスタムチェーン (`CredentialsProviderChain`) を作成することもできます。

### スタンドアロンプロバイダーで認証情報をキャッシュする
<a name="credentials-caching"></a>

**重要**  
デフォルトのチェーンは認証情報を自動的にキャッシュします。スタンドアロンプロバイダーは認証情報をキャッシュしません。すべての API コールで認証情報を取得しないようにするには、プロバイダーを でラップします`CachedCredentialsProvider`。キャッシュされたプロバイダーは、現在の認証情報の有効期限が切れた場合にのみ新しい認証情報を取得します。

スタンドアロンプロバイダーで認証情報をキャッシュするには、 `CachedCredentialsProvider` クラスを使用します。

```
val ddb = DynamoDbClient {
     region = "us-east-1"
     credentialsProvider = CachedCredentialsProvider(StsAssumeRoleCredentialsProvider())
 }
```

 または、`cached()`拡張関数を使用してより簡潔なコードを作成します。

```
val ddb = DynamoDbClient {
      region = "us-east-1"
      credentialsProvider = StsAssumeRoleCredentialsProvider().cached()
 }
```