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

AWS凭证过期后自动更新方案求助:SES客户端凭证过期问题

AWS STS凭证自动更新解决方案(针对SES客户端)

问题根源

你当前代码中使用的AWSStaticCredentialsProvider是静态凭证提供者,只会在Bean初始化时获取一次STS角色凭证,不会自动处理凭证过期后的刷新逻辑,这就是触发ExpiredToken错误的原因。

核心修复方案

不要手动调用getCredentials()获取静态凭证,直接将STSAssumeRoleSessionCredentialsProvider传给SES客户端构建器——AWS SDK原生支持凭证的自动过期检测与刷新。

修正后的Bean代码

@Bean
public AmazonSimpleEmailService getSesClient() {
    STSAssumeRoleSessionCredentialsProvider stsCredentialsProvider = 
        new STSAssumeRoleSessionCredentialsProvider.Builder(
            "ses-role-us-west-2", 
            "mail-sender"
        ).build();

    return AmazonSimpleEmailServiceClientBuilder.standard()
            .withCredentials(stsCredentialsProvider) // 直接传入动态STS凭证提供者
            .withRegion(Regions.US_WEST_2)
            .build();
}

生效原理

  • STSAssumeRoleSessionCredentialsProvider是动态凭证提供者,AWS SDK在每次发起请求前会自动检查凭证有效期,默认提前5分钟检测到即将过期时,会自动调用STS服务刷新凭证。
  • 单例SES客户端Bean可安全复用,无需每次发送邮件时重新创建,符合Spring最佳实践。

可选优化:自定义刷新阈值

如果需要调整凭证提前刷新的时间,可通过withRefreshThresholdSeconds()设置,比如提前10分钟刷新:

STSAssumeRoleSessionCredentialsProvider stsCredentialsProvider = 
    new STSAssumeRoleSessionCredentialsProvider.Builder(
        "ses-role-us-west-2", 
        "mail-sender"
    )
    .withRefreshThresholdSeconds(600) // 设置提前10分钟刷新凭证
    .build();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:56:02