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