

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.

# Fournisseurs d'informations d'identification
<a name="credential-providers"></a>

****  
**L'ordre dans lequel la chaîne de fournisseurs d'informations d'identification par défaut résout les informations d'identification a changé avec la version 1.4.0. Pour plus de détails, consultez la note ci-dessous.**

Lorsque vous envoyez des demandes à Amazon Web Services à l'aide du AWS SDK pour Kotlin, les demandes doivent être signées de manière cryptographique à l'aide des informations d'identification émises par AWS. Le SDK Kotlin signe automatiquement la demande pour vous. Pour obtenir les informations d'identification, le SDK peut utiliser des paramètres de configuration situés à plusieurs endroits, par exemple les propriétés du système JVM, les variables d'environnement, les `credentials` fichiers partagés AWS `config` et les métadonnées des instances Amazon EC2.

Le SDK utilise l'abstraction du *fournisseur d'informations d'identification* pour simplifier le processus de récupération des informations d'identification à partir de diverses sources. Le SDK contient [plusieurs implémentations de fournisseurs d'informations d'identification](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/aws-config/aws.sdk.kotlin.runtime.auth.credentials/index.html).

Par exemple, si la configuration récupérée inclut les paramètres d'accès à authentification unique IAM Identity Center à partir du `config` fichier partagé, le SDK travaille avec le IAM Identity Center pour récupérer les informations d'identification temporaires qu'il utilise pour effectuer une demande. Services AWS Dans le cadre de cette approche d'acquisition d'informations d'identification, le SDK utilise le fournisseur IAM Identity Center (également connu sous le nom de fournisseur d'informations d'identification SSO). La [section de configuration](setup-basic-onetime-setup.md#setup-sso-access) de ce guide décrit cette configuration.

Pour utiliser un fournisseur d'informations d'identification spécifique, vous pouvez en spécifier un lorsque vous créez un client de service. Vous pouvez également utiliser la chaîne de fournisseurs d'informations d'identification par défaut pour rechercher automatiquement les paramètres de configuration.

## La chaîne de fournisseurs d'informations d'identification par défaut
<a name="default-credential-provider-chain"></a>

Lorsqu'il n'est pas explicitement spécifié lors de la construction du client, le SDK pour Kotlin utilise un fournisseur d'informations d'identification qui vérifie séquentiellement chaque endroit où vous pouvez fournir des informations d'identification. Ce fournisseur d'informations d'identification par défaut est implémenté sous la forme d'une chaîne de fournisseurs d'informations d'identification.

Pour utiliser la chaîne par défaut pour fournir des informations d'identification dans votre application, créez un client de service sans fournir explicitement de `credentialsProvider` propriété.

```
val ddb = DynamoDbClient {
    region = "us-east-2"
}
```

Pour plus d'informations sur la création d'un client de service, consultez [la section Création et configuration d'un client](creating-clients.md).

### En savoir plus sur la chaîne de fournisseurs d'informations d'identification par défaut
<a name="default-credentials-retrieval-order"></a>

La chaîne de fournisseurs d'informations d'identification par défaut recherche la configuration des informations d'identification à l'aide de la séquence prédéfinie suivante. Lorsque les paramètres configurés fournissent des informations d'identification valides, la chaîne s'arrête.

**1. [AWS clés d'accès (propriétés du système JVM)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)**  
Le SDK recherche les propriétés `aws.accessKeyId``aws.secretAccessKey`, et du système `aws.sessionToken` JVM.

**2. [AWS clés d'accès (variables d'environnement)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)**  
Le SDK tente de charger les informations d'identification à partir `AWS_ACCESS_KEY_ID` des variables `AWS_SECRET_ACCESS_KEY` d'`AWS_SESSION_TOKEN`environnement et.

**3. [Jeton d'identité Web](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role-web.html)**  
Le SDK recherche les variables `AWS_WEB_IDENTITY_TOKEN_FILE` d'environnement et/ou `AWS_ROLE_ARN` (ou les propriétés du système JVM `aws.webIdentityTokenFile` et`aws.roleArn`). Sur la base des informations du jeton et du rôle, le SDK acquiert des informations d'identification temporaires.

**4. [Un profil dans un fichier de configuration](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)**  
Dans cette étape, le SDK utilise les paramètres associés à un profil. Par défaut, le SDK utilise le partage AWS `config` et `credentials` les fichiers, mais si la variable d'`AWS_CONFIG_FILE`environnement est définie, le SDK utilise cette valeur. Si la variable d'`AWS_PROFILE`environnement (ou la propriété du système `aws.profile` JVM) *n'est pas* définie, le SDK recherche le profil « par défaut », sinon il recherche le profil correspondant `AWS_PROFILE’s` à la valeur.   
Le SDK recherche le profil en fonction de la configuration décrite dans le paragraphe précédent et utilise les paramètres qui y sont définis. Si les paramètres trouvés par le SDK contiennent une combinaison de paramètres correspondant à différentes approches de fourniture d'informations d'identification, le SDK utilise l'ordre suivant :  

1. [AWS clés d'accès (fichier de configuration)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html) - Le SDK utilise les paramètres pour `aws_access_key_id``aws_access_key_id`, et`aws_session_token`.

1. [Assumer la configuration des rôles](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role.html) : si le SDK trouve `role_arn` `source_profile` et/ou des `credential_source` paramètres, il tente d'assumer un rôle. Si le SDK trouve le `source_profile` paramètre, il utilise les informations d'identification d'un autre profil pour recevoir des informations d'identification temporaires pour le rôle spécifié par`role_arn`. Si le SDK trouve le `credential_source` paramètre, il extrait les informations d'identification d'un conteneur Amazon ECS, d'une instance Amazon EC2 ou de variables d'environnement en fonction de la valeur du `credential_source` paramètre. Il utilise ensuite ces informations d'identification pour acquérir des informations d'identification temporaires pour le rôle.

   Un profil doit contenir le `source_profile` paramètre ou le `credential_source` paramètre, mais pas les deux.

1. [Configuration du jeton d'identité Web](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role-web.html) : si le SDK trouve `role_arn` et définit `web_identity_token_file` les paramètres, il acquiert des informations d'identification temporaires pour accéder aux AWS ressources en fonction du jeton `role_arn` et du jeton.

1. [Configuration du jeton SSO](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html) : si le SDK trouve `sso_session` des `sso_role_name` paramètres (ainsi qu'une `sso-session` section associée dans les fichiers de configuration), le SDK récupère les informations d'identification temporaires auprès du service IAM Identity Center. `sso_account_id`

1. [Configuration SSO traditionnelle](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-legacy) : si le SDK trouve` sso_start_url`,, et définit les `sso_role_name` paramètres `sso_region``sso_account_id`, il récupère les informations d'identification temporaires auprès du service IAM Identity Center.

1. [Configuration de connexion](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-legacy) : si le SDK trouve un `login_session` paramètre, il utilise les informations d'identification temporaires issues de la session de connexion ou tente de les actualiser si elles expirent dans moins de 5 minutes. Pour savoir comment démarrer une session de connexion, consultez le [guide de l'utilisateur de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html).

1. [Configuration du processus](https://docs.aws.amazon.com/sdkref/latest/guide/feature-process-credentials.html) : si le SDK trouve un `credential_process` paramètre, il utilise la valeur du chemin pour appeler un processus et obtenir des informations d'identification temporaires.

**5. [Informations d'identification du conteneur](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html)**  
Le SDK recherche les variables d'environnement `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` ou ou`AWS_CONTAINER_CREDENTIALS_FULL_URI`. `AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE` `AWS_CONTAINER_AUTHORIZATION_TOKEN` Il utilise ces valeurs pour charger les informations d'identification depuis le point de terminaison HTTP spécifié via une requête GET. 

**6. [Informations d'identification IMDS](https://docs.aws.amazon.com/sdkref/latest/guide/feature-imds-credentials.html)**  
Le SDK tente de récupérer les informations d'identification auprès du [service de métadonnées d'instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) sur le point de terminaison HTTP par défaut ou configuré. Le SDK prend uniquement en charge [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html).

Si les informations d'identification ne sont toujours pas résolues à ce stade, la création du client échoue avec une exception.

**Remarque : Modification de l'ordre de résolution des informations d'identification**  
L'ordre de résolution des informations d'identification décrit ci-dessus est en vigueur pour la `1.4.x+` sortie du SDK pour Kotlin. Avant la `1.4.0` sortie, les articles numéros 3 et 4 ont été échangés et l'article 4a actuel a suivi l'article 4g actuel.

## Spécifier un fournisseur d'informations d'identification
<a name="explicit-credential-provider"></a>

Vous pouvez spécifier un fournisseur d'informations d'identification au lieu d'utiliser la chaîne de fournisseurs par défaut. Cette approche vous permet de contrôler directement les informations d'identification utilisées par le SDK.

Par exemple, pour utiliser les informations d'identification d'un rôle IAM supposé, spécifiez un `StsAssumeRoleCredentialsProvider` lorsque vous créez le client :

```
val ddb = DynamoDbClient {
    region = "us-east-1"
    credentialsProvider = StsAssumeRoleCredentialsProvider()
}
```

Vous pouvez également créer une chaîne personnalisée (`CredentialsProviderChain`) qui combine plusieurs fournisseurs dans votre commande préférée.

### Mettre en cache les informations d'identification auprès d'un fournisseur autonome
<a name="credentials-caching"></a>

**Important**  
La chaîne par défaut met automatiquement en cache les informations d'identification. Les fournisseurs autonomes ne mettent pas en cache les informations d'identification. Pour éviter de récupérer les informations d'identification à chaque appel d'API, associez à votre fournisseur un`CachedCredentialsProvider`. Le fournisseur mis en cache récupère les nouvelles informations d'identification uniquement lorsque les informations actuelles expirent.

Pour mettre en cache les informations d'identification auprès d'un fournisseur autonome, utilisez la `CachedCredentialsProvider` classe :

```
val ddb = DynamoDbClient {
     region = "us-east-1"
     credentialsProvider = CachedCredentialsProvider(StsAssumeRoleCredentialsProvider())
 }
```

 Vous pouvez également utiliser la fonction d'`cached()`extension pour un code plus concis :

```
val ddb = DynamoDbClient {
      region = "us-east-1"
      credentialsProvider = StsAssumeRoleCredentialsProvider().cached()
 }
```