AWS使用cloudfront将PUT请求转发到S3(包括V4签名)

问题描述 投票:0回答:1

我正在使用 PUT 请求和 AWS V4 签名将文件上传到 S3 存储桶,一切运行良好并在 Postman 中进行了测试。请求看起来像这样...

PUT https://example.com/to-process/test.json?X-Amz-Expires=86400&X-Amz-Date=20240415T033843Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIATGD6OWCXBG3WY4FF%2F20240415%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=766f0a30fb6702597706d1cb8d88f9f8ea2de2334acf7ecdfce51b0bfdf07412

现在我需要更改行为,以便根据请求 URL 路径,一些请求转到 S3,一些请求转到 EC2 服务器,因此我使用具有多个来源和行为的 Cloudfront...这对于 ec2 来源来说效果很好但 S3 源请求给出 400 响应

400 ERROR
The request could not be satisfied.

Bad request.
We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.

我有以下云端设置...

  • 我已将“Origin Access”设置为公开
  • 我已禁用 WAF 和 Origin Shield
  • 我已设置允许的 Http “GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE”的方法
  • 限制查看者访问 - 否
  • 缓存策略 - “缓存已禁用”
  • 源请求策略 - 'AllViewerExceptHostHeader'

我还尝试将签名参数添加为标头而不是查询参数,这给出了相同的响应

查看 CF 访问日志,它没有记录 400 响应的任何内容,因此我看不出问题可能是什么

S3 存储桶设置为“阻止所有公共访问”

谁能告诉我为什么 CF 拒绝这些请求?

更新:

我设法通过请求(它们现在显示在 CF 访问日志中),但是我收到与签名相关的 403 错误:

<Code>SignatureDoesNotMatch</Code>
    <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>

我认为这是因为请求正在使用我的自定义域作为主机进行签名(由 Postman),并且 Cloudfront 正在将请求转发到 S3,S3 正在使用存储桶端点来计算签名。我尝试了各种解决方案,将主机标头传递到源并通过 Postman 强制使用不同的主机,但仍然遇到相同的问题

amazon-web-services amazon-s3 amazon-cloudfront
1个回答
0
投票

有一些值得尝试的事情:

  • 检查 CloudFront 访问日志,看看是否有任何线索 为什么请求被拒绝。如果您没有看到任何日志 对于 400 响应,CloudFront 可能无法正确接收或 转发请求。确保已启用日志记录 CloudFront 分发 .

  • 检查 S3 源的 CloudFront 行为配置。制作
    确保行为已正确配置为转发请求 方法、标头和查询字符串参数发送到源。确保
    该行为未配置为缓存返回的响应 400 状态码。

  • 尝试使用与以下相同的 PUT 请求直接访问 S3 存储桶 您正在通过 CloudFront 发送,看看是否是 CloudFront 问题
    或者 S3 配置问题。

  • 确保不存在冲突的存储桶策略或 CORS
    可能导致 CloudFront 访问问题的配置 桶。

© www.soinside.com 2019 - 2024. All rights reserved.