

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Proveedores de credenciales
<a name="credential-providers"></a>

****  
**El orden en el que la cadena de proveedores de credenciales predeterminada resuelve las credenciales modificadas con la versión 1.4.0 Para obtener más información, consulte la nota siguiente.**

Cuando envíe solicitudes a Amazon Web Services mediante el AWS SDK para Kotlin, las solicitudes deben estar firmadas criptográficamente con las credenciales emitidas por AWS. El SDK de Kotlin firma la solicitud automáticamente. Para adquirir las credenciales, el SDK puede utilizar los ajustes de configuración que se encuentran en varios lugares, por ejemplo, las propiedades del sistema JVM, las variables de entorno, `credentials` los archivos AND compartidos AWS `config` y los metadatos de las instancias Amazon EC2.

El SDK utiliza la abstracción del *proveedor de credenciales* para simplificar el proceso de recuperación de credenciales de diversas fuentes. El SDK contiene [varias implementaciones de proveedores de credenciales](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/aws-config/aws.sdk.kotlin.runtime.auth.credentials/index.html).

Por ejemplo, si la configuración recuperada incluye la configuración de acceso de inicio de sesión único al Centro de identidades de IAM desde el `config` archivo compartido, el SDK trabaja con el Centro de identidades de IAM para recuperar las credenciales temporales que utiliza para realizar solicitudes. Servicios de AWS Con este enfoque de adquisición de credenciales, el SDK utiliza el proveedor del Centro de Identidad de IAM (también conocido como proveedor de credenciales de SSO). En la [sección de configuración](setup-basic-onetime-setup.md#setup-sso-access) de esta guía se describe esta configuración.

Para usar un proveedor de credenciales específico, puede especificar uno al crear un cliente de servicio. Como alternativa, puede utilizar la cadena de proveedores de credenciales predeterminada para buscar automáticamente los ajustes de configuración.

## La cadena de proveedores de credenciales predeterminada
<a name="default-credential-provider-chain"></a>

Si no se especifica de forma explícita en la construcción del cliente, el SDK para Kotlin utiliza un proveedor de credenciales que comprueba secuencialmente todos los lugares en los que puedes introducir las credenciales. Este proveedor de credenciales predeterminado se implementa como una cadena de proveedores de credenciales.

Para usar la cadena predeterminada para proporcionar credenciales a su aplicación, cree un cliente de servicio sin proporcionar una `credentialsProvider` propiedad de forma explícita.

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

Para obtener más información sobre la creación de clientes de servicio, [consulte crear y configurar un cliente](creating-clients.md).

### Más información sobre la cadena de proveedores de credenciales predeterminada
<a name="default-credentials-retrieval-order"></a>

La cadena de proveedores de credenciales predeterminada busca la configuración de las credenciales mediante la siguiente secuencia predefinida. Cuando los parámetros configurados proporcionan credenciales válidas, la cadena se detiene.

**1. [AWS claves de acceso (propiedades del sistema JVM)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)**  
El SDK busca las propiedades del sistema `aws.accessKeyId``aws.secretAccessKey`, y `aws.sessionToken` JVM.

**2. [AWS claves de acceso (variables de entorno)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)**  
El SDK intenta cargar credenciales de las variables de entorno `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` y `AWS_SESSION_TOKEN`.

**3. [token de identidad web](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role-web.html)**  
El SDK busca las variables `AWS_WEB_IDENTITY_TOKEN_FILE` de entorno `AWS_ROLE_ARN` (o las propiedades del sistema JVM `aws.webIdentityTokenFile` y`aws.roleArn`). En función de la información del token y de la función, el SDK adquiere credenciales temporales.

**4. [Un perfil en un archivo de configuración](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)**  
En este paso, el SDK usa la configuración asociada a un perfil. De forma predeterminada, el SDK usa los `credentials` archivos AWS `config` y compartidos, pero si se establece la variable de `AWS_CONFIG_FILE` entorno, el SDK usa ese valor. Si la variable de `AWS_PROFILE` entorno (o la propiedad del sistema `aws.profile` JVM) *no* está configurada, el SDK busca el perfil «predeterminado»; de lo contrario, busca el perfil que coincida con el `AWS_PROFILE’s` valor.   
El SDK busca el perfil en función de la configuración descrita en el párrafo anterior y utiliza los ajustes allí definidos. Si la configuración que encuentra el SDK contiene una combinación de configuraciones para diferentes enfoques de proveedores de credenciales, el SDK usa el siguiente orden:  

1. [AWS claves de acceso (archivo de configuración)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html): el SDK usa la configuración de `aws_access_key_id``aws_access_key_id`, y. `aws_session_token`

1. [Asumir la configuración del rol](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role.html): si el SDK encuentra `role_arn` una `credential_source` configuración `source_profile` o configuración, intenta asumir un rol. Si el SDK encuentra la `source_profile` configuración, obtiene las credenciales de otro perfil para recibir las credenciales temporales para el rol especificado por`role_arn`. Si el SDK encuentra la `credential_source` configuración, obtiene las credenciales de un contenedor de Amazon ECS, de una instancia de Amazon EC2 o de variables de entorno en función del valor de la `credential_source` configuración. A continuación, utiliza esas credenciales para adquirir credenciales temporales para el rol.

   Un perfil debe contener la `source_profile` configuración o la `credential_source` configuración, pero no ambas.

1. [Configuración del token de identidad web](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role-web.html): si el SDK encuentra `role_arn` una `web_identity_token_file` configuración, adquiere credenciales temporales para acceder a AWS los recursos en función del token `role_arn` y del token.

1. [Configuración del token](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html) de inicio de sesión único: si el SDK encuentra `sso_session` una `sso_role_name` configuración (junto con una `sso-session` sección complementaria en los archivos de configuración), el SDK recupera las credenciales temporales del servicio del Centro de identidad de IAM. `sso_account_id`

1. [Configuración de SSO antigua](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-legacy): si el SDK encuentra` sso_start_url`, y `sso_role_name` ajustes `sso_region``sso_account_id`, el SDK recupera las credenciales temporales del servicio del Centro de Identidad de IAM.

1. [Configuración de inicio de sesión](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-legacy): si el SDK encuentra una `login_session` configuración, utiliza las credenciales temporales de la sesión de inicio de sesión o intenta actualizarlas si caducan en menos de 5 minutos. Para obtener información sobre cómo iniciar una sesión de inicio de sesión, consulte la [guía del usuario de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html).

1. [Configuración del proceso](https://docs.aws.amazon.com/sdkref/latest/guide/feature-process-credentials.html): si el SDK encuentra una `credential_process` configuración, utiliza el valor de la ruta para invocar un proceso y adquirir credenciales temporales.

**5. [Credenciales de contenedor](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html)**  
El SDK busca variables de entorno `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` o `AWS_CONTAINER_CREDENTIALS_FULL_URI` `AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE` o`AWS_CONTAINER_AUTHORIZATION_TOKEN`. Utiliza estos valores para cargar las credenciales desde el punto final HTTP especificado mediante una solicitud GET. 

**6. [Credenciales de IMDS](https://docs.aws.amazon.com/sdkref/latest/guide/feature-imds-credentials.html)**  
El SDK intenta obtener las credenciales del [servicio de metadatos de la instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) en el punto final HTTP predeterminado o configurado. El SDK solo es compatible [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html).

Si las credenciales siguen sin resolverse en este momento, se produce un error en la creación del cliente, con una excepción.

**Nota: Cambio en el orden de resolución de las credenciales**  
La resolución sobre el orden de las credenciales descrita anteriormente es la vigente para la `1.4.x+` versión del SDK para Kotlin. Antes del `1.4.0` lanzamiento, los elementos número 3 y 4 se cambiaban y el elemento 4a actual siguió al elemento 4g actual.

## Especifique un proveedor de credenciales
<a name="explicit-credential-provider"></a>

Puede especificar un proveedor de credenciales en lugar de utilizar la cadena de proveedores predeterminada. Este enfoque te proporciona un control directo sobre las credenciales que utiliza el SDK.

Por ejemplo, para usar las credenciales de una función de IAM asumida, especifique una `StsAssumeRoleCredentialsProvider` al crear el cliente:

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

También puede crear una cadena personalizada (`CredentialsProviderChain`) que combine varios proveedores en el orden que prefiera.

### Guarde las credenciales en caché con un proveedor independiente
<a name="credentials-caching"></a>

**importante**  
La cadena predeterminada almacena en caché las credenciales automáticamente. Los proveedores independientes no almacenan en caché las credenciales. Para evitar tener que buscar credenciales en cada llamada a la API, incluye a tu proveedor con un. `CachedCredentialsProvider` El proveedor almacenado en caché obtiene las nuevas credenciales solo cuando caducan las actuales.

Para almacenar en caché las credenciales con un proveedor independiente, usa la clase: `CachedCredentialsProvider`

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

 Como alternativa, utilice la función de `cached()` extensión para obtener un código más conciso:

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