本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
证书缓存在 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 分钟之间尝试为新会话检索新凭证。预取窗口可使用prefetchTime
和staleTime
属性进行配置。
您可以类似地配置以下基于会话的凭证提供程序:
-
StsWebIdentityTokenFileCredentialsProvider
-
StsGetSessionTokenCredentialsProvider
-
StsGetFederationTokenCredentialsProvider
-
StsAssumeRoleWithWebIdentityCredentialsProvider
-
StsAssumeRoleWithSamlCredentialsProvider
-
StsAssumeRoleCredentialsProvider
-
DefaultCredentialsProvider
(当它委托给使用会话的凭证提供商时) -
ProcessCredentialsProvider
-
WebIdentityTokenFileCredentialsProvider
-
ContainerCredentialsProvider
-
InstanceProfileCredentialsProvider
了解凭据缓存有助于您在使用时优化应用程序的性能和可靠性。 AWS 服务