AWS S3 无法使用 PreSigned URL 检索文档:无效日期(应该是纪元以来的秒数)
AWS S3 Failure to Retrieve Document Using PreSigned URL : Invalid date (should be seconds since epoch)
我们将文档上传到 AWS S3 并使用 boto3 生成了预签名 URL,有效期为 100 年。
我们检索到的预签名URL是http://my_document.s3.amazonaws.com/my_document.htm?Signature=AWS_GENERATED_SIGNATURE&Expires=4732867559&AWSAccessKeyId=MY_ACCESS_KEY
但是,当我们使用URL访问文档时,我们收到以下错误:
<Error>
<Code>AccessDenied</Code>
<Message>
Invalid date (should be seconds since epoch): 4732867559
</Message>
<RequestId>D7F5624326124615</RequestId>
<HostId>
AWS_HOST_ID
</HostId>
</Error>
为什么 AWS S3 由于到期时间值而拒绝打开文档,它本身允许我们使用它来生成预签名 URL?
这里有人在使用 boto3 与 AWS S3 集成时遇到过类似的问题吗?
Why is AWS S3 refusing to open a document because of an expiry time value, which it itself allowed us to use to generate the pre-signed URL?
S3 不允许这样做。已签名的 URL 是在本地生成的,在您真正尝试使用它们之前,S3 看不到它们或不知道它们(或验证它们的真实性或获取指定对象的授权)。
这可能最好被描述为 boto3 中的错误...签名版本 2 到期与 Unix 纪元相关,该纪元结束于 2038-01-19T03:14:08Z("Y2.038K bug")。由于 Signature V2 is deprecated.
,目前不太可能修复
理论上,您可以对 URL 进行 V2 签名,该 URL 直到 2038 年 1 月中旬才到期,但这也不可行,因为已签名的 URL 是(重新)每次使用时都经过验证。最佳做法是定期轮换您的密钥,因此您今天使用的 AWS 访问密钥 ID 在 100 年后,甚至从现在到 2038 年的 18 年内都不会仍然有效。一旦您停用这些特定凭证,任何 URL他们签名的将不再可用。
我们将文档上传到 AWS S3 并使用 boto3 生成了预签名 URL,有效期为 100 年。
我们检索到的预签名URL是http://my_document.s3.amazonaws.com/my_document.htm?Signature=AWS_GENERATED_SIGNATURE&Expires=4732867559&AWSAccessKeyId=MY_ACCESS_KEY
但是,当我们使用URL访问文档时,我们收到以下错误:
<Error>
<Code>AccessDenied</Code>
<Message>
Invalid date (should be seconds since epoch): 4732867559
</Message>
<RequestId>D7F5624326124615</RequestId>
<HostId>
AWS_HOST_ID
</HostId>
</Error>
为什么 AWS S3 由于到期时间值而拒绝打开文档,它本身允许我们使用它来生成预签名 URL?
这里有人在使用 boto3 与 AWS S3 集成时遇到过类似的问题吗?
Why is AWS S3 refusing to open a document because of an expiry time value, which it itself allowed us to use to generate the pre-signed URL?
S3 不允许这样做。已签名的 URL 是在本地生成的,在您真正尝试使用它们之前,S3 看不到它们或不知道它们(或验证它们的真实性或获取指定对象的授权)。
这可能最好被描述为 boto3 中的错误...签名版本 2 到期与 Unix 纪元相关,该纪元结束于 2038-01-19T03:14:08Z("Y2.038K bug")。由于 Signature V2 is deprecated.
,目前不太可能修复理论上,您可以对 URL 进行 V2 签名,该 URL 直到 2038 年 1 月中旬才到期,但这也不可行,因为已签名的 URL 是(重新)每次使用时都经过验证。最佳做法是定期轮换您的密钥,因此您今天使用的 AWS 访问密钥 ID 在 100 年后,甚至从现在到 2038 年的 18 年内都不会仍然有效。一旦您停用这些特定凭证,任何 URL他们签名的将不再可用。