发布于 2026-01-06 3 阅读
0

使用 S3、Route 53、ACM、CloudFront 自托管安全静态网站

使用 S3、Route 53、ACM、CloudFront 自托管安全静态网站

一直以来,我都梦想着搭建一个个人网站,并拥有自己的域名和托管服务。而这一切,仅仅用了两个周末就实现了。
以下是搭建https://bhuvana.pro网站的步骤,该网站是在静态网站开发完成后创建的。
整个博客分为三个阶段,您可以随时停止,但最终仍然会拥有一个可以正常运行的、拥有自定义域名的网站。

  1. 第一阶段 - 静态网站托管在 Route 53 路由上
  2. 第二阶段 - 静态网站托管在 S3 上,使用 Route 53 和 CloudFront 进行路由,并启用 ACM 进行 SSL 加密。
  3. 第三阶段 - 第二阶段 + CI/CD 用于部署静态网站

目录

使用的 AWS 服务

  • S3
  • 53号公路
  • 亚马逊证书管理器
  • CloudFront
  • AWS CodeCommit
  • AWS CodeDeploy
  • AWS CodePipeline

最佳实践

  • 请务必为所有创建的资源添加标签。
    • S3 根域和日志存储桶
    • CloudFront 分发
    • 53号公路 - 托管区
    • ACM - 公共证书
  • 我创建了两个标签(名称:Bhuvana.pro 和用途:网站),这将有助于资源分组和成本分析。
  • 为了规范 example.com 和本文通篇使用www.example.com作为根域名和子域名。

涉及的高级步骤

在 https://bhuvana.pro 的制作过程中

详细实施说明

第一阶段

我们将使用 Route 53 将静态网站部署在 S3 上,并路由到自定义域名 (example.com)。该自定义域名已在 GoDaddy.com 注册。具体步骤将按照第 1 步到第 9 步进行。
静态网站托管于 S3,使用 Route 53 服务。

第一步:

Amazon Route 53 是一款高可用且可扩展的域名系统 (DNS) Web 服务。您可以使用 Route 53 执行三个主要功能,并且可以任意组合:域名注册、DNS 路由和健康检查。在本教程中,我们将使用 Route 53 进行 DNS 路由,并使用外部站点进行域名注册。点击此处了解更多关于 Route 53 的信息。

根据域名可用性注册您喜欢的域名。我选择在 GoDaddy 注册,只是为了将外部域名与 Route 53 集成;否则,直接在 Route 53 注册域名会自动为您创建一个托管区域。

第二步:

Amazon Simple Storage Service (Amazon S3) 是一种互联网存储服务,其静态网站托管功能可帮助您在 S3 存储桶上托管静态网站,而无需配置和管理服务器来满足扩展需求。点击此处了解更多关于如何使用 S3 的信息。

为根域名(例如 example.com)创建一个 S3 存储桶,并将静态网站的内容上传到该存储桶。
在 S3 上设置静态网站

步骤 3:

为子域创建一个 S3 存储桶,并将其配置为重定向到域存储桶。
网站重定向

第四步:

在 Route 53 中为已注册的域名创建一个托管区域,并将 NS 记录服务器详细信息复制到 GoDaddy.com 进行更新。
如果您已在 Route 53 注册了域名,则 AWS 会自动处理此操作。
托管区域设置

第五步:

在 GoDaddy.com 添加域名服务器。
复制服务器名称时,请记住去掉末尾的点号。
更新域名服务器

步骤 6:

现在您已经创建了两个用于托管和重定向的 S3 存储桶,让我们通过将 S3 存储桶的端点复制到浏览器来检查它是否正常工作。是的,网站已通过 S3 访问!
测试

步骤 7:

现在需要将域名/子域名路由到托管在 S3 上的网站。您需要在托管区域下创建两个记录集,分别指向 S3 存储桶 example.com 和www.example.com。
路由

第 8 步:

要监控网站流量,您可以启用根域名 S3 存储桶的日志记录,并将日志存储在 logs.example.com 目录下的logs/前缀下。
启用日志记录

步骤 9:

