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 のデフォルトの認証情報プロバイダーチェーンは、事前定義されたシーケンスを使用して、環境内の設定を検索します。
-
Java のシステムプロパティ
-
SDK は、SystemPropertyCredentialsProvider
クラスを使用して、 aws.accessKeyId、aws.secretAccessKeyおよびaws.sessionTokenJava システムプロパティから一時的な認証情報をロードします。注記
Java システムプロパティの設定方法の詳細については、Java Tutorials の公式ウェブサイトにあるシステムプロパティ
のチュートリアルを参照してください。
-
-
環境変数
-
SDK は、EnvironmentVariableCredentialsProvider
クラスを使用して、 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYおよびAWS_SESSION_TOKENシステム環境変数から一時的な認証情報をロードします。
-
-
ウェブ ID トークンと IAM ロールの ARN
-
SDK は WebIdentityTokenFileCredentialsProvider
クラスを使用して、ウェブ ID トークンを使用してロールを引き受けることで認証情報をロードします。 -
認証情報プロバイダーは、次の環境変数または JVM システムプロパティを検索します。
-
AWS_WEB_IDENTITY_TOKEN_FILE oraws.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 認証情報を取得できます。
-
-
共有
credentialsおよびconfigファイル-
SDK は ProfileCredentialsProvider
を使用して、IAM Identity Center のシングルサインオン設定または一時的な認証情報を共有 credentialsとconfigファイル内の[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_idとaws_secret_access_keyが含まれている場合。 -
セッション認証情報 (クラス
StaticSessionCredentialsProvider): プロファイルにaws_access_key_id、aws_secret_access_key、aws_session_tokenが含まれている場合。 -
プロセス認証情報 (クラス
ProcessCredentialsProvider): プロファイルにcredential_processが含まれている場合。 -
SSO 認証情報 (クラス
SsoCredentialsProvider): プロファイルにsso_role_name、sso_account_idなどの SSO 関連のプロパティが含まれている場合。 -
ウェブ 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を使用
-
-
-
-
Amazon ECS コンテナ認証情報
-
SDK は、ContainerCredentialsProvider
クラスを使用して、 以下の環境変数を使用しtえ一時的な認証情報をロードします。 -
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI-または-AWS_CONTAINER_CREDENTIALS_FULL_URI -
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE-または-AWS_CONTAINER_AUTHORIZATION_TOKEN
-
ECS コンテナエージェントは、ECS 認証情報エンドポイントを指す
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI環境変数を自動的に設定します。その他の環境変数は通常、標準の ECS 認証情報エンドポイントが使用されない特定のシナリオで設定されます。 -
-
Amazon EC2 インスタンス IAM ロールが提供する認証情報
-
SDK は、InstanceProfileCredentialsProvider
クラスを使用して、Amazon EC2 メタデータサービスから一時的な認証情報をロードします。
-
-
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();
このアプローチにより、デフォルトの認証情報チェーンの利便性を維持しながら、より細かく制御できます。