

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

# のデフォルトの認証情報プロバイダーチェーン AWS SDK for Java 2.x
<a name="credentials-chain"></a>

のデフォルトの認証情報プロバイダーチェーンは、事前定義された場所のシーケンスで AWS 認証情報 AWS SDK for Java 2.x を自動的に検索するため、アプリケーションは認証情報ソースを明示的に指定 AWS のサービス せずに で認証できます。

デフォルトの認証情報プロバイダーチェーンは [DefaultCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/DefaultCredentialsProvider.html) クラスによって実装されます。さまざまな場所で設定をチェックする他の認証情報プロバイダーの実装に順番に委任されます。必要な設定要素をすべて見つけることができる認証情報プロバイダーがあると、チェーンが終了します。

デフォルトの認証情報プロバイダチェーンを使用して一時的な認証情報を提供するには、サービスクライアントビルダーを作成しますが、認証情報プロバイダーは指定しません。次のコードスニペットでは、デフォルトの認証情報プロバイダーチェーンを使用して設定を検索して取得する `DynamoDbClient` を作成します。

```
// Any external Region configuration is overridden.
// The SDK uses the default credentials provider chain because no specific credentials provider is specified.
Region region = Region.US_WEST_2;
DynamoDbClient ddb = 
    DynamoDbClient.builder()
                  .region(region)
                  .build();
```

## 認証情報の設定の取得順序
<a name="credentials-default"></a>

SDK for Java 2.x のデフォルトの認証情報プロバイダーチェーンは、事前定義されたシーケンスを使用して、環境内の設定を検索します。

1. Java のシステムプロパティ
   + SDK は、[SystemPropertyCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/SystemPropertyCredentialsProvider.html) クラスを使用して、`aws.accessKeyId`、`aws.secretAccessKey` および `aws.sessionToken` Java システムプロパティから一時的な認証情報をロードします。
**注記**  
Java システムプロパティの設定方法の詳細については、*Java Tutorials* の公式ウェブサイトにある[システムプロパティ](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html)のチュートリアルを参照してください。

1. 環境変数
   + SDK は、[EnvironmentVariableCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/EnvironmentVariableCredentialsProvider.html) クラスを使用して、`AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` および `AWS_SESSION_TOKEN` システム環境変数から一時的な認証情報をロードします。

1. ウェブ ID トークンと IAM ロールの ARN
   + SDK は [WebIdentityTokenFileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/WebIdentityTokenFileCredentialsProvider.html) クラスを使用して、ウェブ ID トークンを使用してロールを引き受けることで認証情報をロードします。
   + 認証情報プロバイダーは、次の環境変数または JVM システムプロパティを検索します。
     + `AWS_WEB_IDENTITY_TOKEN_FILE or aws.webIdentityTokenFile`
     + `AWS_ROLE_ARN`、または `aws.roleArn`
     + `AWS_ROLE_SESSION_NAME` または `aws.roleSessionName` (オプション)
   + SDK が値を取得すると、 AWS Security Token Service (STS) を呼び出し、返される一時的な認証情報を使用してリクエストに署名します。
   + Amazon Elastic Kubernetes Service (EKS) などのランタイム環境は、 AWS SDKs でウェブ ID トークンを自動的に利用可能にし、アプリケーションが一時的な AWS 認証情報を取得できるようにします。

