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

EC2上微服务Pod偶发AWS安全令牌过期问题排查求助

问题:EC2上微服务Pod不定期出现AWS临时令牌过期错误

我们有部分部署在EC2实例上的微服务Pod可正常运行,但部分Pod在连接DynamoDB和SNS时,会不定期出现The security token included in the request is expired错误,同一微服务连接Aurora数据库却无此异常。
这些Pod出现问题后,通常几分钟内会自行恢复,重启Pod也可立即恢复正常。

已尝试的方案

我们尝试为SNS客户端配置重试策略:

RetryPolicy retryPolicy = new RetryPolicy(PredefinedRetryPolicies.DEFAULT_RETRY_CONDITION,
        PredefinedRetryPolicies.DEFAULT_BACKOFF_STRATEGY, MAX_RETRY_COUNT_AWS_TOKEN_EXPIRED, true);
ClientConfiguration clientConfiguration = new ClientConfiguration().withRetryPolicy(retryPolicy);

return AmazonSNSClientBuilder.standard().withClientConfiguration(clientConfiguration).build();

同时,在捕获令牌过期异常时,重新执行上述代码实例化SNS客户端,期望获取带有新安全令牌的客户端,但该方法无效。

根据AWS SDK文档,EC2的IAM角色通过实例元数据服务(IMDS)在临时凭证过期前获取新的STS令牌,但该机制有时失效。

核心问题

  1. 该问题的可能原因是什么?
  2. 如何调试EC2实例元数据服务调用AWS是否失败?CloudTrail未记录相关信息。
  3. 我们环境有时存在DNS解析问题,这是否会引发该问题?EC2实例元数据服务获取STS令牌是否依赖DNS解析?

当前95%的Pod运行正常,每周约5%的Pod会出现该问题并持续数分钟,恳请提供解决方案建议。


解决方案建议

  • 检查IMDS的可用性与凭证状态:在出现问题的Pod所在EC2实例上,执行curl http://169.254.169.254/latest/meta-data/iam/security-credentials/[你的IAM角色名],查看返回的凭证Expiration字段是否正常,以及请求是否能快速响应。如果IMDS超时或返回异常,说明宿主机网络或IMDS服务存在问题。
  • 升级AWS SDK并使用默认凭证链:确保使用的AWS Java SDK为最新稳定版,旧版本可能存在凭证刷新逻辑的bug。推荐使用DefaultAWSCredentialsProviderChain自动处理凭证获取与刷新,无需手动构建客户端策略;若必须自定义客户端,避免长期持有单例客户端实例,每次请求前确保获取最新凭证。
  • 排查DNS与网络连通性:EC2实例元数据服务使用链路本地地址169.254.169.254,不依赖DNS解析。但如果Pod内的网络规则(如iptables)拦截了该地址的请求,或Pod的网络栈异常导致无法访问该地址,会影响凭证获取。可在有问题的Pod内执行ping 169.254.169.254或curl上述IMDS端点验证连通性。
  • 切换到IMDSv2并调整会话超时:IMDSv1存在会话管理缺陷,建议切换到IMDSv2,它支持最长6小时的会话超时,减少因会话过期导致的凭证问题。可通过EC2实例的元数据设置或IAM策略强制启用IMDSv2。
  • 监控Pod资源使用率:部分Pod出现问题可能是CPU/内存不足,导致IMDS请求无法及时处理。监控出现异常的Pod的资源指标,排查是否存在资源瓶颈。
  • 检查IAM角色权限与STS配额:确认EC2实例绑定的IAM角色有sts:GetSessionToken或对应STS操作的权限;同时检查STS服务的区域配额是否超限,虽然CloudTrail不记录IMDS调用,但可查看STS的服务日志(若启用)是否有错误记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:42:51