Chaîne de fournisseurs d'informations d'identification par défaut dans AWS SDK for Java 2.x - AWS SDK for Java 2.x

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Chaîne de fournisseurs d'informations d'identification par défaut dans AWS SDK for Java 2.x

La chaîne de fournisseurs d'informations d'identification par défaut recherche AWS SDK for Java 2.x automatiquement les AWS informations d'identification dans une séquence d'emplacements prédéfinie, ce qui permet aux applications de s'authentifier Services AWS sans spécifier explicitement les sources d'informations d'identification.

La chaîne de fournisseurs d'informations d'identification par défaut est implémentée par la DefaultCredentialsProviderclasse. Il délègue de manière séquentielle à d'autres fournisseurs d'informations d'identification les implémentations qui vérifient la configuration à différents endroits. Le premier fournisseur d'informations d'identification capable de trouver tous les éléments de configuration nécessaires met fin à la chaîne.

Pour utiliser la chaîne de fournisseurs d'informations d'identification par défaut pour fournir des informations d'identification temporaires, créez un générateur de clients de services, mais ne spécifiez pas de fournisseur d'informations d'identification. L'extrait de code suivant crée un fichier DynamoDbClient qui utilise la chaîne de fournisseurs d'informations d'identification par défaut pour localiser et récupérer les paramètres de configuration.

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

Ordre de récupération des paramètres d'identification

La chaîne de fournisseurs d'informations d'identification par défaut du SDK for Java 2.x recherche la configuration dans votre environnement à l'aide d'une séquence prédéfinie.

  1. Propriétés du système Java

    • Le SDK utilise la SystemPropertyCredentialsProviderclasse pour charger des informations d'identification temporaires à partir des propriétés système aws.accessKeyIdaws.secretAccessKey,, et aws.sessionToken Java.

      Note

      Pour plus d'informations sur la façon de définir les propriétés du système Java, consultez le didacticiel sur les propriétés du système sur le site Web officiel des didacticiels Java.

  2. Variables d’environnement

    • Le SDK utilise la EnvironmentVariableCredentialsProviderclasse pour charger des informations d'identification temporaires à partir des variables d'AWS_SESSION_TOKENenvironnement AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY,, et.

  3. Jeton d'identité Web et ARN du rôle IAM

    • Le SDK utilise la WebIdentityTokenFileCredentialsProviderclasse pour charger les informations d'identification en assumant un rôle à l'aide d'un jeton d'identité Web.

    • Le fournisseur d'informations d'identification recherche les variables d'environnement ou les propriétés du système JVM suivantes :

      • AWS_WEB_IDENTITY_TOKEN_FILE or aws.webIdentityTokenFile

      • AWS_ROLE_ARN ou aws.roleArn

      • AWS_ROLE_SESSION_NAMEou aws.roleSessionName (facultatif)

    • Une fois que le SDK a acquis les valeurs, il appelle le AWS Security Token Service (STS) et utilise les informations d'identification temporaires qu'il renvoie pour signer les demandes.

    • Les environnements d'exécution tels qu'Amazon Elastic Kubernetes Service (EKS) mettent automatiquement à disposition des jetons d'identité Web, ce qui permet aux applications d'obtenir des informations AWS SDKs d'identification temporaires. AWS

  4. Le partage credentials et les config fichiers

    • Le SDK utilise le ProfileCredentialsProviderpour charger les paramètres d'authentification unique ou les informations d'identification temporaires d'IAM Identity Center à partir du [default] profil dans les fichiers partagés credentials et. config

      Le guide de référence AWS SDKs and Tools contient des informations détaillées sur la façon dont le SDK for Java fonctionne avec le jeton d'authentification unique IAM Identity Center pour obtenir des informations d'identification temporaires que le SDK utilise pour appeler. Services AWS

      Note

      Les config fichiers credentials et sont partagés par divers AWS SDKs outils. Pour plus d'informations, consultez le. aws/credentials and .aws/configfichiers du guide de référence AWS SDKs et des outils.

    • Comme un profil dans credentials les config fichiers partagés peut contenir de nombreux ensembles de paramètres différents, les ProfileCredentialsProvider délégués se chargent de rechercher les paramètres sous le [default] profil à une série d'autres fournisseurs :

      • Informations d'identification de base (classeStaticCredentialsProvider) : lorsque le profil contient aws_access_key_id etaws_secret_access_key.

      • Informations d'identification de session (classeStaticSessionCredentialsProvider) : lorsque le profil contient aws_access_key_idaws_secret_access_key, etaws_session_token.

      • Informations d'identification du processus (classeProcessCredentialsProvider) : lorsque le profil contientcredential_process.

      • Informations d'identification SSO (classeSsoCredentialsProvider) : lorsque le profil contient des propriétés liées à l'authentification unique telles que,. sso_role_name sso_account_id

      • Informations d'identification du jeton d'identité Web (classeWebIdentityTokenCredentialsProvider) : lorsque le profil contient role_arn etweb_identity_token_file.

      • Informations d'identification basées sur les rôles avec profil source (classeStsAssumeRoleCredentialsProvider) : lorsque le profil contient role_arn et. source_profile

      • Informations d'identification basées sur les rôles avec source d'informations d'identification (classeStsAssumeRoleWithSourceCredentialsProvider) : lorsque le profil contient et. role_arn credential_source

        • Quand credential_source = Environment : il utilise une chaîne de SystemPropertyCredentialsProvider et EnvironmentVariableCredentialsProvider

        • Quand credential_source = Ec2InstanceMetadata : il utilise InstanceProfileCredentialsProvider

        • Quand credential_source = EcsContainer : il utilise ContainerCredentialsProvider

  5. Amazon ECS informations d'identification du conteneur

    • Le SDK utilise la ContainerCredentialsProviderclasse pour charger des informations d'identification temporaires à l'aide des variables d'environnement suivantes :

      1. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ou AWS_CONTAINER_CREDENTIALS_FULL_URI

      2. AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE ou AWS_CONTAINER_AUTHORIZATION_TOKEN

    L'agent de conteneur ECS définit automatiquement la variable d'AWS_CONTAINER_CREDENTIALS_RELATIVE_URIenvironnement, qui pointe vers le point de terminaison des informations d'identification ECS. Les autres variables d'environnement sont généralement définies dans des scénarios spécifiques dans lesquels le point de terminaison d'identification ECS standard n'est pas utilisé.

  6. Amazon EC2 informations d'identification fournies par le rôle IAM de l'instance

  7. Si le SDK ne trouve pas les paramètres de configuration nécessaires au cours de toutes les étapes répertoriées ci-dessus, il génère une exception avec un résultat similaire à ce qui suit :

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

Utilisez le code DefaultCredentialsProvider d'entrée

Vous pouvez utiliser explicitement la chaîne de fournisseurs d'informations d'identification par défaut dans votre code. Sur le plan fonctionnel, cela revient à ne pas spécifier du tout de fournisseur d'informations d'identification, puisque le SDK l'utilise DefaultCredentialsProvider par défaut. Cependant, son utilisation explicite peut rendre votre code plus lisible et plus autodocumenté. Cela montre clairement votre intention d'utiliser la chaîne d'informations d'identification par défaut.

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

Lorsque vous créez le fournisseur d'informations d'identification par défaut, vous pouvez fournir une configuration supplémentaire :

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

Cette approche vous donne plus de contrôle tout en vous offrant la commodité de la chaîne d'informations d'identification par défaut.