のデフォルトの認証情報プロバイダーチェーン AWS SDK for Java 2.x - AWS SDK for Java 2.x

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

のデフォルトの認証情報プロバイダーチェーン AWS SDK for Java 2.x

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

デフォルトの認証情報プロバイダーチェーンは DefaultCredentialsProvider クラスによって実装されます。さまざまな場所で設定をチェックする他の認証情報プロバイダーの実装に順次委任されます。必要な設定要素をすべて見つけることができる最初の認証情報プロバイダーは、チェーンを終了します。

デフォルトの認証情報プロバイダーチェーンを使用して一時的な認証情報を指定するには、サービスクライアントビルダーを作成しますが、認証情報プロバイダーを指定しないでください。次のコードスニペットは、デフォルトの認証情報プロバイダーチェーンを使用して設定を検索および取得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();

認証情報の設定の取得順序

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

  1. Java のシステムプロパティ

    • SDK は、SystemPropertyCredentialsProvider クラスを使用して、aws.accessKeyIdaws.secretAccessKey および aws.sessionToken Java システムプロパティから一時的な認証情報をロードします。

      注記

      Java システムプロパティの設定方法の詳細については、Java Tutorials の公式ウェブサイトにあるシステムプロパティのチュートリアルを参照してください。

  2. 環境変数

    • SDK は、EnvironmentVariableCredentialsProvider クラスを使用して、AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY および AWS_SESSION_TOKEN システム環境変数から一時的な認証情報をロードします。

  3. ウェブ ID トークンと IAM ロール ARN

    • SDK は WebIdentityTokenFileCredentialsProvider クラスを使用して、ウェブ 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 認証情報を取得できるようにします。

  4. 共有 credentials および config ファイル

    • SDK は ProfileCredentialsProvider を使用して、IAM Identity Center のシングルサインオン設定または一時的な認証情報を共有 credentialsconfig ファイル内の [default] プロファイルから読み込みます。

      AWS SDKs およびツールリファレンスガイドには、SDK for Java が IAM Identity Center シングルサインオントークンと連携し、SDK が呼び出しに使用する一時的な認証情報を取得する方法に関する詳細情報が記載されています AWS のサービス。

      注記

      credentials および configファイルは、さまざまな AWS SDKsとツールによって共有されます。詳細については、「 AWS SDKs and Tools リファレンスガイド」の「.aws/credentials and .aws/config files」を参照してください。

    • 共有ファイルcredentialsconfig ファイル内のプロファイルにはさまざまな設定セットを含めることができるため、 は[default]プロファイルの設定を探すために他の一連のプロバイダーにProfileCredentialsProvider委任します。

      • 基本的な認証情報 (クラス StaticCredentialsProvider): プロファイルに aws_access_key_idと が含まれている場合aws_secret_access_key

      • セッション認証情報 (クラス StaticSessionCredentialsProvider): プロファイルに aws_access_key_idaws_secret_access_key、および が含まれている場合aws_session_token

      • プロセス認証情報 (クラス ProcessCredentialsProvider): プロファイルに が含まれている場合credential_process

      • SSO 認証情報 (クラス SsoCredentialsProvider): プロファイルに sso_role_name、 などの SSO 関連のプロパティが含まれている場合sso_account_id

      • ウェブ ID トークン認証情報 (クラス WebIdentityTokenCredentialsProvider): プロファイルに role_arnと が含まれている場合web_identity_token_file

      • ソースプロファイル (クラス StsAssumeRoleCredentialsProvider): プロファイルに role_arnと が含まれている場合source_profile

      • 認証情報ソース (クラス StsAssumeRoleWithSourceCredentialsProvider): プロファイルに role_arnと が含まれている場合credential_source

        • の場合credential_source = Environment: SystemPropertyCredentialsProviderと のチェーンを使用します。 EnvironmentVariableCredentialsProvider

        • の場合credential_source = Ec2InstanceMetadata: を使用する InstanceProfileCredentialsProvider

        • の場合credential_source = EcsContainer: を使用する ContainerCredentialsProvider

  5. Amazon ECS コンテナ認証情報

    • SDK は ContainerCredentialsProvider クラスを使用して、次の環境変数を使用して一時的な認証情報をロードします。

      1. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 、、または AWS_CONTAINER_CREDENTIALS_FULL_URI

      2. AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE 、、または AWS_CONTAINER_AUTHORIZATION_TOKEN

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

  6. Amazon EC2 インスタンス IAM ロール提供の認証情報

  7. 上記のすべてのステップで必要な構成設定が 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で を使用する

コードでデフォルトの認証情報プロバイダーチェーンを明示的に使用できます。これは、 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();

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