Cloudfront - 重叠备用域名

Posted

技术标签:

【中文标题】Cloudfront - 重叠备用域名【英文标题】:Cloud Front - overlapping Alternate Domain Names 【发布时间】:2018-09-17 07:53:01 【问题描述】:

在 Api Gateway 中,我创建了一个自定义域 foo.example.com,它使用该 CNAME 创建了一个 Cloud Front 分配。

我还想创建一个通配符域*.example.com,但是在尝试创建它时,CloudFront 会抛出一个错误:

CNAMEAlreadyExistsException:您提供的一个或多个 CNAME 已与其他资源相关联

AWS 在其文档中指出:

但是,您可以添加通配符备用域名,例如 *.example.com,包括(重叠)非通配符备用域名,例如 www.example.com。重叠域 名称可以在相同的分布中,也可以在不同的分布中 只要两个发行版都是使用同一个 AWS 账户创建的。

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-wildcard

所以我可能误解了这一点,是否有可能完成我所描述的?

【问题讨论】:

【参考方案1】:

这很可能是您的 API Gateway 端点被配置为 Edge Optimized 而不是 Regional 的副作用,因为使用边缘优化的 API,有是自动配置的隐藏 CloudFront 分配...但是,与您的 API 关联的 CloudFront 分配不归您的账户所有,而是归与 API Gateway 关联的账户所有。

边缘优化 API 是通过 API Gateway 创建和管理的 CloudFront 分配访问的端点。

——Amazon API Gateway Supports Regional API Endpoints

这会产生冲突,阻止创建通配符分布。

屏蔽通配符的子域不允许跨越 AWS 账户边界,因为这可能允许通过创建更具体的备用域名来劫持通配符分配的匹配域的流量 - 但是,正如您从文档中指出的那样,您可以在自己的帐户中进行操作。

将您的 API 重新部署为 Regional 而不是 Edge Optimized 是可能的解决方案。如果您仍需要边缘优化行为,您可以使用该特定子域创建另一个 CloudFront 分配以与 API 一起使用。这是允许的,因为您将拥有该发行版。区域 API 仍可在全球范围内访问。

【讨论】:

API网关前创建云端分发的相关解决方案:***.com/a/32825414/185200 我不认为使用区域 API gw 端点可以解决任何问题,因为尽管我的 API gw 是区域的,但我遇到了同样的错误。我认为可能发生的情况是,由于您有一个自定义 API gw 域(foo.example.co),同时又想从 CF 发行版提供 *.example.com,AWS 不知道是否向 foo.example 发送请求.com 到 CF 发行版或 API gw,因此决定阻止您将通配符子域 CNAME 添加到您的 CF【参考方案2】:

是的。但请记住,为 CloudFront 分配设置的 CNAME 经过验证是全球唯一的,包括 API Gateway 分配。因此,这意味着您(或任何其他帐户)已经设置了该 CNAME。目前无法查找冲突的位置,如果您自己找不到,您可能需要向 AWS 支持提出请求。

【讨论】:

在这种特定情况下,错误实际上应该表明另一个AWS账户已经有some-other-subdomain.example.com不是 *.example.com,因为如果另一个账户已经有*.example.com那么此帐户将无法为 foo.example.com 创建现有分发。屏蔽通配符的子域不得跨越 AWS 账户边界,因为这可能会通过创建更具体的备用域名(您可以在自己的账户中执行)来劫持通配符分配的匹配域的流量。 哦...我想我刚刚确定了那个“其他帐户”的身份。

以上是关于Cloudfront - 重叠备用域名的主要内容,如果未能解决你的问题,请参考以下文章

AWS Cloudfront 备用域名 403 被禁止

Cloudfront 为备用域名返回 502

Amazon Cloudfront 允许所有备用域名 (CNAMES)

Cloudfront 阻止缓存整个站点

如何将 CloudFront 和 S3 与备用域一起使用?

Akamai 与 CloudFront [关闭]