Lectura de credenciales de roles de IAM en Amazon EC2 mediante el SDK para Java 2.x - AWS SDK for Java 2.x

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

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 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

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 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

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

De forma predeterminada, las instancias de EC2 ejecutan IMDS (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 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 detrue.

  • 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 entrue, el SDK no carga las credenciales del rol de IMDS IMDSv1 si se produce un error en la IMDSv2 llamada inicial.