You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ECS任务执行角色令牌过期问题:S3客户端配置是否有误?

ECS任务角色令牌过期问题排查

我有一个声明了任务执行角色的ECS任务定义,该角色拥有S3存储桶的读写权限。容器会不定期抛出令牌过期错误:

com.amazonaws.services.s3.model.AmazonS3Exception: The provided token has expired.

请问是否是S3客户端的构建配置存在问题?我的Spring配置如下:

@Bean
public AmazonS3 amazonS3Client() {
  return AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
}

根据AWS文档:

新版本的AWS SDK在调用AWS API时会自动从AWS_CONTAINER_CREDENTIALS_RELATIVE_URI环境变量获取这些凭证。

输出包含应用访问AWS资源所用的访问密钥对(包含访问密钥ID和秘密访问密钥),以及AWS用于验证凭证有效性的令牌。默认情况下,通过任务角色分配给任务的凭证有效期为6小时,之后由Amazon ECS容器代理自动轮换。


问题确实出在S3客户端的配置上。当前代码构建的客户端只会在初始化时一次性获取凭证,不会自动处理凭证轮换。6小时后令牌过期,客户端仍使用旧的过期令牌,就会触发这个错误。

解决办法是让客户端使用动态凭证提供者,确保它能自动刷新过期凭证。修改Spring配置,显式指定默认凭证提供者链(它会自动识别ECS容器凭证并处理轮换):

@Bean
public AmazonS3 amazonS3Client() {
  return AmazonS3ClientBuilder.standard()
      .withRegion(Regions.US_EAST_1)
      .withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
      .build();
}

另外要确认你的AWS SDK版本足够新,旧版本对ECS任务角色的凭证轮换支持可能不完善。DefaultAWSCredentialsProviderChain会自动从ECS的容器凭证环境变量获取凭证,并且在凭证过期时自动重新获取新的有效凭证,避免令牌过期错误。

内容的提问来源于stack exchange,提问作者steamrolla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:45:14