如何使用 Cloudflare 为 S3 存储桶网站添加 HTTPS在支持 HTTPS 和自定义域的 S3 存储桶中托管静态网站

如何使用 Cloudflare 为 S3 存储桶网站添加 HTTPS在支持 HTTPS 和自定义域的 S3 存储桶中托管静态网站

AWS S3 提供了一种将文件存储在高度可用的对象存储中的简单方法,它还支持设置静态网站。如果您不需要动态内容,那么使用 S3 存储桶是一个很有吸引力的托管选项。您几乎不需要为存储支付任何费用,而且您可以忘记可扩展性。

这种方法有两个问题。它不支持使用你自己的域名,并且连接到它,它不支持HTTPS。要解决这些问题,您需要与 S3 一起使用提供这些缺失功能的另一项服务。

一种选择是 Cloudflare,它提供支持 S3 存储桶网站的代理,并且可以与自定义域名一起使用。

我们经常写这样的文章。加入我们的邮件列表,让我们保持联系。

本文介绍了在 Cloudflare 提供加密和 DNS 设置的情况下设置在 S3 中托管的自己的静态网站所需执行的步骤。

作为先决条件,您需要在 Cloudflare 或其他地方注册的自己的域名。

设置

要使用 Cloudflare 在您自己的域上托管静态网站,您需要设置 S3 和 Cloudflare 这两项服务。前者存储网站并提供 HTTP 接口,而后者管理代理和 HTTPS 设置。

 

桶配置

第一步是创建一个存储桶并上传内容。这可以使用 CLI 或使用控制台手动完成。

桶的名称很重要。它必须是站点的域,否则它将无法工作。这是因为 S3 使用浏览器发送的 Host 标头来知道要使用哪个存储桶,而该标头是站点的域。

公共访问

接下来,您需要取消阻止公共访问。存储桶网站本质上会公开所有对象,而这些对象必须允许匿名访问。

近年来,由于存储桶配置错误导致的安全漏洞越来越多,例如这个这个漏洞,AWS 开始对此采取措施。现在当它的策略允许公共访问时,桶上有一个显着的标签,这是一件好事。它允许某人在不解密存储桶策略的情况下验证存储桶是否私有。

另一个障碍是新存储桶的公共访问被阻止,您需要明确禁用它以允许公共访问。我对此有不同的看法,因为默认情况下存储桶是私有的,您需要启用公共访问。现在您需要在两个地方而不是一个地方启用它。

因此,要使存储桶网站正常运行,请确保禁用公共访问块:

然后,当然,您需要一个允许匿名访问的存储桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::myawsexperiments.com/*"
            ]
        }
    ]
}

桶网站

最后,启用存储桶网站托管。请注意端点 URL,因为这是网站可用的地方:

当您在浏览器中打开 URL 时,它会起作用:

但要注意两件事。首先,它被报告为“不安全”,这意味着它使用 HTTP 而不是 HTTPS。其次,它使用存储桶网站 URL 而不是您自己的域。

对于 bucket 网站,这是你能走的最远的地方。S3 不允许任何配置将站点托管在不同的域上,并且肯定没有办法添加证书来提供 HTTPS。您需要为这些功能使用不同的服务。幸运的是,有几种方法可以从这里开始。在本文的其余部分,我们将研究如何配置 Cloudflare 以提供缺少的功能。

Cloudflare 设置

要将 Cloudflare 用于您的域,您需要将其用作域的名称服务器。如果您已将域转移到 Cloudflare,则无需执行任何其他操作。如果您使用不同的域提供商,则需要添加两个指向 Cloudflare 的 NS 记录。确切的过程取决于域提供商,但在 Cloudflare 文档上有详细的文档。

然后您需要设置 Cloudflare DNS。在根目录添加一条CNAME记录,域名为S3 bucket网站(没有http://的部分)。确保“代理状态”为“已代理”。

这些设置背后发生了很多事情。

首先,根据 DNS 标准,域的顶点不允许使用 CNAME。顶点是“裸”域,这是它的注册方式,例如example.com. 相比之下,www.example.com就不是顶点。这会阻止 CNAME 重定向并提示您使用子域,例如www. 为了解决这个问题,Cloudflare 提供了CNAME 扁平化。这将解析 CNAME 指向的 A 记录并返回这些记录。因此,您可以在顶点上使用 CNAME,同时保持对标准的遵从性。

其次,内容指向 S3 存储桶网站的域,但这并不是定义它指向哪个存储桶的内容。相反,它使用 HTTP 请求的主机标头,该标头是 Cloudflare ( ) 管理的域名example.com。有趣的是,如果您只指定存储桶网站域的末尾( ) ,它就会起作用s3-website-eu-west-1.amazonaws.com。

第三,代理设置定义 Cloudflare 将站在访问者和存储桶网站之间。这就是它提供 HTTPS 的方式。

由于 bucket 网站使用纯 HTTP,您需要配置“灵活”模式:

此设置为访问者提供加密连接,但为存储桶网站提供未加密连接。

最后,作为最佳实践,启用从 HTTP 到 HTTPS 的自动重定向。这确保流量将被加密,但即使通过 HTTP 访问网站也能正常工作:

通过所有这些设置,在浏览器中打开域会通过安全连接显示网站:

安全吗?

浏览器显示挂锁,但加密不是端到端的。虽然访问者和 Cloudflare 之间的流量使用 HTTPS,但 Cloudflare 和 S3 之间的部分没有。相反,它使用公共互联网来获取网站的纯文本。

这暗示了一种错误的安全感。如果攻击者可以捕获浏览器和 Cloudflare 之间以及 Cloudflare 和 S3 之间的流量,他就可以关联给定用户发出的请求。这违背了加密的目的。

另一方面,连接最关键的部分是在用户附近。易于监控的公共 WiFi 网络或流经单个路由器的酒店网络流量比在两个数据中心之间流动的数据危险得多。

优点

主要优点是该网站可以在您自己的域名上访问,并且带有挂锁图标。从成本上讲,它几乎是免费的。您需要为 S3 端的存储、请求和带宽付费,但 Cloudflare 对于此用例是免费的。

这种设置的一个好处是您不需要配置 HTTPS 的细节。有很多选项,很容易出错。甚至还有一个在线测试器来验证您的设置。Cloudflare 管理证书和加密,确保设置安全。

借助 Cloudflare 的 CNAME 扁平化功能,可以在不破坏某些客户端的情况下使用顶级域。这是一些 DNS 提供商遇到的问题,而且很难解决。

此外,此设置通过 Cloudflare 的网络路由流量,并且提供的不仅仅是路由。它添加缓存,提供一些 DDoS 保护,以及您可以指定永远在线的错误页面。

缺点

主要缺点是您需要使用两种不同的服务。这使得从长远来看更难维护,但根据我的经验,在初始设置后没有太多事情要做。

并且缺乏端到端加密会损害一些安全性。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值