AWS SDK para Java 1.x ha entrado en modo de mantenimiento el 31 de julio de 2024 y llegará al final de soporte
Proporcionar credenciales temporales al AWS SDK para Java
Para hacer solicitudes a Amazon Web Services, debe proporcionar credenciales temporales AWS para que el AWS SDK para Java las utilice cuando llame a los servicios. Puede hacerlo de las siguientes maneras:
-
Utilice la cadena predeterminada de proveedores de credenciales (recomendado).
-
Utilice un proveedor de credenciales específico o una cadena de proveedores (o cree el suyo propio).
-
Proporcione usted mismo las credenciales temporales en código.
Uso de la cadena predeterminada de proveedores de credenciales
Cuando inicializa un nuevo cliente del servicio sin proporcionar argumentos, AWS SDK para Java intenta encontrar las credenciales temporales a través de la cadena predeterminada de proveedores de credenciales implementada por la clase DefaultAWSCredentialsProviderChain. La cadena predeterminada de proveedores de credenciales busca las credenciales en este orden:
-
Variables de entorno:
AWS_ACCESS_KEY_ID,AWS_SECRET_KEYoAWS_SECRET_ACCESS_KEYyAWS_SESSION_TOKEN. AWS SDK para Java usa la clase EnvironmentVariableCredentialsProvider para cargar estas credenciales. -
Propiedades del sistema Java:
aws.accessKeyId,aws.secretKey(pero noaws.secretAccessKey) yaws.sessionToken. AWS SDK para Java usa la clase SystemPropertiesCredentialsProvider para cargar estas credenciales. -
Credenciales de Web Identity Token del entorno o contenedor.
-
El archivo de perfiles de credenciales predeterminado, que normalmente se encuentra en
~/.aws/credentials(la ubicación puede variar en función de la plataforma) y que comparten muchos de los SDK de AWS y el AWS CLI. AWS SDK para Java usa la clase ProfileCredentialsProvider para cargar estas credenciales.Puede crear un archivo de credenciales utilizando el comando
aws configureproporcionado por la AWS CLI, o bien puede crearlo editando el archivo con un editor de texto. Para obtener información sobre el formato del archivo de credenciales, consulte Formato del archivo de credenciales de AWS. -
Credenciales del contenedor de Amazon ECS: cargadas desde Amazon ECS si se ha establecido la variable de entorno
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI. AWS SDK para Java usa la clase ContainerCredentialsProvider para cargar estas credenciales. Puede especificar la dirección IP para este valor. -
Credenciales del perfil de instancia: usadas en instancias EC2 y distribuidas a través del servicio de metadatos de Amazon EC2. AWS SDK para Java usa la clave InstanceProfileCredentialsProvider para cargar estas credenciales. Puede especificar la dirección IP para este valor.
nota
Las credenciales del perfil de instancia se utilizan únicamente si no se ha establecido
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI. Consulte EC2ContainerCredentialsProviderWrapper para obtener más información.
Utilizar credenciales temporales
Para poder utilizar las credenciales temporales de AWS, deben configurarse en al menos una de las ubicaciones anteriores. Para obtener información sobre la configuración de las credenciales, consulte los siguientes temas:
-
Para especificar credenciales en el entorno o en el archivo de perfiles de credenciales predeterminado, consulte Configurar credenciales temporales.
-
Para establecer propiedades del sistema Java, consulte el tutorial System Properties
en el sitio web oficial Java Tutorials. -
Para configurar y utilizar credenciales del perfil de instancia con las instancias EC2, consulte Uso de roles de IAM para conceder acceso a los recursos de AWS en Amazon EC2.
Configurar un perfil de credenciales alternativo
AWS SDK para Java utiliza el perfil predeterminado de forma predeterminada, pero hay formas de personalizar el perfil que se obtiene del archivo de credenciales.
Puede utilizar la variable de entorno de perfil de AWS para cambiar el perfil cargado por el SDK.
Por ejemplo, en Linux; macOS o Unix ejecutaría el comando siguiente para cambiar el perfil a myProfile.
export AWS_PROFILE="myProfile"
En Windows, usaría el siguiente comando.
set AWS_PROFILE="myProfile"
La configuración de la variable de entorno AWS_PROFILE afecta a la carga de credenciales para todos los SDK y herramientas AWS oficialmente soportados (incluidos AWS CLI y AWS Tools for Windows PowerShell). Para cambiar únicamente el perfil de una aplicación Java, puede utilizar la propiedad del sistema aws.profile en su lugar.
nota
La variable de entorno prevalece sobre la propiedad del sistema.
Configurar una ubicación del archivo de credenciales alternativa
El AWS SDK para Java carga la credenciales temporales de AWS automáticamente desde la ubicación predeterminada del archivo de credenciales. Sin embargo, también puede especificar la ubicación estableciendo la variable de entorno AWS_CREDENTIAL_PROFILES_FILE con la ruta completa del archivo de credenciales.
Puede utilizar esta característica para cambiar la ubicación donde AWS SDK para Java busca su archivo de credenciales (por ejemplo, estableciendo esta variable con la línea de comandos). También puede establecer la variable de entorno en el entorno del usuario o del sistema para cambiarlo para el usuario o para todo el sistema.
Para invalidar la ubicación predeterminada del archivo de credenciales
-
Establezca la variable de entorno de
AWS_CREDENTIAL_PROFILES_FILEen la ubicación del archivo de credenciales de AWS.-
En Linux, macOS o Unix, utilice:
export AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file -
En Windows, use:
set AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
-
Formato de archivo de Credentials
Siguiendo las instrucciones de la configuración básica de esta guía, el archivo de credenciales debe tener el siguiente formato básico.
[default] aws_access_key_id=<value from AWS access portal>aws_secret_access_key=<value from AWS access portal>aws_session_token=<value from AWS access portal>[profile2] aws_access_key_id=<value from AWS access portal>aws_secret_access_key=<value from AWS access portal>aws_session_token=<value from AWS access portal>
El nombre de perfil se especifica entre corchetes (por ejemplo, [default]), seguido de los campos configurables en ese perfil como pares de clave-valor. Puede tener varios perfiles en su archivo de credentials, que puede añadir o editar mediante aws configure --profile
PROFILE_NAME
para seleccionar el perfil que se va a configurar.
Puede especificar campos adicionales, como metadata_service_timeout y metadata_service_num_attempts. Estos no se pueden configurar con la CLI; debe editar el archivo manualmente si desea utilizarlos. Para obtener más información sobre el archivo de configuración y sus campos disponibles, consulte Configuración de la AWS Command Line Interface en la Guía del usuario de AWS Command Line Interface.
Cargar credenciales
Después de definir las credenciales temporales, el SDK las carga mediante la cadena predeterminada de proveedores de credenciales.
Para ello, cree una instancia del cliente de un Servicio de AWS sin proporcionar explícitamente las credenciales al compilador, tal y como se indica a continuación.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(Regions.US_WEST_2) .build();
Especificar un proveedor de credenciales o una cadena de proveedores
Puede especificar un proveedor de credenciales diferente de la cadena de proveedores de credenciales predeterminada mediante el creador del cliente.
Para ello, proporciona una instancia de un proveedor de credenciales o cadena de proveedores al creador del cliente, que toma la interfaz AWSCredentialsProvider como entrada. El siguiente ejemplo muestra cómo utilizar credenciales de entorno específicamente.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new EnvironmentVariableCredentialsProvider()) .build();
Para obtener la lista completa de proveedores de credenciales y cadenas de proveedores proporcionados por AWS SDK para Java, consulte la sección sobre todas las clases de implementaciones conocidas en AWSCredentialsProvider.
nota
Puede utilizar esta técnica para proporcionar los proveedores de credenciales o cadenas de proveedores que crea utilizando su propio proveedor de credenciales que implementa la interfaz AWSCredentialsProvider o a través de una subclase de la clase AWSCredentialsProviderChain.
Especificar explícitamente credenciales temporales
Si la cadena de credenciales predeterminada o un proveedor o cadena de proveedores específicos o personalizados no funcionan para su código, puede configurar credenciales que proporcione explícitamente. Si ha recuperado credenciales temporales mediante AWS STS, utilice este método para especificar las credenciales para el acceso a AWS.
-
Cree una instancia de la clase BasicSessionCredentials y suministre la clave de acceso AWS, la clave secreta AWS y el token de sesión AWS que el SDK utilizará para la conexión.
-
Cree una clase AWSStaticCredentialsProvider con el objeto
AWSCredentials. -
Configure el creador del cliente con
AWSStaticCredentialsProvidery compile el cliente.
A continuación se muestra un ejemplo.
BasicSessionCredentials awsCreds = new BasicSessionCredentials("access_key_id", "secret_key_id", "session_token"); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) .build();