首页 > 解决方案 > Api 网关和区域自定义域作为 CloudFront 源

问题描述

我想创建一个具有区域自定义域的 API 网关并将其用作 CloudFront 分发源。我的主要动机是控制 MinimumProtocolVersion/TLS1.2

我的问题是,区域自定义域的自定义域名是否必须与 CloudFront 分配的域名匹配,或者我是否可以分隔域名。

当不匹配时,我的团队经历了来自 CF 的 403 错误,我只是在仔细检查这是否可行

例子:

ApiGW: 
  - Custom Domain Name (REGIONAL). For example www.sample.com (
  - matching ACM certificate in eu-west-1
  - No R53 records referencing this domain name

Cloudfront:
  -  ACM certificate in us-east-1
  -  Alias www.example.com
  -  Origin; www.sample.com
  -  R53 recrod for www.example.com, in hosted zone example.com mapped to the CF disitribution domain name 

标签: amazon-web-servicesaws-api-gatewayamazon-cloudfront

解决方案


当 CloudFront 与源建立连接时,它始终使用源域名来查找源的 IP 地址......但是当它与源协商 TLS 时,它将 SNI 设置为与 HTTPHost标头相同的值发送到原点。

这两个值可能相同,也可能不同,但Host/SNI 始终彼此相同,并且始终是以下两个值之一:

  • 它是源域名(可能由 Lambda@Edge 源请求触发器在自定义源参数中修改),当缓存行为设置包括将Host标头(或所有标头)列入白名单以转发到源时,或者
  • 它是浏览器发送到 CloudFront 的HTTPHost标头(可能由 Lambda@Edge 请求触发器在请求标头中修改),当缓存行为设置确实包括将Host标头列入白名单以转发到源时。

所以,本质上,如果header被转发,name需要匹配,如果Host不是,则必须不同。

此外,如果不同,则必须在 DNS 中实际配置该主机名并指向分配的区域 API 端点——您不能仅将分配的 DNS 别名目标指向为原始域名。

不幸的是,在少数情况下,CloudFront 在使用 403 错误时会有些混乱。有时,此代码用于更正确地被视为 400 或 421 错误的错误,因此在检查 403 的某些问题时响应正文很重要。如果您将域名指向 CloudFront 而不将该域设置为备用域名对于分配,您将收到一个 403,其正文显示为“错误请求”,并且该事件不会记录在您的 CloudFront 日志中,因为缺少备用域名设置会阻止 CloudFront 将该请求映射到您的特定分配。


推荐阅读