Skip to main content
 首页 » 编程设计

python之S3 : ExpiredToken error for S3 pre-signed url within expiry period

2025年05月04日12落叶无声

这就是我从 python 脚本为 S3 对象生成预签名 url 的方式。

s3client = boto3.client("s3") 
url = s3client.generate_presigned_url("get_object", Params={"Bucket": args.bucket, "Key": dated_filename}, ExpiresIn=86400) 

我给出 24 小时到期的地方。

当我尝试使用浏览器中的 url 立即下载文件时,它起作用了。但是,如果我尝试下载它,比如 10-12 小时后,它就不起作用(我不知道它开始失败的确切时间)。

这是我遇到的错误。

<Code>ExpiredToken</Code> 
<Message>The provided token has expired.</Message> 

不确定这是一个错误还是我没有以正确的方式进行。任何帮助将不胜感激。

请您参考如下方法:

您是否在 IAM 角色下运行?预签名 URL 仅在生成它时使用的 session key 有效。如果您作为 IAM 用户使用长期访问 key 进行身份验证,这不是问题。但 IAM 角色使用每 36 小时循环一次的临时访问 key 。

您知道您的 session key 已过期,因为您收到“提供的 token 已过期”。错误,这(如上所述)与您在预签名 URL 达到其到期日期时收到的“请求已过期”是不同的错误消息。

此外,预签名 URL 有 7 天的硬性限制 - 但这似乎不是您的问题。