通过 Cloudfront 获取请求时出现 AWS s3 SignatureDoesNotMatch 错误

AWS s3 SignatureDoesNotMatch error during get Request through Cloudfront

我有两个云端和一个 s3 存储桶,在两个云端我都添加了 s3 存储桶作为源。 (我正在使用原始访问身份来提供 s3 内容) 我在两个云端都添加了相同的行为。 我的问题是 我能够仅使用一个云端访问 get s3 及其抛出错误 SignatureDoesNotMatch 与其他云端。 例如: https://cloudront1url/images/a.jpg 正在工作,但是 https://cloudfront2url/images/a.jpg 不工作。

我收到的错误是 click here

我知道了。在行为中,我使用 "Cache Based on Selected Request Headers"(白名单选项)作为 s3 来源。我是白名单 "host" header。当我在 "Cache Based on Selected Request Headers" 中选择选项 "none" 时,问题得到解决。

在我的例子中,Cloudfront 中的 Origin Request Policy 被设置为 forward all headers 结果是接受你的请求 headers 并计算签名,而 s3 从特定的 headers 集合计算签名.

使用 OAI 的正确方法是使用 CORS-S3Origin 请求策略或自己选择 headers cherry pick。