

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.

# Cadena de proveedores de credenciales predeterminada en el AWS SDK for Java 2.x
<a name="credentials-chain"></a>

La cadena de proveedores de credenciales predeterminada busca AWS SDK for Java 2.x automáticamente las AWS credenciales en una secuencia predefinida de ubicaciones, lo que permite a las aplicaciones autenticarse Servicios de AWS sin especificar explícitamente las fuentes de credenciales.

La clase implementa la cadena de proveedores de credenciales predeterminada. [DefaultCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/DefaultCredentialsProvider.html) Delega secuencialmente en otros proveedores de credenciales las implementaciones que comprueban la configuración en varias ubicaciones. El primer proveedor de credenciales que puede encontrar todos los elementos de configuración necesarios hace que la cadena finalice.

Para usar la cadena de proveedores de credenciales predeterminados para proporcionar las credenciales temporales, cree un compilador de clientes de servicio, pero no especifique un proveedor de credenciales. El siguiente fragmento de código crea una `DynamoDbClient` que utiliza la cadena de proveedores de credenciales predeterminados para localizar y recuperar los valores de configuración.

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

## Orden de recuperación de la configuración de credenciales
<a name="credentials-default"></a>

La cadena predeterminada de proveedores de credenciales del SDK para Java 2.x busca la configuración en su entorno mediante una secuencia predefinida.

1. Propiedades del sistema Java
   + El SDK usa la [SystemPropertyCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/SystemPropertyCredentialsProvider.html)clase para cargar credenciales temporales desde las propiedades del sistema `aws.accessKeyId``aws.secretAccessKey`, y `aws.sessionToken` Java.
**nota**  
Para obtener información sobre cómo configurar las propiedades del sistema Java, consulte el tutorial *Propiedades del sistema* en el sitio web oficial de [tutoriales de Java](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html).

1. Variables de entorno
   + El SDK usa la [EnvironmentVariableCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/EnvironmentVariableCredentialsProvider.html)clase para cargar credenciales temporales de las variables de `AWS_SESSION_TOKEN` entorno `AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`, y.

1. Token de identidad web y ARN del rol de IAM
   + El SDK usa la [WebIdentityTokenFileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/WebIdentityTokenFileCredentialsProvider.html)clase para cargar las credenciales asumiendo un rol mediante un token de identidad web.
   + El proveedor de credenciales busca las siguientes variables de entorno o propiedades del sistema JVM:
     + `AWS_WEB_IDENTITY_TOKEN_FILE or aws.webIdentityTokenFile`
     + `AWS_ROLE_ARN` o `aws.roleArn`
     + `AWS_ROLE_SESSION_NAME` o `aws.roleSessionName` (opcional)
   + Una vez que el SDK adquiere los valores, llama al AWS Security Token Service (STS) y utiliza las credenciales temporales que devuelve para firmar las solicitudes.
   + Los entornos de ejecución, como Amazon Elastic Kubernetes Service (EKS), ponen automáticamente a disposición los tokens de identidad web, lo que permite AWS SDKs a las aplicaciones obtener credenciales temporales. AWS 

