Almacenamiento en caché de credenciales en AWS SDK for Java 2.x - AWS SDK for Java 2.x

Almacenamiento en caché de credenciales en AWS SDK for Java 2.x

AWS SDK for Java 2.x implementa almacenamiento en caché de credenciales para mejorar el rendimiento y reducir las llamadas a fuentes de credenciales. En esta sección se explica cómo funciona el almacenamiento en caché de credenciales y cómo puede configurarlo para sus aplicaciones.

Descripción del almacenamiento en caché de proveedores de credenciales

Los proveedores de credenciales del SDK para Java 2.x utilizan diferentes estrategias de almacenamiento en caché:

  • Almacenamiento interno de credenciales en caché: muchos proveedores almacenan en caché las credenciales que recuperan.

  • Actualización automática: los proveedores con credenciales almacenadas en caché implementan mecanismos de actualización.

Proveedores con almacenamiento interno de credenciales en caché

Los siguientes proveedores de credenciales almacenan internamente credenciales en caché, incluso cuando se crean nuevas instancias:

  • Proveedor de credenciales del perfil de instancia: almacena en caché las credenciales del servicio de metadatos de Amazon EC2.

  • Proveedor de credenciales del contenedor: almacena en caché las credenciales del punto de conexión de metadatos del contenedor.

  • Proveedores basados en STS: almacena en caché las credenciales temporales de AWS Security Token Service (STS).

  • Proveedores de tokens de identidad web: almacenan en caché las credenciales obtenidas de los tokens de identidad web.

  • Proveedor de credenciales de procesos: almacena en caché las credenciales de procesos externos.

Proveedores sin almacenamiento interno en caché

Los siguientes proveedores no implementan el almacenamiento interno en caché:

  • Proveedor de credenciales de variables de entorno

  • Proveedor de credenciales de propiedades del sistema

  • Proveedor de credenciales estáticas

Configuración del almacenamiento en caché de credenciales

Puede personalizar el comportamiento del almacenamiento en caché al crear proveedores de credenciales:

Tiempo de obsolescencia

Controla cuándo se consideran obsoletas las credenciales y deben actualizarse:

.staleTime(Duration.ofMinutes(2)) // Consider stale 2 minutes before expiration.

Tiempo de captura previa

Determina cuándo empezar a actualizar las credenciales antes de que caduquen:

.prefetchTime(Duration.ofMinutes(10)) // Start refresh 10 minutes before expiration.

Actualizaciones asincrónicas

Habilita la actualización de credenciales en segundo plano:

.asyncCredentialUpdateEnabled(true) // Refresh credentials in background thread.

Duración de la sesión

En el caso de los proveedores basados en STS, controla el tiempo que permanecen válidas las credenciales temporales:

.refreshRequest(r -> r.durationSeconds(3600)) // 1 hour session.

Ejemplo de configuración de credenciales de almacenamiento en caché

Como ejemplo de configuración del almacenamiento en caché para la implementación de proveedores de credenciales, es recomendable que el SDK utilice un subproceso en segundo plano para recuperar previamente (por adelantado) las credenciales antes de que caduquen. De esta forma, puede evitar la llamada bloqueante que recupera credenciales nuevas.

A continuación se muestra un ejemplo que crea un StsAssumeRoleCredentialsProvider que utiliza un subproceso en segundo plano para capturar previamente credenciales estableciendo la propiedad asyncCredentialUpdateEnabled en true en el compilador:

StsAssumeRoleCredentialsProvider provider = StsAssumeRoleCredentialsProvider.builder() .refreshRequest(r -> r .roleArn("arn:aws:iam::111122223333:role/example-role") .roleSessionName("example-session") .durationSeconds(3600)) // 1 hour session .staleTime(Duration.ofMinutes(5)) // Consider stale 5 minutes before expiration .prefetchTime(Duration.ofMinutes(10)) // Start refresh 10 minutes before expiration .asyncCredentialUpdateEnabled(true) // Refresh in background .build(); S3Client s3 = S3Client.builder() .credentialsProvider(provider) .build();

Cuando se invoca una operación en s3Client por primera vez, AssumeRoleRequest se envía una a AWS Security Token Service (STS). STS devuelve credenciales temporales que son válidas durante 15 minutos (900 segundos). La instancia s3Client usa las credenciales almacenadas en caché hasta que llegue el momento de actualizarlas antes de que transcurran 15 minutos. De forma predeterminada, el SDK intenta recuperar las credenciales nuevas para una nueva sesión entre 5 minutos y 1 minuto antes de la fecha de caducidad de la sesión actual. La ventana de captura previa se puede configurar mediante las propiedades prefetchTime y staleTime.

Puede configurar de forma similar los siguientes proveedores de credenciales basados en sesiones:

  • StsWebIdentityTokenFileCredentialsProvider

  • StsGetSessionTokenCredentialsProvider

  • StsGetFederationTokenCredentialsProvider

  • StsAssumeRoleWithWebIdentityCredentialsProvider

  • StsAssumeRoleWithSamlCredentialsProvider

  • StsAssumeRoleCredentialsProvider

  • DefaultCredentialsProvider (cuando delega en el proveedor de credenciales que usa sesiones)

  • ProcessCredentialsProvider

  • WebIdentityTokenFileCredentialsProvider

  • ContainerCredentialsProvider

  • InstanceProfileCredentialsProvider

Comprender el almacenamiento en caché de credenciales le ayuda a optimizar el rendimiento y la fiabilidad de la aplicación cuando trabaja con Servicios de AWS.