首页 文章

S3托管网站Cloudfront分发和API Gateway自定义域指向同一个子域

提问于
浏览
1

我有一个名为api.example.com的网站的子域名,我想要实现以下目标:

  • 为映射到api.example.com的S3静态网站提供了1个CloudFront分配

  • 将API网关自定义域名映射到相同的子域api.example.com

我为实现此设置所采取的步骤是:

  • 创建API网关自定义域api.example.com并将我想要公开的API的基本映射设置为v1(现在版本1)

  • 在Route 53中,我创建了一个CNAME记录api.example.com,指向步骤1中API网关的Edge优化目标域名

注意:此时我按预期得到了来自https://api.example.com/v1的200响应

  • 我创建了一个S3存储桶并将其设置为静态网站托管 . 所有文件上传成功并正常工作 .

  • 我创建了一个新的Cloudfront发行版,其源自S3存储桶 . 此时,对于此Cloudfront分发,我无法将CNAME记录设置为api.example.com,因为它已被API网关中设置的第一个自定义域名使用,并且AWS提供了CNAMEAlreadyExistsException - 因此我将此字段留空 . 访问S3存储桶的CloudFront分配按预期工作 .

  • 在为S3存储桶生成的CloudFront分配下,我添加了另一个来源(API网关自定义域名)并创建Bevahior规则以将v1 / *调用路由到API网关自定义域名 .

在这一点上,事情不再存在了: - 访问https://api.example.com时,我从API网关分发中获得{"message":"Fobidden"} . 但是,URL https://api.example.com/v1仍会返回预期结果 .

Question :有什么我错过设置所以它将适用于URL https://api.example.com返回S3静态网站的内容?

Note :另外,我在S3桶 Cloud 端分布上有一个空的CNAME字段,而我在Route53中使用相同的 Cloud 端分布定义了CNAME,这一事实提示我一条警告消息,说明这种情况可能会让我暴露在漏洞中 .

1 回答

  • 0

    对于您提到的用例,您只需要一个Cloudfront分发(映射到api.example.com),它应该能够使用不同的行为配置将流量转发到S3和API Gateway(两者都作为原点添加到同一分发) . 您可以以/ v1 / *流量路由到API网关和其他流量到S3的方式配置行为 .

    设置原点和行为时,您需要遵循的配置很少 .

    • 确保S3和API网关行为都将HTTP重定向到HTTPS .

    • 添加API网关源设置仅用于转发HTTPS流量 .

    • 在API网关行为中,将接头 - *,授权,来源,引荐来源的标头列入白名单,并确保您不将'Host'标头列入白名单 .

    • 在两个来源中,不要添加任何路径 .

    • 对于API网关行为,将TTL配置为0并允许所有方法(GET,POST等)

相关问题