1. 设置 S3 存储桶
创建存储桶
- 选择“创建存储桶”</li>
- 对于存储桶名称,它必须与您的域名匹配,包括 www。所以它必须是 www.<您的网站名称>.com。如果它与您的域名不匹配,那么很确定这一切都不起作用。
- 可选(如果您需要,这仅用于测试目的,一旦一切正常,我将在下面的额外步骤部分指导您完成此操作):取消选中阻止所有公共访问,然后选择“我承认当前设置可能会导致此存储桶和其中的对象公开”。一旦一切都连接到您的域,您绝对应该将其更改回阻止,但现在,这将允许您确保至少您的 S3 存储桶正在工作。
- 您不必添加标签,但为了命名和方便您自己,请制作标签。对于键,将其称为“名称”,对于值,将其称为 <您的网站>-Bucket。无需在 Tag 值中包含“www”,再次只是一个可以帮助您的名称。
- 将所有其他值保留为默认值。
- 选择“创建存储桶”
添加文件
- 从主页单击进入您的新存储桶以了解详细信息。
- 现在上传您的 index.html 和 error.html 文件,以及任何其他附加文件。
- 全选。通过选择“操作”并选择“公开”将它们全部公开。
特性
- 在底部的属性中,在“静态网站托管”下选择“编辑”。
- 启用静态网站托管。并分别为索引和错误文档放入“index.html”和“error.html”。
可选,但需要完成前面的可选任务(以便测试您的 S3 存储桶):权限
您最终将只允许 OAI 的权限,如前所述,阻止您不希望人们能够直接访问您的 S3 存储桶,并且仅通过您的域名访问您的网站,当 S3 存储桶为 http 时,该域名将具有 https,但如果您愿意,出于测试目的,请继续执行以下操作。在 Permissions 中的 Bucket policy 中,选择 edit 并放置它,一旦我们有了 OAI,我们将再次更改它:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::www.\<your website name\>.com/*"
}
]
}
S3 存储桶的最后说明
如果您在连接到 CloudFront 分配之前忘记启用静态网站托管,则在尝试查看您的网站时会导致此错误:
如果发生这种情况,您可以尝试将您的 CloudFront 分配重新连接到您的 S3 存储桶以重新注册内容,以便说话。不知道这是为什么。
2. 证书管理器
前往证书管理器
非常重要:从您当前的位置更改为美国东部(弗吉尼亚北部) us-east-1。无论如何,必须从该区域请求证书。如果您不这样做,而是以北加州为例,当您进入下一步 Cloudfront 时,您的 ssl 证书将不会显示,并且您将无法完成 HTTPS 设置。不完全确定为什么会这样,但要使用 CloudFront,您的证书区域必须是US East (N. Virginia) us-east-1。
发出请求
- 选择“请求”。
- 对于“证书类型”,将其保留在“请求公共证书”上。
- 对于“完全合格的域名”,输入您的 <您的网站名称>.com 并添加第二个 www.<您的网站名称>.com。
- 选择 DNS 验证而不是电子邮件。只要您的 Google 域记录中有 CNAME 记录,在提出此请求后将提供这些记录,您就不必担心再次更新证书。如果你走电子邮件路线,你必须每年更新一次,我不会担心这个。选择DNS验证,它会很好。
- 选择发出请求并转到状态页面。
将 CNAME 记录添加到 Google Domains
- 现在在 AWS Certificate Manager 的证书页面上,它将显示您的状态为待处理。
- 单击您刚刚提出的证书请求。您应该会看到 www.<your website name>.com 和 <your website name>.com 的 CNAME 名称和 CNAME 值。如果值为空白,则可能会发生故障,只需刷新页面直到它们出现,它们应该会立即出现。
- 复制这些 CNAME 名称和 CNAME 值。您将把这些放入您的 Google Domains 中。
- 在 Google Domains 中,转到 DNS。
- 创建两条 CNAME 记录,一条用于您的裸域,一条用于另一个。所以对于 www.<your website name>.com 主机名将类似于:
_123a456789012b3456c7d8ef901a234b.www
, Type: CNAME
, DATA 类似于:_fe098765432dc10b987a65f43e21098d.abcdefghij.acm-validations.aws.
- 对于另一条记录(裸域),获取与您的名称域关联的 CNAME 名称和值,并执行与您之前创建的记录相同的操作。为了清楚起见,裸域的 CNAME 名称和值应与 www.<您的网站名称>.com 不同。
- 确保您留下您的域名,因为 Google Domains 会自动为您附加此域名,否则您的域名将在主机名中出现两次,例如 _123a456789012b3456c7d8ef901a234b.<your website name>.com.<your website name>.com。这会导致错误。
- 选择保存并返回 AWS。
等待成功状态
对我来说,在 Google Domains 中进行路由后,我花了 4 分钟才获得证书。所以,在你等待的时候,啜饮咖啡,喘口气!它不应该很长。
证书状态将更改为“已颁发”。
3.云前
前往 AWS 中的 CloudFront。
- 选择创建分发。
- 源域:www.<您的网站名称>.com.s3.amazonaws.com
- 对于 Origin Path 放置“index.html”。如果不这样做,一旦您阻止所有公共访问并只允许您的 OAI(稍后将详细介绍 OAI),您将遇到下面屏幕截图中显示的此错误:

- 查看器协议策略:将 HTTP 重定向到 HTTPS 允许的 HTTP 方法:GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE
- 在底部,在“设置”下,为“备用域名”选择“添加项目”,然后输入 www.<您的网站名称>.com,因为这应该与您指向的存储桶匹配。
- 对于自定义 SSL 证书,请选择您的新证书。如果您没有看到它,那么很可能您在证书管理器中制作证书时没有选择N. Virginia作为区域。
- 保持所有其他默认设置并选择“创建分发”完成。
4. 53号公路
创建托管区域
- 选择创建托管区域。
- 执行以下操作: 域名:www.<您的网站名称>.com。
- 将类型保留为“公共托管区域”
- 如果需要,请添加描述和标签。
- 现在完成
将记录添加到 CloudFront 的 Route 53 托管区域
如果您还没有被带到那里,现在转到托管区域详细信息。您现在将创建一条记录以连接到我们的 CloudFront 分配,以添加到您的托管区域中应该已经存在的两条记录的列表中。
- 选择创建记录
- 打开别名。
- 对于“将流量路由到”,选择“别名到 CloudFront 分配”</li>
- 您应该会看到您的 CloudFront 分配出现,例如:dd56opwkqiwae.coudfront.net。选择这个。
- 现在完成选择底部的创建记录。
您现在已经完成了 AWS 端。
5. 谷歌域名
您需要为 www.<your website name>.com 创建 CNAME 记录以连接到您的 Cloudfront 分配,并从 <your website name>.com 重定向到 www.<your website name>.com 以便您的用户可以输入您的裸域名,仍然可以访问您的网站。如果 google 域支持 ANAME/ALIAS 记录,您可以做不同的事情,您还可以为 <your website name>.com 的裸域创建 Cloudfront 分配,并将 <your website name>.com 路由到它自己的 CloudFront 分配谷歌域名。但由于 Google 不支持 ANAME/ALIAS 记录,您必须将裸域重定向到您的域,然后将您的域重定向到 CloudFront。此外,您还必须为您的裸域创建一个 s3 存储桶,您可以在其中将其指向另一个 s3 存储桶。但您不必担心这一点,因为 Google Domains 首先不支持 ANAME/ALIAS 记录。如果它让您感觉更好,amazon.com 会重定向到www.amazon.com,因此将裸域重定向到 www url 不仅很常见,而且被大人物使用。
现在这很有趣,撰写本文时的 AWS 文档说在 Google Domains 中创建一个合成记录,但 Google Domains 最近更改了他们的界面。它不再在他们的“DNS”页面中将它们称为“合成记录”,您必须转到 Google Domain 的“网站”页面并单击“转发域”并在那里转发您的裸域 <您的网站名称>.com到 www.<您的网站名称>.com。然后转到您的 DNS 页面,并在那里创建一条 CNAME 记录,将您的 www.<您的网站名称>.com 指向您的 CloudFront 分配。



我屏蔽了我的信息,还输入了假样本数据,让您了解您的 AWS 记录在 Google Domains 中应该是什么样子。

恭喜您成功拥有 HTTPS 网站!
因此,当有人访问 <您的网站名称>.com 时,Google Domains 会将其重定向到 www.<您的网站名称>.com,然后进行 CNAME 查找并找到您的 CloudFront 分配 URL。从具有您的 SSL 证书的 CloudFront,Route 53 看到 CloudFront 分配已到达并为您的 S3 存储桶静态站点提供服务。
额外步骤
现在您已经拥有它,以便您的用户可以使用 https 通过您的域名访问 S3 存储桶,您希望关闭存储桶直接访问(这是 http 而不是 https 以及其他原因)。所以,首先去 CloudFront。
1.云前
- 在 CloudFront 的安全性下,单击源访问身份。
- 选择“创建新的源访问身份”
- 随便你怎么称呼它,但要保持不变,请继续称它为<您的网站名称>-OAI。
- 转到 CloudFront 分配。
- 单击您的分配。
- 选择“起源”
- 选择您在列表中显示的来源。
- 选择“编辑”
- 在 S3 存储桶访问下,选择是使用 OAI(存储桶只能限制对 CloudFront 的访问)
- 从出现的 Origin Access Identity 下拉菜单中,选择您刚刚创建的新 OAI。
- 选择“是,更新存储桶策略”。您仍然需要转到 S3 并删除我们在本教程开头放置的先前允许策略,这只是可选的,因为它用于测试目的。
- 选择底部的“保存更改”,现在您的 OAI 已连接。
2. S3
- 现在前往 S3。
- 选择您的存储桶。
- 只有您的 OAI 需要访问,因此您现在应该阻止所有公共访问。因此,在权限中,在阻止公共访问(存储桶设置)下,立即阻止所有访问。在存储桶策略下,您应该具有以下内容:
OAI 的 JSON,如果您在上一步中选择了“是,更新存储桶策略”,则应该已设置。我在操作列表中添加了“s3:PutObject”,如下所示
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <your OAI ID>"
},
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "[resource_name]"
}
]
}
现在用户应该只能通过 CloudFront 进入您的静态网站,而不是直接通过您的 S3 存储桶。