

**引入全新的主机体验 AWS WAF**

现在，您可以使用更新的体验访问控制台中任意位置的 AWS WAF 功能。有关更多详细信息，请参阅[使用控制台](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon AWS WAF 上使用 CloudFront
<a name="cloudfront-features"></a>

了解如何 AWS WAF 与 Amazon CloudFront 功能配合使用。

创建保护包 (Web ACL) 时，可以指定 AWS WAF 要检查的一个或多个 CloudFront 发行版。 CloudFront 支持两种类型的分配：保护单个租户的标准分配和通过单个共享配置模板保护多个租户的多租户分配。 AWS WAF 根据您在保护包 (Web ACLs) 中定义的规则检查两种分发类型的 Web 请求，每种类型的实现模式各不相同。

**Topics**
+ [AWS WAF 如何处理不同的分发类型](#cloudfront-features-distribution-types)
+ [AWS WAF 与 CloudFront 统一费率定价计划一起使用](#waf-cf-pricing-plans)
+ [保护 CloudFront 发行版的常见用例 AWS WAF](cloudfront-waf-use-cases.md)

## AWS WAF 如何处理不同的分发类型
<a name="cloudfront-features-distribution-types"></a>

### 分配类型
<a name="distribution-types-overview"></a>

AWS WAF 为标准和多租户 CloudFront 分发版本提供 Web 应用程序防火墙功能。

#### 标准分配
<a name="standard-distribution-overview"></a>

对于标准发行版，使用单个保护包 (Web ACL) 为每个发行版 AWS WAF 添加保护。您可以通过将现有保护包 (Web ACL) 与 CloudFront 发行版关联或在控制台中使用一键保护来启用此保护。 CloudFront 这使您可以独立管理每个分配的安全控制，因为对保护包（web ACL）的任何更改都仅影响与其关联的分配。

这种保护 CloudFront 分布的简单方法最适合通过单个保护包（Web ACL）为单个域名提供特定保护。

##### 标准分配注意事项
<a name="standard-waf-considerations"></a>
+ 对保护包（web ACL）的更改仅影响其关联的分配
+ 每个分配都需要独立的保护包（web ACL）配置
+ 每个分配的规则和规则组都单独进行管理

#### 多租户分配
<a name="tenant-distribution-overview"></a>

对于多租户分发，使用单个保护包 (Web ACL) 在多个域之间 AWS WAF 添加保护。由多租户分配管理的域称为分配租户。在多租户分配创建过程中或之后，您只能在 CloudFront 控制台中启用对多租户分配的 AWS WAF 保护。但是，对保护包（Web ACL）的更改仍通过 AWS WAF 控制台或 API 进行管理。

多租户分布提供了在两个级别上启用 AWS WAF 保护的灵活性：
+ **多租户分发级别** — 关联的保护包 (Web ACLs) 提供基本安全控制，适用于共享该分发的所有应用程序
+ **分发租户级别** — 多租户分布中的单个租户可以拥有自己的保护包 (Web ACLs) 来实施额外的安全控制或覆盖多租户分发设置

这两个层级使多租户分布最适合在多个域之间共享 AWS WAF 保护，而不会失去为单个分配自定义安全性的能力。

#### 多租户分配注意事项
<a name="tenant-waf-considerations"></a>
+ 个人分发租户继承对保护包 (Web ACLs) 所做的更改，这些更改与相关的多租户分发相关联
+ 与特定分发租户关联的保护包 (Web ACLs) 可以覆盖在多租户保护包 (Web ACL) 级别配置的设置
+ 托管规则组可在分配级别和分配租户级别实施
+ 应用程序标识符可在日志中找到，以便通过分配跟踪安全事件

### AWS WAF 按发行类型划分的功能
<a name="distribution-types-comparison"></a>


**比较保护包（web ACL）实施**  

| AWS WAF 特征 | 标准分配 | 多租户分配 | 
| --- | --- | --- | 
| 关联保护包 (Web ACLs) | 每个分配一个保护包（web ACL） | 您可以跨租户共享保护包 (Web ACLs)，以及可选的租户专用保护包 (Web) ACLs | 
| 规则管理 | 规则影响单个分配 | 多租户分配规则影响所有关联的租户；特定于分配租户的规则仅影响该租户 | 
| 托管规则组 | 已应用于单个分配 | 可以在多租户分配级别应用于所有租户，也可以在租户级别应用于特定应用程序 | 
| 日志记录 | 标准 AWS WAF 日志 | 日志包含用于安全事件归因的租户标识符 | 

## AWS WAF 与 CloudFront 统一费率定价计划一起使用
<a name="waf-cf-pricing-plans"></a>

CloudFront 统一费率定价计划将亚马逊 CloudFront 全球内容分发网络 (CDN) AWS 服务 与多种功能相结合，按月定价，不收取超额费用，无论流量激增或攻击如何。

统一费率定价计划包括以下内容 AWS 服务 和功能，仅按月收费：
+ CloudFront CDN
+ AWS WAF 和 DDo S 保护
+ 机器人管理和分析
+ Amazon Route 53 DNS
+ Amazon CloudWatch 日志提取
+ TLS 证书
+ 无服务器边缘计算
+ 每月 Amazon S3 存储服务抵扣金

方案分为免费、专业、商业和高级层级，可满足您应用程序的不同需求。计划无需每年承诺即可获得最优惠的价格。您可从免费版方案开始，然后升级以获得更多功能与更高的使用量限额。

有关更多信息以及计划和功能的完整列表，请参阅《*Amazon CloudFront 开发者指南*》中的[CloudFront 统一费率定价计划](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/flat-rate-pricing-plan.html)。

**重要**  
使用任何定价计划时，有效的 AWS WAF 保护包 (Web ACL) 都必须与您的 CloudFront 发行版保持关联。除非切换回 pay-as-you-go定价，否则无法删除保护包 (Web ACL) 关联。  
虽然 AWS WAF Web ACL 必须与您的发行版保持关联，但您可以完全控制自己的安全配置。您可以通过调整 Web ACL 中启用或禁用的规则来自定义防护，也可以修改规则设置以满足您的安全要求。有关管理 Web ACL 规则的信息，请参阅[AWS WAF 规则](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rules.html)。

# 保护 CloudFront 发行版的常见用例 AWS WAF
<a name="cloudfront-waf-use-cases"></a>

以下 AWS WAF 功能在所有 CloudFront 发行版中的作用方式相同。以下每个功能场景均列出多租户分配的注意事项。

## AWS WAF 与 CloudFront 自定义错误页面一起使用
<a name="cloudfront-features-custom-error-pages"></a>

默认情况下，当根据您指定的条件 AWS WAF 阻止 Web 请求时，它会`403 (Forbidden)`向查看者返回 HTTP 状态码 CloudFront，并将该状态代码 CloudFront 返回给查看者。然后，查看器显示简要且采用稀疏格式的默认消息，如下所示：

```
Forbidden: You don't have permission to access /myfilename.html on this server.
```

您可以通过定义自定义响应来覆盖 AWS WAF 保护包 (Web ACL) 规则中的此行为。有关使用 AWS WAF 规则自定义响应行为的更多信息，请参阅[发送 Block 操作的自定义响应](customizing-the-response-for-blocked-requests.md)。

**注意**  
使用 AWS WAF 规则自定义的响应优先于您在 CloudFront 自定义错误页面中定义的任何响应规范。

如果您希望通过 CloudFront显示自定义错误消息（可能使用与网站其余部分相同的格式），则可以配置 CloudFront 为向查看者返回包含自定义错误消息的对象（例如 HTML 文件）。

**注意**  
CloudFront 无法区分您的来源返回的 HTTP 状态码 403 和请求被阻止 AWS WAF 时返回的 HTTP 状态码 403。这意味着，您无法根据 HTTP 状态代码 403 的不同原因返回不同的自定义错误页面。

有关 CloudFront 自定义错误页面的更多信息，请参阅 *Amazon CloudFront 开发者指南*中的[生成自定义错误响应](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/GeneratingCustomErrorResponses.html)。

### 多租户分配的自定义错误页面
<a name="custom-error-pages-template-distributions"></a>

对于 CloudFront 多租户分发，您可以通过以下方式配置自定义错误页面：
+ 在多租户级别：这些设置适用于使用多租户分配模板的所有租户分配
+ 通过 AWS WAF 规则-在保护包 (Web ACLs) 中定义的自定义响应优先于多租户分发和租户级别的自定义错误页面

## AWS WAF 与一起 CloudFront 用于在您自己的 HTTP 服务器上运行的应用程序
<a name="cloudfront-features-your-own-http-server"></a>

 AWS WAF 与一起使用时 CloudFront，您可以保护在任何 HTTP 网络服务器上运行的应用程序，无论是在亚马逊弹性计算云 (Amazon EC2) 中运行的网络服务器，还是您私下管理的网络服务器。您也可以配置 CloudFront 为要求在 CloudFront 和您自己的 Web 服务器之间以及查看者和 CloudFront之间使用 HTTPS。

**需要在 CloudFront 和你自己的网络服务器之间使用 HTTPS**  
要要求在 CloudFront 和您自己的网络服务器之间使用 HTTPS，您可以使用 CloudFront 自定义源功能，并为特定**来源配置源协议策略****和源域名**设置。在您的 CloudFront 配置中，您可以指定服务器的 DNS 名称以及从源中获取对象时 CloudFront 要使用的端口和协议。您还应确保自定义源服务器上的 SSL/TLS 证书与您配置的源域名相匹配。在以外使用自己的 HTTP Web 服务器时 AWS，必须使用由受信任的第三方证书颁发机构 (CA) 签名的证书，例如 Comodo 或 Symante DigiCert c。有关要求在 CloudFront 和您自己的网络服务器之间进行通信时需要 HTTPS 的更多信息，请参阅《*亚马逊 CloudFront 开发者指南*》中的 “[需要使用 HTTPS 才能 CloudFront 与您的自定义源进行通](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-cloudfront-to-custom-origin.html)信” 主题。

**要求在查看者和之间使用 HTTPS CloudFront**  
要要求在**查看者和之间使用 HTTPS CloudFront，您可以更改 CloudFront 分配中一个或多个缓存行为的查看者协议策略**。有关在观看者和之间使用 HTTPS 的更多信息 CloudFront，请参阅 *Amazon CloudFront 开发者指南 CloudFront*中的 “[观看者之间需要使用 HTTPS 才能进行通信](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html)” 主题。例如，您也可以自带 SSL 证书，以便查看者可以使用自己的域名通过 HTTPS 连接到您的 CloudFront 发行版*https://www.mysite.com*。有关更多信息，请参阅 *Amazon CloudFront 开发者指南*中的[配置备用域名和 HTTPS](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cnames-and-https-procedures.html) 主题。

对于多租户分配，HTTP 方法配置遵循此层次结构：
+ 模板级别的设置定义允许所有租户分配使用的基准 HTTP 方法
+ 租户分配可覆盖这些设置：
  + 允许的方法少于多租户分配（使用 AWS WAF 规则阻止其他方法）
  + 如果将多租户分配配置为支持更多方法，则允许使用更多方法
+ AWS WAF 无论配置如何，多租户分布和租户级别的规则都可以进一步限制 HTTP 方法 CloudFront 

## 选择 CloudFront 响应的 HTTP 方法
<a name="cloudfront-features-allowed-http-methods"></a>

创建 Amazon CloudFront 网络分配时，您可以选择要 CloudFront 处理的 HTTP 方法并将其转发到您的来源。可从以下选项中进行选择：
+ **`GET`，`HEAD`**— 您 CloudFront 只能使用从原点获取对象或获取对象标题。
+ **`GET`,`HEAD`, `OPTIONS`** — 您 CloudFront 只能使用从您的来源获取对象、获取对象标头或检索源服务器支持的选项列表。
+ **`GET`、`HEAD`、`OPTIONS`、`PUT``POST`、`PATCH`、、`DELETE`** — 您可以使用获 CloudFront 取、添加、更新和删除对象以及获取对象标题。此外，您可以执行其他 `POST` 操作，例如从 web 表格提交数据。

您还可以使用 AWS WAF 字节匹配规则语句来允许或阻止基于 HTTP 方法的请求，如中所述[字符串匹配规则语句](waf-rule-statement-type-string-match.md)。如果您想使用 CloudFront 支持的方法组合，例如`GET`和`HEAD`，则无需配置 AWS WAF 以阻止使用其他方法的请求。如果要允许组合 CloudFront 不支持的方法，例如`GET``HEAD``POST`、和，则可以配置 CloudFront 为响应所有方法，然后使用 AWS WAF 来阻止使用其他方法的请求。

有关选择 CloudFront 响应方法的更多信息，请参阅《*Amazon CloudFront 开发者指南*》中 “[您在创建或更新 Web 分配时指定的值](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html)” 主题中的 “[允许的 HTTP 方法](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesAllowedHTTPMethods)”。

**多租户分配中允许的 HTTP 方法配置**  
对于多租户分配，默认情况下，在多租户分配级别设置的 HTTP 方法配置适用于所有租户分配。如有需要，租户分配可覆盖这些设置。
+ 如果要使用 CloudFront 支持的方法组合，例如`GET`和`HEAD`，则无需配置 AWS WAF 以阻止使用其他方法的请求。
+ 如果要允许使用默认情况下 CloudFront 不支持的方法组合，例如`GET``HEAD``POST`、和，则可以配置 CloudFront 为响应所有方法，然后使用 AWS WAF 来阻止使用其他方法的请求。

在多租户分配中实施安全标头时，请考虑以下几点：
+ 模板级别的安全标头为所有租户分配提供基准保护
+ 租户分配可以：
  + 添加未在多租户分配中定义的新安全标头
  + 修改租户专用标头的值
  + 无法移除或覆盖在多租户分配级别设置的安全标头
+ 考虑使用多租户分配级别的标头实现应适用于所有租户的关键安全控制

## 日志记录注意事项
<a name="cloudfront-features-logging"></a>

标准版和多租户分发版都支持 AWS WAF 日志记录，但是日志的结构和管理方式有重要区别：


**日志记录比较**  

| 标准分配 | 多租户分配 | 
| --- | --- | 
| 每个分配一个日志配置 | 模板级别和租户级别的日志记录选项 | 
| 标准日志字段 | 其他租户标识符字段 | 
| 每个分配单个目标 | 可用于多租户分配和租户日志的单独目标 | 

## 其他资源
<a name="cloudfront-saas-additional-resources"></a>
+ 要了解有关多租户分配的更多信息，请参阅 *Amazon CloudFront 开发者指南*中的[配置分配](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html)。
+ 要了解有关 AWS WAF 与一起使用的更多信息 CloudFront，请参阅《*Amazon CloudFront 开发者指南*》中的[使用 AWS WAF 保护](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-awswaf.html)。
+ 要了解有关 AWS WAF 日志的更多信息，请参阅[保护包（web ACL）流量的日志字段](logging-fields.md)。