向客户端提供带有 Cloudfront 内容的 S3

Posted

技术标签:

【中文标题】向客户端提供带有 Cloudfront 内容的 S3【英文标题】:Serving S3 with Cloudfront content to a client 【发布时间】:2021-04-12 04:14:42 【问题描述】:

我需要为客户提供 S3 Cloudfront。他们拥有并控制自己的域名clientdomain.com 客户端指定 admin.clientdomain.com 为 S3 的名称。

现在我创建了一个具有特定名称 admin.clientdomain.com 的 S3 存储桶并使用它配置 Cloudfront 并生成 对应的域名abc123xxx.cloudfront.net

我向客户提供了这些信息 (admin.clientdomain.com ---> abc123xxx.cloudfront.net) 这样他们就可以在他们的 DNS 管理器中创建一个 CNAME 条目。

当我浏览 abc123xxx.cloudfront.net 时,它会显示页面和网站内容,但是当我尝试浏览 admin.clientdomain.com 时,它会出错:

403 错误 无法满足请求。错误的请求。我们不能 此时连接到此应用程序或网站的服务器。那里 可能是流量过多或配置错误。稍后再试, 或联系应用程序或网站所有者。如果您将内容提供给 客户通过 CloudFront,您可以找到故障排除步骤和 通过查看 CloudFront 文档来帮助防止此错误。 由 cloudfront (CloudFront) 生成的请求 ID: rt8tyVw7z08KccR0blotyc9IlgBzybuaEJ

其他信息:

我们没有WAF 将分发设置为接受“HTTP 和 HTTPS” 默认的根对象指向“index.html” 在行为上,基于选定请求标头的缓存设置为“无”

问题:

    我仍然收到 403 错误消息 根据谷歌搜索,有人提到使用 ssl 填充 Cloudfront Distribution 的“备用域名”:“admin.clientdomain.com” 我需要获取客户端的 SSL 证书吗?如何解决这个问题?

【问题讨论】:

【参考方案1】:

这里有多个潜在的问题,让我们尝试一一排除。

验证以下 URL 是否可用并提供内容:

https://<your-distribution-id>.cloudfront.net http://<your-distribution-id>.cloudfront.net

我们不知道 CNAME 记录是否设置正确。验证您是否可以使用dig 之类的工具来检查 CNAME 记录,例如dig CNAME admin.clientdomain.com - 确保它指向 CloudFront 域。

确保 admin.clientdomain.com 位于 CloudFront 分配的“备用域名 (CNAME)”中。在这种情况下,至少 http 应该可以工作。

尝试访问:http://admin.clientdomain.com

如果可行,我们已经取得了进展。现在转到 HTTPS/SSL/TLS。为了让 CloudFront 能够为 admin.clientdomain.com 提供 HTTPS 内容,它需要一个证书。幸运的是,您可以使用亚马逊证书管理器 (ACM) 来request a free one。在 ACM us-east-1(北弗吉尼亚) 区域中为 admin.clientdomain.com 创建一个证书,然后配置 CloudFront 以使用该证书。请注意,您的客户必须添加额外的 DNS 记录以验证他们拥有 admin.clientdomain.com - 或者您可以将现有证书导入 ACM。

之后你应该可以访问https://admin.clientdomain.com

【讨论】:

以上是关于向客户端提供带有 Cloudfront 内容的 S3的主要内容,如果未能解决你的问题,请参考以下文章

Amazon CloudFront 与 Limelight 或 Akamai 相比如何?

Cloudfront 私有内容 + 签名 URL 架构

CloudFront 无法与 ELB 502 错误网关通信

带有签名 cookie 的 AWS Cloudfront POST 请求

CloudFront 为域提供旧内容

带有签名 URL 的 AWS CloudFront:403 访问被拒绝