

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.

# Lectura de credenciales de roles de IAM en Amazon EC2 mediante el SDK para Java 2.x
<a name="ec2-iam-roles"></a>

 Puede utilizar una función de IAM para administrar las credenciales temporales de las aplicaciones que se ejecutan en una instancia EC2 y que realizan solicitudes a la API AWS CLI . AWS Es preferible hacerlo de este modo a almacenar claves de acceso en la instancia de EC2. Para asignar un AWS rol a una instancia EC2 y ponerlo a disposición de todas sus aplicaciones, debe crear un perfil de instancia adjunto a la instancia. Un perfil de instancia contiene el rol y permite a los programas que se ejecutan en la instancia de EC2 obtener credenciales temporales. Para obtener más información, consulte [Uso de un rol de IAM para conceder permisos a aplicaciones que se ejecutan en instancias Amazon EC2](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html) en la *Guía del usuario de IAM*. 

En este tema se proporciona información sobre cómo configurar la aplicación Java para que se ejecute en una instancia EC2 y permitir que adquiera las AWS SDK for Java 2.x credenciales del IAM rol.

## Adquisición de credenciales de roles de IAM desde el entorno
<a name="default-provider-chain"></a>

Si la aplicación crea un cliente de AWS servicio mediante el `create` método (o `builder().build()` los métodos), el SDK para Java utiliza la *cadena de proveedores de credenciales predeterminada*. La cadena de proveedores de credenciales predeterminados busca en el entorno de ejecución elementos de configuración que el SDK pueda intercambiar por credenciales temporales. En la sección [Cadena de proveedores de credenciales predeterminada en el AWS SDK for Java 2.x](credentials-chain.md) se describe el proceso de búsqueda completo.

El último paso de la cadena de proveedores predeterminada solo está disponible cuando la aplicación se ejecuta en una Amazon EC2 instancia. En este paso, el SDK utiliza un `InstanceProfileCredentialsProvider` para leer el rol de IAM definido en el perfil de la instancia EC2. A continuación, el SDK adquiere las credenciales temporales para ese rol de IAM.

Aunque estas credenciales son temporales y acaban caducando, un `InstanceProfileCredentialsProvider` las actualiza periódicamente para que sigan permitiendo el acceso a AWS.

## Adquisición de credenciales de roles de IAM mediante programación
<a name="programmatic-configuration-for-IAM-role"></a>

Como alternativa a la cadena de proveedores de credenciales predeterminados que eventualmente utiliza un `InstanceProfileCredentialsProvider` en EC2, puede configurar un cliente de servicio de forma explícita con un `InstanceProfileCredentialsProvider`. Este método se muestra en el fragmento de código siguiente.

```
S3Client s3 = S3Client.builder()
       .credentialsProvider(InstanceProfileCredentialsProvider.create())
       .build();
```

## Adquisición segura de credenciales de roles de IAM
<a name="securely-read-IAM-role_credentials"></a>

De forma predeterminada, las instancias de EC2 ejecutan [IMDS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) (Instance Metadata Service), que permite al `InstanceProfileCredentialsProvider` de los SDK acceder a información como el rol de IAM que se ha configurado. Las instancias de EC2 ejecutan dos versiones del IMDS de forma predeterminada:
+ Instance Metadata Service, versión 1 (IMDSv1): un request/response método
+ Instance Metadata Service, versión 2 (IMDSv2): un método orientado a la sesión

[IMDSv2 es un enfoque más seguro](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/) que. IMDSv1

De forma predeterminada, el SDK de Java primero IMDSv2 intenta obtener el rol de IAM, pero si no lo consigue, lo intenta IMDSv1. Sin embargo, dado que IMDSv1 es menos seguro, se AWS recomienda usar IMDSv2 únicamente e inhabilitar el SDK para que no lo intente IMDSv1. 

Para utilizar un enfoque más seguro, deshabilite el uso del SDK IMDSv1 proporcionando una de las siguientes configuraciones con un valor de`true`.
+ Variable de entorno: `AWS_EC2_METADATA_V1_DISABLED`
+ Propiedad del sistema JVM: aws.`disableEc2MetadataV1`
+ Ajuste del archivo de configuración compartido: `ec2_metadata_v1_disabled`

Si se establece una de estas configuraciones en`true`, el SDK no carga las credenciales del rol de IMDS IMDSv1 si se produce un error en la IMDSv2 llamada inicial.