如何使用 CloudFront 为 Amazon S3 上托管的静态网站提供服务?
我想在 Amazon Simple Storage Service (Amazon S3)桶上托管一个静态网站。然后,我想通过 Amazon CloudFront 分配为我的网站提供服务。
简短描述
要为托管在 Amazon S3 上的静态网站提供服务,请使用以下配置之一部署 CloudFront 分配:
- 使用 REST API 端点作为源,并使用来源访问控制(OAC)或来源访问身份(OAI)限制访问
**注意:**最佳实践是使用来源访问控制(OAC)来限制访问。来源访问身份(OAI)是此过程的传统方法。 - 使用网站端点作为来源,并允许匿名(公共)访问
- 使用网站端点作为来源,并使用 Referer 标头限制访问
- 使用 AWS CloudFormation 部署静态网站端点作为来源,并部署指向 CloudFront 的自定义域名
有关这两种端点类型的更多信息,请参阅网站端点和 REST API 端点之间的主要区别。
解决方法
要使用要用作来源的 S3 端点类型配置 CloudFront 分配,请完成以下步骤:
使用 REST API 端点作为来源,并使用 OAC 或 OAI(旧版)限制访问权限
**注意:**对于此配置,您无需在桶上开启静态网站托管。此配置使用桶的 REST API 端点,而不是静态网站托管功能中的网站端点。
- 创建 CloudFront Web 分配。除了用例分配设置外,还要完成以下任一部分中的步骤以限制对 Amazon S3 来源的访问。使用 OAI 是一种最佳实践,因为 OAI 是一种传统设置。
OAC
创建分配时,请在来源域字段中输入您的 Amazon S3 桶名称。
在来源访问部分中,选择来源访问控制设置(推荐)。
在来源访问控制下拉列表中,选择 OAC 名称并选择创建控制设置。
在对话框中,将您的控制设置命名为**。**最佳实践是保留默认设置 Sign requests(推荐)。然后,选择创建。
CloudFront 为您提供策略语句,允许您在创建分配后授予 OAC 访问您的 Amazon S3 桶的权限。选择复制策略并将策略粘贴到您的 S3 桶策略配置中。
OAI
创建分配时,请在来源域字段中输入您的 Amazon S3 桶名称。
在来源访问权限下,选择旧版访问身份。
在来源访问身份下拉列表中,选择来源访问身份名称。然后,选择创建新的 OAI。
在对话框中,命名新的来源访问身份并选择创建。
在桶策略处,选择是,更新桶策略。
-
在创建分配时,最佳实践是为网站使用 SSL(HTTPS)。 要将自定义域名与 HTTPS 配合使用,请选择自定义 SSL 证书。选择申请证书以申请新证书。如果您不使用自定义域名,您仍然可以使用 HTTPS 和 cloudfront.net 域名进行分配。
**重要事项:**如果您为分配输入备用域名(CNAME),则 CNAME 必须与您选择的 SSL 证书相匹配。要解决您的 SSL 证书问题,请参阅如何解决在我的 CloudFront 分配中使用自定义 SSL 证书时遇到的问题? -
更新域的 DNS 记录,将网站域指向 CloudFront 。您可以在 CloudFront 控制台中查找分配的域名。该域名类似于以下示例:d1234abcd.cloudfront.net。
-
等待 DNS 更改传播并等待先前的 DNS 条目过期。
注意: 先前的 DNS 值过期所需时长取决于托管区域中设置的 TTL 值。这还取决于您的本地解析器是否使用这些 TTL 值。
使用网站端点作为来源,并允许匿名(公共)访问
此配置允许公众访问您网站的桶。有关更多信息,请参阅设置网站访问权限。
**注意:**当您使用 Amazon S3 静态网站端点时,CloudFront 和 Amazon S3 之间的连接只能通过 HTTP 进行。要使用 HTTPS 建立 CloudFront 和 Amazon S3 之间的连接,请为来源配置 S3 REST API 端点。
- 使用 Amazon S3 控制台创建桶并在该桶上开启静态网站托管。
- 在静态网站托管对话框中,复制桶的端点,但不要复制先导符 http://。格式类似于 DOC-EXAMPLE-BUCKET.s3-website-region.amazonaws.com。您将后面的步骤中用到此格式的端点。
- 添加允许公众对您创建的桶进行读取访问的桶策略。
**注意:**对于此配置,必须关闭 S3 桶的阻止公共访问设置。如果您的用例要求开启封锁公共访问设置,请使用 REST API 端点作为来源。然后,通过来源访问控制(OAC)或来源访问身份(OAI)限制访问。 - 创建 CloudFront Web 分配。除了您的用例设置外,还要完成以下步骤:
在来源域处,输入您在上一步中复制的端点。
**注意:**不要从下拉列表中选择桶。下拉列表仅包含此配置中未使用的 S3 Bucket REST API 端点。 - 在创建分配时,最佳实践是为网站使用 SSL(HTTPS)。要将自定义域名与 HTTPS 配合使用,请选择自定义 SSL 证书。选择申请证书以申请新证书。如果您不使用自定义域,则仍然可以使用 HTTPS 和 cloudfront.net 域名进行分配。
**重要事项:**如果您为分配输入备用域名(CNAME),则 CNAME 必须与您选择的 SSL 证书相匹配。要解决您的 SSL 证书问题,请参阅如何解决在我的 CloudFront 分配中使用自定义 SSL 证书时遇到的问题? - 更新域的 DNS 记录,将网站域指向 CloudFront。您可以在 CloudFront 控制台中查找分配的域名。域名格式类似于以下示例:d1234abcd.cloudfront.net。
- 等待 DNS 更改传播并等待先前的 DNS 条目过期。
注意: 先前的 DNS 值过期所需时长取决于托管区域中设置的 TTL 值。这还取决于您的本地解析器是否使用这些 TTL 值。
使用网站端点作为来源,并使用 Referer 标头限制访问
**重要事项:**查看此设置允许的访问权限是否符合您的用例要求。
此配置通过在分配上设置自定义 Referer 标头来限制访问权限。然后,其使用桶策略仅允许使用自定义 Referer 标头的请求进行访问。
**注意:**当您使用 Amazon S3 静态网站端点时,CloudFront 和 Amazon S3 之间的连接只能通过 HTTP 进行。要使用 HTTPS 建立 CloudFront 和 Amazon S3 之间的连接,请为来源配置 S3 REST API 端点。
- 使用 Amazon S3 控制台创建桶并在该桶上开启静态网站托管。
- 在静态网站托管对话框中,复制桶的端点,但不要复制先导符 http://。格式类似于 DOC-EXAMPLE-BUCKET.s3-website-region.amazonaws.com。您将后面的步骤中用到此格式的端点。
- 创建 CloudFront Web 分配。除了您的用例设置外,还要完成以下步骤:
在来源域处,输入您在上一步中复制的端点。
注意:不要从下拉列表中选择桶。下拉列表仅包含此配置未使用的 S3 Bucket REST API 端点。
在添加自定义标题下,选择添加标题。
在标题名称处,输入 Referer。
在值处,输入要转发到来源(S3 桶)的自定义标题值。要限制对来源的访问,请输入只有您知道的随机值或机密值。 - 在创建分配时,最佳实践是为网站使用 SSL(HTTPS)。要将自定义域名与 HTTPS 配合使用,请选择自定义 SSL 证书。选择申请证书以申请新证书。如果您不使用自定义域名,您仍然可以使用 HTTPS 和 cloudfront.net 域名进行分配。
**重要事项:**如果您为分配输入备用域名(CNAME),则 CNAME 必须与您选择的 SSL 证书相匹配。要解决您的 SSL 证书问题,请参阅如何解决在我的 CloudFront 分配中使用自定义 SSL 证书时遇到的问题? - 从 Amazon S3 控制台打开您网站的桶。然后,添加桶策略:在请求包含自定义 Referer 标头的情况下允许 s3:GetObject,该标头即您在第 3 步中指定的标头。对于此配置,必须关闭 S3 桶的阻止公共访问设置。Amazon S3 将会考虑授予 Referer 限制的匿名访问权限为公开的桶策略。如果您的用例要求您开启阻止公共访问设置,请使用 REST API 端点作为来源。然后,通过来源访问控制(OAC)或来源站访问身份(OAI)限制访问。
**注意:**要阻止任何不包含自定义 Referer 标头的请求的访问权限,请在桶策略中使用显式拒绝声明。 - 更新域的 DNS 记录,将网站域指向 CloudFront。您可以在 CloudFront 控制台中查找分配的域名。域名类似于以下示例:d1234abcd.cloudfront.net。
- 等待 DNS 更改传播并等待先前的 DNS 条目过期。
注意: 先前的 DNS 值过期所需时长取决于托管区域中设置的 TTL 值。这还取决于您的本地解析器是否使用这些 TTL 值。
使用 CloudFormation 将静态网站端点部署为来源,并自定义指向 CloudFront 的域
此解决方法为您的网站使用以下配置:
- 使用 CloudFormation 部署您的网站
- 在 Amazon S3 上托管您的网站
- 使用 CloudFront 分配您的网站
- 使用 AWS Certificate Manager (ACM)颁发的 SSL/TLS 证书
- 使用 CloudFront 响应标头策略向每个服务器响应添加安全标头
有关如何部署此解决方案的说明,请参阅 GitHub 网站上的 Amazon CloudFront 安全静态网站。
相关信息
相关内容
- AWS 官方已更新 4 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前