证书缓存在 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,通过在生成器上将 asyncCredentialUpdateEnabled 属性设置为 true,使用后台线程来预取凭证:

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 服务