Armazenamento em cache de credenciais no AWS SDK for Java 2.x - AWS SDK for Java 2.x

Armazenamento em cache de credenciais no AWS SDK for Java 2.x

O AWS SDK for Java 2.x implementa o armazenamento em cache de credenciais para melhorar o desempenho e reduzir as chamadas para origens de credenciais. Esta seção explica como o armazenamento em cache de credenciais funciona e como você pode configurá-lo para suas aplicações.

Noções básicas do armazenamento em cache do provedor de credenciais

Os provedores de credenciais no SDK para Java 2.x usam estratégias de armazenamento em cache diferentes:

  • Armazenamento em cache interno de credenciais: muitos provedores armazenam em cache as credenciais que eles recuperam.

  • Atualização automática: provedores com credenciais em cache implementam mecanismos de atualização.

Provedores com armazenamento em cache interno de credenciais

Os seguintes provedores de credenciais armazenam as credenciais em cache internamente, mesmo quando você cria instâncias:

  • Provedor de credenciais de perfil de instância: armazena em cache as credenciais do serviço de metadados do Amazon EC2.

  • Provedor de credenciais de contêiner: armazena em cache as credenciais do endpoint de metadados do contêiner.

  • Provedores baseados em STS: armazene em cache as credenciais temporárias do AWS Security Token Service (STS).

  • Provedores de tokens de identidade da web: armazene em cache as credenciais obtidas dos tokens de identidade da web.

  • Provedor de credenciais de processo: armazena em cache as credenciais de processos externos.

Provedores sem armazenamento em cache interno

Os seguintes provedores não implementam o armazenamento em cache interno:

  • Provedor de credenciais de variáveis de ambiente

  • Provedor de credenciais de propriedade do sistema

  • Provedor de credenciais estáticas

Configurar o armazenamento em cache de credenciais

É possível personalizar o comportamento do armazenamento em cache ao criar provedores de credenciais:

Tempo de inatividade

Controla quando as credenciais são consideradas inativas e precisam ser atualizadas:

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

Tempo de pré-obtenção

Determina quando começar a atualizar as credenciais antes que elas expirem:

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

Atualizações assíncronas

Permite a atualização de credenciais em segundo plano:

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

Duração da sessão

Para provedores baseados no STS, controla por quanto tempo as credenciais temporárias permanecem válidas:

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

Exemplo de configuração de credenciais armazenadas em cache

Como exemplo de configuração do armazenamento em cache para a implementação de um provedor de credenciais, o SDK pode usar uma thread em segundo plano para a pré-obtenção (recuperação com antecedência) das credenciais antes que elas expirem. Dessa forma, você pode evitar a chamada de bloqueio que recupera novas credenciais.

Veja a seguir um exemplo que cria um StsAssumeRoleCredentialsProvider que usa uma thread em segundo plano para a pré-obtenção de credenciais definindo a propriedade asyncCredentialUpdateEnabled como true no 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();

Quando você invoca uma operação no s3Client pela primeira vez, uma AssumeRoleRequest é enviada ao AWS Security Token Service (STS). O STS retorna credenciais temporárias válidas por 15 minutos (900 segundos). A instância s3Client usa as credenciais em cache até a hora de atualizá-las antes de decorridos os 15 minutos. Por padrão, o SDK tenta recuperar novas credenciais para uma nova sessão entre cinco minutos e um minuto antes do prazo de expiração da sessão atual. A janela de pré-obtenção pode ser configurada usando as propriedades prefetchTime e staleTime.

É possível configurar os seguintes provedores de credenciais baseados em sessão da mesma forma:

  • StsWebIdentityTokenFileCredentialsProvider

  • StsGetSessionTokenCredentialsProvider

  • StsGetFederationTokenCredentialsProvider

  • StsAssumeRoleWithWebIdentityCredentialsProvider

  • StsAssumeRoleWithSamlCredentialsProvider

  • StsAssumeRoleCredentialsProvider

  • DefaultCredentialsProvider (quando delega ao provedor de credenciais que usa sessões)

  • ProcessCredentialsProvider

  • WebIdentityTokenFileCredentialsProvider

  • ContainerCredentialsProvider

  • InstanceProfileCredentialsProvider

Compreender o cache de credenciais ajuda a otimizar o desempenho e a confiabilidade da aplicação ao trabalhar com Serviços da AWS.