这就是我从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>
不确定这是不是一个错误,或者我没有以正确的方式做到这一点。任何帮助将不胜感激。
答案 0 :(得分:4)
您是否在IAM角色下运行?预签名URL仅在生成它时使用的会话密钥有效。如果您作为具有长期访问密钥的IAM用户进行身份验证,则这不是问题。但IAM角色使用临时访问密钥,每36小时循环一次。
您知道您的会话密钥已过期,因为您收到了#34;提供的令牌已过期。&#34;错误,(如上所述)是一个不同的错误消息而不是&#34;请求已过期&#34;当预先签名的URL到达其到期日期时,您会得到它。
此外,预先签名的网址有7天的硬限制 - 但这似乎不是您的问题。