夢のの*_*のの夢 10 amazon-web-services amazon-cloudfront amazon-route53 aws-api-gateway
我正在尝试使用自定义源名称设置 CF 发行版,该发行版指向 Route53 中的自定义域设置,并具有基于延迟的路由(到多个区域)。这是因为区域 API 不包含用户 IP 信息(XFF 标头),而 CloudFront 包含。
在这样做的过程中,我发现了 CF 的一个非常奇怪的行为。当我配置Cache key 和 origin requests时,CF 总是给出不需要的输出。以下是我刚刚管理Cache 策略CachingDisabled的工作原理。
但这有一个问题,因为没有任何标头传递给应用程序,因此我配置了Origin 请求策略并添加了AllViewer策略,因为我需要转发来自客户端的所有自定义标头/查询参数。
然而,当我收到 403 错误时,这会中断。
{
  "message": "Forbidden"
}
我还尝试过将标头设置为 的旧版缓存设置All,但此选项也给出 403。我怀疑这与 CloudFront 附加的一些标头有关,这些标头在 API 网关处被拒绝,但我无法配置。
是什么赋予了?
y. *_* bs 14
我刚刚遇到这个问题,在与 AWS 支持人员核实后发现,当您设置将所有标头传递到源时,“Host”标头也会传递,然后 API 网关在标头中收到无效主机名并返回 403
当我遇到这个问题时,我的第一反应是去文档中查找错误。这排除了很多可能性,正如评论所暗示的,缺少标头很可能是原因。另外,我使用的是WAF,所以也可能导致错误。
我打开了 API Gateway 请求日志记录和 WAF cloudwatch 日志记录,并尝试了几种组合。主要问题似乎不在于CachingDisabled缓存策略,而在于将其与AllViewer源请求策略一起使用。切换到根本没有源请求策略会产生错误 - 但这是我的错误之一。果然,我能够确认我的端点已到达,并且错误的根源是缺少X-Signature标头。但是,通过制定自定义源请求策略并手动添加该标头,我能够开始200 OK从我的端点获取数据。所有这一切都与 WAF 正常工作有关。这里有趣的是,在定义自定义策略时,我只需要指定一个标头 - cloudfront 似乎默认转发许多其他内容,例如X-Forwarded-For和Host。
更仔细地阅读文档,似乎在使用这些策略时在幕后进行了很多隐式标头传递。缓存键中的标头会自动发送到源,并且AllViewer非常模糊。我无法在策略本身中找到显式标头列表,但我怀疑就是这些标头。它的行为就好像它传递了这些标头,而没有传递任何其他内容AllViewer,甚至可能不是HostAPIGx-apigw-api-id似乎需要的两个标头。我无法凭经验确认所通过的内容,但这无论如何都是我的工作理论。
这里的 TL;DR 是 1) 是的,您可以将CachingDisabled策略与 APIG 一起使用,2) 您需要非常小心地检查实际从 Cloudfront 传递到 APIG 的内容。就我而言,它是标头,但根据您的用例,您可能还会遇到 cookie、压缩支持或查询字符串的问题。