证书缓存在 AWS SDK for Java 2.x - AWS SDK for Java 2.x

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

证书缓存在 AWS SDK for Java 2.x

AWS SDK for Java 2.x 实现凭据缓存以提高性能并减少对凭证源的调用。本节说明凭证缓存的工作原理以及如何为应用程序配置凭据缓存。

了解凭证提供商缓存

适用于 Java 的 SDK 2.x 中的凭据提供程序使用不同的缓存策略:

  • 内部凭证缓存:许多提供商会缓存他们检索到的凭证。

  • 自动刷新:具有缓存凭据的提供者实现刷新机制。

具有内部凭据缓存的提供商

即使您创建了新实例,以下凭证提供程序也会在内部缓存凭证:

  • 实例配置文件凭证提供者:缓存来自 Amazon EC2 元数据服务的证书。

  • 容器凭证提供者:缓存来自容器元数据端点的凭证。

  • 基于 STS 的提供商:缓存来自 AWS Security Token Service (STS) 的临时证书。

  • Web 身份令牌提供商:缓存从 Web 身份令牌获取的凭据。

  • 进程凭据提供者:缓存来自外部进程的凭据。

没有内部缓存的提供商

以下提供商不实现内部缓存:

  • 环境变量凭证提供程序

  • 系统属性凭证提供者

  • 静态凭证提供程序

配置凭据缓存

在构建凭据提供程序时,您可以自定义缓存行为:

陈旧时间

控制证书何时被视为过时且需要刷新:

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

预取时间

确定在证书过期之前何时开始刷新:

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

异步更新

启用后台凭证刷新:

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

会话持续时间

对于基于 STS 的提供商,控制临时证书的有效期:

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

缓存凭证配置示例

作为为证书提供程序实现配置缓存的示例,您可能希望让 SDK 使用后台线程在证书过期之前对其进行预提取(提前检索)。这样,您就可以避免检索新凭据的阻塞调用。

以下示例显示了一个示例,该示例通过StsAssumeRoleCredentialsProvider在生成器true上将asyncCredentialUpdateEnabled属性设置为,使用后台线程来预取凭证:

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();

首次在上s3Client调用操作时,会向 AWS Security Token Service (STS) 发送一个AssumeRoleRequest。STS 返回有效期为 15 分钟(900 秒)的临时证书。s3Client实例使用缓存的凭证,直到需要在 15 分钟之前刷新这些凭证。默认情况下,SDK 会在当前会话到期前 5 分钟到 1 分钟之间尝试为新会话检索新凭证。预取窗口可使用prefetchTimestaleTime属性进行配置。

您可以类似地配置以下基于会话的凭证提供程序:

  • StsWebIdentityTokenFileCredentialsProvider

  • StsGetSessionTokenCredentialsProvider

  • StsGetFederationTokenCredentialsProvider

  • StsAssumeRoleWithWebIdentityCredentialsProvider

  • StsAssumeRoleWithSamlCredentialsProvider

  • StsAssumeRoleCredentialsProvider

  • DefaultCredentialsProvider(当它委托给使用会话的凭证提供商时)

  • ProcessCredentialsProvider

  • WebIdentityTokenFileCredentialsProvider

  • ContainerCredentialsProvider

  • InstanceProfileCredentialsProvider

了解凭据缓存有助于您在使用时优化应用程序的性能和可靠性。 AWS 服务