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.
Lea las credenciales de los roles de IAM en Amazon EC2 mediante el SDK for Java 2.x
Puede usar una función de IAM para administrar las credenciales temporales de las aplicaciones que se ejecutan en una EC2 instancia y que realizan AWS CLI solicitudes a la AWS API. Esto es preferible a almacenar las claves de acceso en la EC2 instancia. Para asignar un AWS rol a una EC2 instancia 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 que los programas que se ejecutan en la EC2 instancia obtengan credenciales temporales. Para obtener más información, consulte Usar un rol de IAM para conceder permisos a las aplicaciones que se ejecutan en EC2 instancias de Amazon 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 EC2 instancia 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 tu aplicación crea un cliente de AWS servicio mediante el create método (o builder().build() los métodos), el SDK para Java usa 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 predeterminada de proveedores de credenciales en 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 usa un InstanceProfileCredentialsProvider para leer el rol de IAM definido en el perfil de la EC2 instancia. 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 predeterminada, que InstanceProfileCredentialsProvider en última instancia utiliza una activación EC2, puedes configurar un cliente de servicio de forma explícita con unaInstanceProfileCredentialsProvider. 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, EC2 las instancias ejecutan el IMDS (Instance Metadata Service), que permite InstanceProfileCredentialsProvider a los SDK acceder a información como la función de IAM que se ha configurado. EC2 las instancias ejecutan dos versiones de IMDS de forma predeterminada:
-
Instance Metadata Service, versión 1 (IMDSv1): un método request/response
-
Instance Metadata Service, versión 2 (IMDSv2): un método orientado a la sesión
IMDSv2 es un enfoque más seguro
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.