New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
如何使用 CloudFront 为 Amazon S3 上托管的静态网站提供服务?
我想在 Amazon Simple Storage Service(Amazon S3)桶上托管一个静态网站。然后,我想通过 Amazon CloudFront 分配为我的网站提供服务。
我想在 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(旧版)限制访问权限
完成以下步骤:
-
使用 Amazon S3 控制台创建桶并上传您的网站文件。
**注意:**对于此配置,您无需在桶上启用静态网站托管。此配置使用桶的 REST API 端点,而不是静态网站托管功能中的网站端点。 -
创建 CloudFront Web 分配。除了用例分配设置外,还要完成以下任一部分中的步骤以限制对 Amazon S3 来源的访问。最佳实践是使用 OAC,因为 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 端点。
完成以下步骤:
-
在静态网站托管对话框中,复制桶的端点,但不要复制先导符 http://。格式类似于 DOC-EXAMPLE-BUCKET.s3-website-region.amazonaws.com。您将在后面的步骤中用到此格式的端点。
-
添加允许公众对您创建的桶进行读取访问的桶策略。
**注意:**对于此配置,必须关闭 S3 桶的阻止公共访问设置。如果您的用例要求开启阻止公共访问设置,请使用 REST API 端点作为来源。然后,通过来源访问控制(OAC)或来源访问身份(OAI)限制访问。 -
创建 CloudFront Web 分配。除了您的用例分配设置外,还要完成以下步骤:
在来源域处,输入您在上一步中复制的端点。
**注意:**不要从下拉列表中选择桶。下拉列表仅包含此配置中未使用的 S3 桶 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 端点。
完成以下步骤:
-
在静态网站托管对话框中,复制桶的端点,但不要复制先导符 http://。格式类似于 DOC-EXAMPLE-BUCKET.s3-website-region.amazonaws.com。您将在后面的步骤中用到此格式的端点。
-
创建 CloudFront Web 分配。除了您的用例分配设置外,还要完成以下步骤:
在来源域处,输入您在上一步中复制的端点。
**注意:**不要从下拉列表中选择桶。下拉列表仅包含此配置未使用的 S3 桶 REST API 端点。在添加自定义标头下,选择添加标头。
在标头名称处,输入 Referer。
在值处,输入要转发到来源(S3 桶)的自定义标头值。要限制对来源的访问,请输入只有您知道的随机值或机密值。
-
在创建分配时,最佳实践是为网站使用 SSL(HTTPS)。要将自定义域与 HTTPS 配合使用,请选择自定义 SSL 证书。选择申请证书以申请新证书。如果不使用自定义域,您仍然可以使用 HTTPS 和 cloudfront.net 域名进行分配。
**重要事项:**如果您为分配输入备用域名(CNAME),则 CNAME 必须与您选择的 SSL 证书相匹配。要解决您的 SSL 证书问题,请参阅如何解决在我的 CloudFront 分配中使用自定义 SSL 证书时遇到的问题? -
从 Amazon S3 控制台打开您网站的桶。然后,添加桶策略:在请求包含自定义 Referer 标头的情况下允许 s3:GetObject,该标头即您在第 3 步中指定的标头。对于此配置,必须关闭 S3 桶的阻止公共访问设置。对于 Referer 限制的匿名访问授权的桶策略,Amazon S3 会将其视为公开。如果您的用例要求您开启阻止公共访问设置,请使用 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 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 4 个月前