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

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

AWS SDK for Java 2.x のデフォルトの認証情報プロバイダーチェーンは、事前定義された一連の場所で AWS 認証情報を自動的に検索するため、認証情報ソースを明示的に指定せずに 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) などのランタイム環境では、ウェブ ID トークンが AWS SDK で自動的に利用可能になり、アプリケーションが一時的な AWS 認証情報を取得できます。

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

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

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

      注記

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

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

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

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

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

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

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

      • ソースプロファイルを使用したロールベースの認証情報 (クラス StsAssumeRoleCredentialsProvider): プロファイルに role_arnsource_profile が含まれている場合。

      • 認証情報ソースを使用したロールベースの認証情報 (クラス StsAssumeRoleWithSourceCredentialsProvider): プロファイルに role_arncredential_source が含まれている場合。

        • credential_source = Environment の場合: SystemPropertyCredentialsProviderEnvironmentVariableCredentialsProvider のチェーンを使用

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

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

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

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

      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();

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