2GB 文件传到 60% 时中断,服务端返回 403,错误里写 SecurityTokenExpired。凭证有效期十五分钟,整个上传已经跑了二十多分钟。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

aws sts get-session-token --duration-seconds 3600
aws s3api list-multipart-uploads --bucket b --key big.zip

临时凭证有固定过期时间,签名只在有效期内被接受。分片上传的每个分片都是独立请求,各自带签名,超过有效期后新分片全部被拒。已经传完的分片不会丢,换新凭证可以接着传。这一点先确认清楚,后面就不用反复试。

碰到「STS 临时凭证过期」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,前端在过期前五分钟重新取一次凭证;分片失败后刷新凭证再重试该片;单个分片控制在 8MB 以内 缩短总耗时;确认角色会话时长上限 必要时申请更长的时效。

改完照着核一遍,换新凭证后从上一个成功分片继续,最终合并成功且文件大小一致。

作者 9823189