我生成一个预签名网址来访问S3中的对象。此网址将在1小时后过期。 它已经工作好几个月,但突然停止工作。 对于我创建的每个网址,该请求的到期时间始终是同一时间,请参阅:
<Error>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<X-Amz-Expires>3599</X-Amz-Expires>
<Expires>2018-05-27T22:56:29Z</Expires>
<ServerTime>2018-05-28T00:20:17Z</ServerTime>
<RequestId>xxx</RequestId>
<HostId>yyy</HostId>
</Error>
任何帮助都会很棒!谢谢!
答案 0 :(得分:3)
使用Signature V4创建的签名URL在您生成它们和到期时不会过期。它们会在您生成代码声明时到期,您可以在网址的X-Amz-Date
字段中找到它。
将此值与UTC中的当前时间进行比较。
此错误表明生成它们的服务器上的时钟是错误的,或者,如果该服务器上的时钟未设置为UTC,则系统时钟上的时区可能是错误的。
答案 1 :(得分:1)
预先签名的网址会从用于构建网址的访问密钥继承其权限。
例如,假设我拥有 IAM用户凭据。 IAM用户具有访问密钥和密钥。我可以使用这些凭据生成预签名的URL。
预签名网址基本上表示此特定用户在一段有限的时间内授权访问特定对象。
但是,如果删除了访问该对象的权限,则无法生成预先签名的URL来访问该对象。 (这只是我权限的时间限制子分配。)
鉴于您的代码曾经可靠地运行但现在却没有,我建议您调查与用于生成预签名网址的凭据相关联的权限。