1. 共有 `credentials` および `config` ファイル
   + SDK は [ProfileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/ProfileCredentialsProvider.html) を使用して、IAM Identity Center のシングルサインオン設定または一時的な認証情報を共有 `credentials` と `config` ファイル内の `[default]` プロファイルから読み込みます。

      AWS SDKs およびツールリファレンスガイドには、SDK for Java が IAM Identity Center シングルサインオントークンと連携し、SDK が呼び出しに使用する一時的な認証情報を取得する方法に関する詳細[情報](https://docs.aws.amazon.com/sdkref/latest/guide/understanding-sso.html#idccredres)が記載されています AWS のサービス。
**注記**  
`credentials` および `config`ファイルは、さまざまな AWS SDKsとツールによって共有されます。詳細については、「 AWS SDKs and Tools リファレンスガイド」の「[.aws/credentials and .aws/config files](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)」を参照してください。
   + 共有 `credentials` および `config` ファイルのプロファイルにはさまざまな設定セットを含めることができるため、`ProfileCredentialsProvider` は `[default]` プロファイルの設定を探すために他の一連のプロバイダーに委任します。
     + **ウェブ ID トークン認証情報** (クラス `WebIdentityTokenCredentialsProvider`): プロファイルに `role_arn` と `web_identity_token_file` が含まれている場合。
     + **SSO 認証情報** (クラス `SsoCredentialsProvider`): プロファイルに `sso_role_name`、`sso_account_id` などの SSO 関連のプロパティが含まれている場合。
     + **ソースプロファイルを使用したロールベースの認証情報** (クラス `StsAssumeRoleCredentialsProvider`): プロファイルに `role_arn` と `source_profile` が含まれている場合。
     + **認証情報ソースを使用したロールベースの認証情報** (クラス `StsAssumeRoleWithSourceCredentialsProvider`): プロファイルに `role_arn` と `credential_source` が含まれている場合。
       + `credential_source = Environment` の場合: `SystemPropertyCredentialsProvider` と `EnvironmentVariableCredentialsProvider` のチェーンを使用
       + `credential_source = Ec2InstanceMetadata` の場合: `InstanceProfileCredentialsProvider` を使用
       + `credential_source = EcsContainer` の場合: `ContainerCredentialsProvider` を使用
     + **コンソールログイン認証情報** (クラス `LoginCredentialsProvider`): プロファイルに が含まれている場合 `login_session` 
     + **プロセス認証情報** (クラス `ProcessCredentialsProvider`): プロファイルに `credential_process` が含まれている場合。
     + **セッション認証情報** (クラス `StaticSessionCredentialsProvider`): プロファイルに `aws_access_key_id`、`aws_secret_access_key`、`aws_session_token` が含まれている場合。
     + **基本的な認証情報** (クラス `StaticCredentialsProvider`): プロファイルに `aws_access_key_id` と `aws_secret_access_key` が含まれている場合。

1.  Amazon ECS コンテナ認証情報
   + SDK は、[ContainerCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/ContainerCredentialsProvider.html) クラスを使用して、 以下の環境変数を使用しtえ一時的な認証情報をロードします。

     1. `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` 、、または `AWS_CONTAINER_CREDENTIALS_FULL_URI`

     1. `AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE` 、、または `AWS_CONTAINER_AUTHORIZATION_TOKEN`

   ECS コンテナエージェントは、ECS 認証情報エンドポイントを指す `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` 環境変数を自動的に設定します。その他の環境変数は通常、標準の ECS 認証情報エンドポイントが使用されない特定のシナリオで設定されます。

1.  Amazon EC2 インスタンス IAM ロール提供の認証情報
   + SDK は [InstanceProfileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/InstanceProfileCredentialsProvider.html) クラスを使用して、 Amazon EC2 メタデータサービスから一時的な認証情報をロードします。

1. SDK が上記のすべてのステップで必要な構成設定を見つけられない場合、次のような出力の例外がスローされます。

   ```
   software.amazon.awssdk.core.exception.SdkClientException: Unable to load credentials from any of the providers 
   in the chain AwsCredentialsProviderChain(credentialsProviders=[SystemPropertyCredentialsProvider(), 
   EnvironmentVariableCredentialsProvider(), WebIdentityTokenCredentialsProvider(), ProfileCredentialsProvider(), 
   ContainerCredentialsProvider(), InstanceProfileCredentialsProvider()])
   ```

## コードでの `DefaultCredentialsProvider` の使用
<a name="default-credentials-provider-in-code"></a>

コードでデフォルトの認証情報プロバイダーチェーンを明示的に使用できます。SDK はデフォルトで `DefaultCredentialsProvider` を使用するため、これは認証情報プロバイダーをまったく指定しないことと機能的には同じです。ただし、これを明示的に使用すると、コードの可読性が向上し、自己文書化にもつながります。デフォルトの認証情報チェーンを使用する意図を明確に示します。

```
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;

public class ExplicitDefaultCredentialsExample {
    public static void main(String[] args) {
        // Explicitly create the DefaultCredentialsProvider.
        DefaultCredentialsProvider defaultCredentialsProvider = DefaultCredentialsProvider
                                                                    .builder().build();

        // Use it with any service client.
        S3Client s3Client = S3Client.builder()
            .region(Region.US_WEST_2)
            .credentialsProvider(defaultCredentialsProvider)
            .build();

        // Now you can use the client with the default credentials chain.
        s3Client.listBuckets();
    }
}
```

デフォルトの認証情報プロバイダーを構築するときに、より多くの設定を指定できます。

```
DefaultCredentialsProvider customizedProvider = DefaultCredentialsProvider.builder()
    .profileName("custom-profile")  // Use a specific profile if the chain gets to the `ProfileCredentialsProvider` stage.
    .asyncCredentialUpdateEnabled(true)  // Enable async credential updates.
    .build();
```

このアプローチにより、デフォルトの認証情報チェーンの利便性を維持しながら、より細かく制御できます。