1. Los archivos compartidos `credentials` y `config`
   + El SDK los utiliza [ProfileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/ProfileCredentialsProvider.html)para cargar la configuración de inicio de sesión único o las credenciales temporales del `[default]` perfil de IAM Identity Center en los archivos AND compartidos. `credentials` `config` 

     La guía de referencia de AWS SDKs and Tools contiene [información detallada](https://docs.aws.amazon.com/sdkref/latest/guide/understanding-sso.html#idccredres) sobre cómo funciona el SDK para Java con el token de inicio de sesión único del IAM Identity Center para obtener las credenciales temporales que el SDK utiliza para llamar. Servicios de AWS
**nota**  
Los `config` archivos `credentials` y los comparten varias AWS SDKs herramientas. Para obtener más información, consulte [The. aws/credentials and .aws/config](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)archivos en la Guía de referencia de AWS SDKs and Tools.
   + Dado que un perfil de los archivos compartidos `credentials` y `config` puede contener muchos conjuntos distintos de ajustes, el `ProfileCredentialsProvider` delega en otros proveedores la tarea de buscar los ajustes en el perfil de `[default]`:
     + **Credenciales de token de identidad web** (clase `WebIdentityTokenCredentialsProvider`): cuando el perfil contiene `role_arn` y `web_identity_token_file`.
     + **Credenciales de SSO** (clase`SsoCredentialsProvider`): cuando el perfil contiene propiedades relacionadas con SSO, como `sso_role_name`, `sso_account_id`.
     + **Credenciales basadas en roles con perfil de origen** (clase `StsAssumeRoleCredentialsProvider`): cuando el perfil contiene `role_arn` y `source_profile`.
     + **Credenciales basadas en roles con origen de credenciales** (clase `StsAssumeRoleWithSourceCredentialsProvider`): cuando el perfil contiene `role_arn` y `credential_source`. 
       + Cuando `credential_source = Environment`: utiliza una cadena de `SystemPropertyCredentialsProvider` y `EnvironmentVariableCredentialsProvider`
       + Cuando `credential_source = Ec2InstanceMetadata`: utiliza `InstanceProfileCredentialsProvider`
       + Cuando `credential_source = EcsContainer`: utiliza `ContainerCredentialsProvider`
     + **Credenciales de inicio de sesión en la consola** (clase`LoginCredentialsProvider`): cuando el perfil contiene `login_session` 
     + **Credenciales de proceso** (clase `ProcessCredentialsProvider`): cuando el perfil contiene `credential_process`.
     + **Credenciales de sesión** (clase `StaticSessionCredentialsProvider`): cuando el perfil contiene `aws_access_key_id`, `aws_secret_access_key` y `aws_session_token`.
     + **Credenciales básicas** (clase `StaticCredentialsProvider`): cuando el perfil contiene `aws_access_key_id` y `aws_secret_access_key`.

1.  Amazon ECS credenciales del contenedor
   + El SDK usa la [ContainerCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/ContainerCredentialsProvider.html)clase para cargar credenciales temporales mediante las siguientes variables de entorno:

     1. `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` o `AWS_CONTAINER_CREDENTIALS_FULL_URI`

     1. `AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE` o `AWS_CONTAINER_AUTHORIZATION_TOKEN`

   El agente contenedor de ECS establece automáticamente la variable de entorno `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`, que apunta al punto de conexión de credenciales de ECS. Las demás variables de entorno suelen configurarse en escenarios específicos en los que no se utiliza el punto de conexión de credenciales de ECS estándar.

1.  Amazon EC2 credenciales proporcionadas por el rol de IAM de instancia
   + El SDK usa la [InstanceProfileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/InstanceProfileCredentialsProvider.html)clase para cargar credenciales temporales desde el Amazon EC2 servicio de metadatos.

1. Si el SDK no encuentra los ajustes de configuración necesarios siguiendo todos los pasos enumerados anteriormente, lanza una excepción con una salida similar a la siguiente:

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

## Uso del `DefaultCredentialsProvider` in código
<a name="default-credentials-provider-in-code"></a>

Puede utilizar explícitamente la cadena de proveedores de credenciales predeterminados en el código. Esto equivale funcionalmente a no especificar ningún proveedor de credenciales, ya que el SDK usa `DefaultCredentialsProvider` de forma predeterminada. Sin embargo, su uso explícito puede hacer que el código sea más legible y autodocumentado. Muestra claramente su intención de utilizar la cadena de credenciales predeterminadas.

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

Al crear el proveedor de credenciales predeterminado, puede proporcionar más configuraciones:

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

Este método le brinda más control y, al mismo tiempo, le brinda la comodidad de la cadena de credenciales predeterminadas.