基于选定请求标头的缓存 - CloudFront Cloudformation的行为?

时间:2018-02-03 15:28:35

标签: amazon-cloudfront amazon-cloudformation

我正在编写Cloudformation来部署ELB原始CloudFront分配。除了我在AWS文档中找不到的一个选项外,我完成了它。我将所有流量重定向到https,因此我需要在我的发行版上设置行为,使用“全部”或“白名单”作为“基于所选请求标头的缓存”。可以在任何地方的Cloudformation中指定吗?如果是这样的话?

默认值为None,这是一个无效选项并返回错误:

要将SSL与ELB源一起使用,请转发所有标头或将主机标头列入白名单。如果您不想转发任何标头,请将原始协议策略更改为仅HTTP。

1 个答案:

答案 0 :(得分:5)

DefaultCacheBehaviorCacheBehaviors的成员中,您需要一个类似于此的ForwardedValues

{
  "Cookies" : Cookies,
  "Headers" : [ String, ... ],
  "QueryString" : Boolean,
  "QueryStringCacheKeys" : [ String, ... ]
}

Headers是要转发的标头字符串数组,例如Host

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-forwardedvalues.html

当您尝试将ELB用作Origin时的错误是新的(在2018年1月左右添加)。

以前,配置已被接受,但实际上无法使用HTTPS,因为CloudFront要求源提供有效的SSL证书。

“有效”表示所有这些:

  • 必须由受信任的公共CA签名(因此不得自签名)
  • 不得过期
  • 必须匹配 在CloudFront 中配置的原始域名或由CloudFront发送到原始的Host标头。 (除非您将浏览器发送的Host标头列入白名单,否则这两个值是相同的 - 传出请求的Host标头设置为原始域名。)

除非您转发Host标头并且ELB上的证书与浏览器发送的Host标头匹配,否则最后一个条件无法满足AWS发布的ELB主机名作为来源,因为您无法获得.amazonaws.com子域的SSL证书,因为这不是您的域。这也意味着您无法在浏览器中使用指定的dzczcexample.cloudfront.net主机名来测试HTTPS到使用ELB主机名作为原始域名的ELB源 - CloudFront将抛出502 Bad Gateway错误并抱怨它无法连接到原点。它实际意味着它无法验证原点,因为SSL证书的主题与CloudFront试图转发的请求不匹配。