我正在使用以下代码生成签名网址:
client.generate_presigned_url('get_object',
{'Bucket': client.bucket, 'Key': s3_filename}, ExpiresIn=expiry_seconds, HttpMethod='GET')
这会生成一个如下所示的URL:
https://[bucket_name].s3.amazonaws.com/[path]?AWSAccessKeyId=[access-key-id]&Signature=[signature]&Expires=1478646479&x-amz-security-token=[long_token_string]
'Expires'时间戳是未来4天(在撰写本文时),但是当点击链接时,我得到'令牌已过期'XML响应。该链接在生成后几小时内可以正常工作。
还有什么我应该看的吗?
感谢。
答案 0 :(得分:1)
1478646479
的到期时间等于将来的2016-11-08T23:07:59+00:00
,因此生成的到期时间显示正确。 (如果生成链接的计算机上的时钟错误,则可能是错误的。)
接下来要检查的是与实体关联的权限(由AWSAccessKeyId
标识)创建预签名网址。实际上,URL使用该实体的权限(例如,IAM用户,IAM角色,STS凭证)来授予对对象的时间限制访问权。如果该实体不再具有访问该对象的权限,则预签名URL将不再起作用。
您可以使用AWS Command-Line Interface (CLI)中的aws s3 presign
命令对预签名网址执行测试。