按如下方式测试包含根域名和子域名的网站
测试

第二阶段:

我们的网站已经上线运行,但是安全性如何呢?集成 SSL 证书当然很好。但是 S3 不支持 SSL 集成,因此我们决定使用 Amazon CloudFront 从 S3 分发静态网站,并使用从 Amazon Certificate Manager (ACM) 创建的公钥证书进行保护。
静态网站托管在 S3 上,使用 Route 53 和 CDN。

第十步:

Amazon Certificate Manager 可帮助您轻松配置、管理和部署公有及私有 SSL 证书。点击此处了解更多详情。

重要提示:您应该仅在弗吉尼亚州北部地区创建 SSL 证书,以便与 ACM 一起使用。
您的证书

第 11 步:

Amazon CloudFront 是一项 Web 服务,可加速向用户分发静态和动态 Web 内容,例如 .html、.css、.js 和图像文件。CloudFront 通过遍布全球的数据中心网络(称为边缘节点)来交付您的内容。当用户请求您使用 CloudFront 提供的内容时,系统会将用户路由到延迟最低的边缘节点,从而确保内容以最佳性能交付。点击此处了解更多关于 CloudFront 的信息。

让我们在 Amazon CloudFront 中创建一个 Web 分发,作为我们静态网站托管的 CDN。
CloudFront Web分发

第 12 步:

在步骤 7 中,我们将域名/子域名路由到托管在 S3 上的网站。删除这些记录集,并创建两个新的记录集指向 CloudFront 域名。
如果 CloudFront Web 分发启用了 IPv6,则再创建两个记录集。
路由到 CloudFront

第 13 步:

您的网站已启用 SSL 集成并正常运行。
网站已上线

第 14 步:

现在,您的网站可以通过 S3 端点(无需 SSL)浏览,也可以通过根域名和子域名(需要 SSL)浏览。

这还不够。此外,既然我们已经为您的域名集成了 SSL,用户为什么还要直接访问 S3 内容呢?

让我们使用源访问身份来限制对从 Amazon S3 存储桶提供的内容的访问,以下是步骤:
在 CloudFront 控制台中创建一个名为源访问身份 (OAI) 的特殊 CloudFront 用户,并将其与您的分发关联。

配置您的 S3 存储桶权限,以便 CloudFront 可以使用 OAI 访问存储桶中的文件并将其提供给用户。确保用户无法使用直接 URL 访问 S3 存储桶中的文件。

完成这些步骤后,用户只能通过 CloudFront 访问您的文件,而不能直接从 S3 存储桶访问。

点击此处了解更多关于 OAI 的信息,并按照以下说明进行设置。

OAI 集成

第15步:

尝试通过 S3 端点访问内容。希望您收到403 Forbidden错误?
第一次收到“访问被拒绝”错误,这可是件好事!太棒了!!

现在,您的网站应该只能通过 CloudFront 分发的根域名和子域名访问。

衷心祝贺您和我一起成功搭建了安全的静态网站。

第三阶段:

作为一名 DevOps 人员,如果没有一个源代码控制库来对网站更改进行版本控制,并通过 DevOps 管道将更改无缝集成到 S3 存储桶中,那么实施就是不完整的,以下是架构。

静态网站托管在 S3 上,使用 Route 53 和 CDN + DevOps Pipeline

定价

如果您想了解每月支出情况,请前往“我的账单”控制面板,激活我们为所有资源创建的名称和使用情况成本分配标签。激活成本分配标签后,AWS 会将这些标签关联的成本数据提供给整个账单数据管道。激活后,成本分配标签可以用作 AWS Cost Explorer 中的筛选和分组维度、AWS Budgets 中的筛选维度,以及 AWS Cost & Usage Report 中的专用列。

参考链接

使用自定义域名进行静态网站托管,
配置 SSL 证书到 CloudFront 分发
,路由到 CloudFront 分发,
通过源访问身份限制对 S3 内容的访问。

文章来源:https://dev.to/aws-heroes/self-hosting-secured-static-web-site-using-s3-route-53-acm-cloudfront-411a