AWS IAM 和 java sdk 服务客户端 - 如何使用与服务关联的角色生成凭证?

AWS IAM and java sdk service clients - How does credentials are generated using role associated with a service?

我是 ECS fargate 上的 运行 java 应用程序,并且已将角色附加到 fargate 任务以执行 s3 操作。在我的 java 过程中,我已经开始使用来自 aws sdk 的 DefaultCredentialsProviderChain.java 来获取凭据并创建 s3 客户端。我在理解下面提到的问题时遇到了问题:

  1. 链中的哪个 class(在 DefaultCredentialsProviderChain.java 中)从关联的角色获取凭据(临时密钥和秘密访问密钥)?这些临时凭据的有效期是多长时间?
  2. 我可以缓存使用 DefaultCredentialsProviderChain.java 的凭据创建的 s3 客户端,以便在 java 服务启动时构建一次 s3 客户端,或者每次任何 s3 操作都需要创建 s3 客户端需要执行吗?

我按照下面提到的 link 但是没有得到我的答案,任何人都可以帮助我理解这些问题。

https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html#credentials-chain

Which class in the chain (in DefaultCredentialsProviderChain.java) gets credentials

由于您附加了一个运行时角色,AWS 将提供一个metadata service。凭据提供者将使用该服务来获取运行时凭据。默认情况下,运行时凭据的有效期为一小时(据我所知)。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/AuthUsingTempSessionToken.html

Can i cache the s3 client created with credentials

是的,你可以。凭据提供程序跟踪会话生命周期并在到期前的某个时间刷新令牌(以及 - 据我所知)。

这实际上在创建预签名 url 时设置了一些限制。预签名 url 仅在凭据有效之前有效。因此,您可能会创建一个预签名的 url,并且 url 的有效时间将比预期的短