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

Boto3获取的Token与EC2元数据Token不一致的原因咨询

为什么EC2元数据Token与Boto3获取的Token不一致?

核心原因是Botocore(Boto3的底层依赖库)的本地凭证缓存机制,具体细节如下:

  • 凭证缓存策略:当Boto3首次从EC2元数据服务获取IAM角色的临时凭证(包含STS Token)后,会将这些凭证缓存到本地文件系统(默认路径如/tmp/awscli/cache或~/.aws/cli/cache),缓存时长等于凭证的剩余有效期(IAM角色临时凭证默认有效期为1小时)。
  • 缓存优先逻辑:后续调用boto3.Session().get_credentials().token时,Boto3会优先读取本地缓存的凭证,而不会直接请求元数据服务,除非缓存的凭证已过期或即将过期(默认提前5分钟触发刷新)。
  • 元数据服务的凭证刷新:EC2元数据服务会自动定期刷新IAM角色的临时凭证(每小时一次),但你通过curl直接访问元数据服务时,拿到的是实时的最新凭证。如果在Boto3缓存凭证之后,元数据服务已刷新了凭证,但Boto3的缓存尚未过期,就会出现curl获取的Token与Boto3返回的Token不一致的情况——此时Boto3用的是缓存中的旧Token,而curl拿到的是元数据服务中的新Token。

额外补充:你移除IAM角色后Boto3无法获取凭证,证明Boto3确实依赖EC2元数据服务获取初始凭证,但后续的凭证使用完全依赖本地缓存,直到缓存过期才会重新请求元数据服务。

内容的提问来源于stack exchange,提问作者Old-Equipment-8361

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:30:27