Almacenamiento en caché de credenciales en AWS SDK for 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.

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

AWS SDK for Java 2.x Implementa el almacenamiento en caché de credenciales para mejorar el rendimiento y reducir las llamadas a las 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 los 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 las credenciales en caché internamente, incluso cuando se crean nuevas instancias:

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

  • Proveedor de credenciales del contenedor: guarda en caché las credenciales del punto final de metadatos del contenedor.

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

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

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

Proveedores sin almacenamiento en caché interno

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

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

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

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

Hora 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 asíncronas

Permite actualizar las 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 un proveedor de credenciales, es recomendable que el SDK utilice un subproceso en segundo plano para recuperar previamente las credenciales antes de que caduquen. De esta forma, puede evitar la llamada de bloqueo que recupera las credenciales nuevas.

A continuación se muestra un ejemplo en el que StsAssumeRoleCredentialsProvider se crea un subproceso en segundo plano para obtener previamente las credenciales al establecer la asyncCredentialUpdateEnabled propiedad true en el generador:

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 s3Client por primera vez, AssumeRoleRequest se envía una al AWS Security Token Service (STS). El STS devuelve credenciales temporales que son válidas durante 15 minutos (900 segundos). La s3Client instancia 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 sesión nueva entre 5 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 ystaleTime.

Puede configurar los siguientes proveedores de credenciales basados en sesión de forma similar:

  • StsWebIdentityTokenFileCredentialsProvider

  • StsGetSessionTokenCredentialsProvider

  • StsGetFederationTokenCredentialsProvider

  • StsAssumeRoleWithWebIdentityCredentialsProvider

  • StsAssumeRoleWithSamlCredentialsProvider

  • StsAssumeRoleCredentialsProvider

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

  • ProcessCredentialsProvider

  • WebIdentityTokenFileCredentialsProvider

  • ContainerCredentialsProvider

  • InstanceProfileCredentialsProvider

Comprender el almacenamiento en caché de credenciales le ayuda a optimizar el rendimiento y la fiabilidad de su aplicación al trabajar con ella. Servicios de AWS