

AWS App Runner 从 2026 年 4 月 30 日起，将不再向新客户开放。如果您想使用 App Runner，请在该日期之前注册。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [AWS App Runner 可用性变更](https://docs.aws.amazon.com/apprunner/latest/dg/apprunner-availability-change.html)。

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

# 管理 AWS WAF 网页 ACLs
<a name="waf-manage"></a>

使用以下方法之一管理您 ACLs 的 App Runner 服务的 AWS WAF 网页：
+ [应用程序运行器控制台](#waf-manage.console)
+ [AWS CLI](#waf-manage.api)

## 应用程序运行器控制台
<a name="waf-manage.console"></a>

在 App Runner 控制台上[创建服务](manage-create.md)或[更新现有](manage-configure.md)服务时，可以关联或取消关联 AWS WAF Web ACL。

**注意**  
一个 App Runner 服务只能与一个 Web ACL 关联。但是，除了其他 AWS 资源之外，您还可以将一个 Web ACL 与多个 App Runner 服务相关联。
在关联 Web ACL 之前，请务必更新您的 IAM 权限 AWS WAF。有关更多信息，请参阅 [ 权限](waf.md#waf.permissions)。

### 关联 AWS WAF Web ACL
<a name="waf-manage.console.add"></a>

**重要**  
与 WAF 网络关联的 App Runner 私有服务的源 IP 规则 ACLs *不符合基于 IP 的规则*。这是因为我们目前不支持将请求源 IP 数据转发到与 WAF 关联的 App Runner 私有服务。如果您的 App Runner 应用程序需要源 IP/CIDR 传入流量控制规则，则必须[对私有端点使用安全组规则](network-pl-manage.md)，而不是 WAF Web。 ACLs

**关联 AWS WAF Web ACL**

1. 打开 [App Runner 控制台](https://console.aws.amazon.com/apprunner)，然后在 “**区域**” 列表中，选择您的 AWS 区域。

1. 根据您是在创建还是更新服务，执行以下步骤之一：
   + 如果您要创建新服务，请选择**创建 App Runner 服务**，然后转到**配置服务**。
   + 如果您要更新现有服务，请选择 “**配置**” 选项卡，然后在 “**配置服务**” 下选择 **“编辑”**。

1. 转到 “**安全**” 下**的 Web 应用程序防火墙**。

1. 选择 “**激活**” 切换按钮以查看选项。  
![\[App Runner 控制台布局，显示了 Web 应用程序防火墙选项。\]](http://docs.aws.amazon.com/zh_cn/apprunner/latest/dg/images/console-waf.png)

1. 执行下列步骤之一：
   + **要关联现有 Web ACL**，请执行以下操作：从 “选择要与 App Runner 服务关联**的 Web ACL”** 表中选择所需的 Web ACL。
   + **要创建新的 Web ACL**，请执行以下操作：选择**创建 Web ACL** 以使用 AWS WAF 控制台创建新的 Web ACL。有关更多信息，请参阅《*AWS WAF 开发者指南》*中的[创建 Web ACL](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-creating.html)。

     1. 选择 “刷新” 按钮，在 “**选择 Web ACL” 表中查看新创建的 Web ACL**。

     1. 选择所需的 Web ACL。

1. 如果您要创建新服务，请选择 “**下一步**”；如果要更新现有服务，请选择 “**保存更改**”。选定的 Web ACL 与您的 App Runner 服务相关联。

1. 要验证 Web ACL 关联，请选择服务的**配置**选项卡，然后转到**配置服务**。滚动到 “**安全**” 下的 **Web 应用程序防火墙**，查看与您的服务关联的 Web ACL 的详细信息。
**注意**  
创建 Web ACL 时，经过一小段时间后，Web ACL 才会完全传播并可用于 App Runner。传播时间可以从几秒钟到几分钟不等。 AWS WAF `WAFUnavailableEntityException`当您尝试在 Web ACL 完全传播之前将其关联时，会返回。  
如果您在 Web ACL 完全传播之前刷新浏览器或离开了 App Runner 控制台，则关联将失败。但是，您可以在 App Runner 控制台中导航。

### 取消关联 Web ACL AWS WAF
<a name="waf-manage.console.disassociate"></a>

您可以通过[更新](manage-configure.md) App Runner 服务来取消关联不再需要的 AWS WAF 网站 ACl 。

**取消与 Web 的 AWS WAF 关联 ACl**

1. 打开 [App Runner 控制台](https://console.aws.amazon.com/apprunner)，然后在 “**区域**” 列表中，选择您的 AWS 区域。

1. 前往要更新的服务的 “**配置**” 选项卡，然后在 “**配置服务****” 下选择 “编辑”**。

1. 转到 “**安全**” 下**的 Web 应用程序防火墙**。

1. 禁用 “**激活**” 切换按钮。您会收到一条确认删除的消息。

1. 选择**确认**。Web ACL 已与您的 App Runner 服务断开关联。
**注意**  
如果要将您的服务与其他 Web ACL 关联，请从 “选择 Web ACL” 表**中选择一个 Web ACL**。App Runner 取消与当前 Web ACL 的关联，并启动与所选网络 ACL 关联的进程。
如果没有其他 App Runner 服务或资源使用已取消关联的 Web ACL，请考虑删除 Web ACL。否则，您将继续承担费用。有关定价的更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing)。有关如何删除 Web ACL 的说明，请参阅 *AWS WAF API 参考*中的 [DeleteWebACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_DeleteWebACL.html)。
您无法删除与其他活跃的 App Runner 服务或其他资源关联的 Web ACL。

## AWS CLI
<a name="waf-manage.api"></a>

您可以使用 AWS WAF 公共 APIs权限来关联或取消关联 AWS WAF Web ACL。要关联或取消关联 Web ACL 的 App Runner 服务必须处于有效状态。

AWS WAF 当您为处于无效状态的 App Runner 服务调 AWS WAF APIs 用以下方法之一时，会返回`WAFNonexistentItemException`错误：
+  `AssociateWebACL` 
+  `DisassociateWebACL` 
+  `GetWebACLForResource` 

您的 App Runner 服务的无效状态包括：
+  `CREATE_FAILED` 
+  `DELETE_FAILED` 
+  `DELETED` 
+  `OPERATION_IN_PROGRESS ` 
**注意**  
`OPERATION_IN_PROGRESS`仅当你的 App Runner 服务被删除时，状态才无效。

有关 AWS WAF 公共的更多信息 APIs，请参阅 [https://docs.aws.amazon.com/waf/latest/APIReference/Welcome.html](https://docs.aws.amazon.com/waf/latest/APIReference/Welcome.html)。

**注意**  
更新您的 IAM 权限 AWS WAF。有关更多信息，请参阅 [ 权限](waf.md#waf.permissions)。

### 使用关联 AWS WAF Web ACL AWS CLI
<a name="waf-manage.api.add"></a>

**重要**  
与 WAF 网络关联的 App Runner 私有服务的源 IP 规则 ACLs *不符合基于 IP 的规则*。这是因为我们目前不支持将请求源 IP 数据转发到与 WAF 关联的 App Runner 私有服务。如果您的 App Runner 应用程序需要源 IP/CIDR 传入流量控制规则，则必须[对私有端点使用安全组规则](network-pl-manage.md)，而不是 WAF Web。 ACLs

**关联 AWS WAF Web ACL**

1. 使用您的首选规则操作集`Allow`或`Block`对服务的 Web 请求，为您的服务创建 Web ACL。 AWS WAF 有关更多信息 AWS WAF APIs，请参阅 *AWS WAF API 参考指南*中的 [CreateWebACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_CreateWebACL.html)。  
**Example 创建 Web ACL-请求**  

   ```
   aws wafv2
   create-web-acl
   --region <region>
   --name <web-acl-name>
   --scope REGIONAL
   --default-action Allow={}
   --visibility-config <file-name.json>
   # This is the file containing the WAF web ACL rules.
   ```

1. 使用`associate-web-acl` AWS WAF 公共 API 将您创建的 Web ACL 与 App Runner 服务相关联。有关更多信息 AWS WAF APIs，请参阅 *AWS WAF API 参考指南*中的 [AssociateWebACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html)。
**注意**  
创建 Web ACL 时，经过一小段时间后，Web ACL 才会完全传播并可用于 App Runner。传播时间可以从几秒钟到几分钟不等。 AWS WAF `WAFUnavailableEntityException`当您尝试在 Web ACL 完全传播之前将其关联时，会返回。  
如果您在 Web ACL 完全传播之前刷新浏览器或离开了 App Runner 控制台，则关联将失败。但是，您可以在 App Runner 控制台中导航。  
**Example 关联 Web ACL-请求**  

   ```
   aws wafv2 associate-web-acl
   --resource-arn <apprunner_service_arn>
   --web-acl-arn <web_acl_arn>
   --region <region>
   ```

1. 使用`get-web-acl-for-resource` AWS WAF 公共 API 验证 Web ACL 是否与您的 App Runner 服务相关联。有关更多信息 AWS WAF APIs，请参阅 *AWS WAF API 参考指南*中的[GetWebACLFor资源](https://docs.aws.amazon.com/waf/latest/APIReference/API_GetWebACLForResource.html)。  
**Example 验证资源的 Web ACL-请求**  

   ```
   aws wafv2 get-web-acl-for-resource
   --resource-arn <apprunner_service_arn>
   --region <region>
   ```

   如果没有与您的服务 ACLs 关联的 Web，您会收到一条空白的响应。

### 使用删除 AWS WAF Web ACL AWS CLI
<a name="waf-manage.api.disassociate"></a>

如果 AWS WAF Web ACL 与 App Runner 服务相关联，则无法将其删除。

**删除 AWS WAF Web ACL**

1. 使用`disassociate-web-acl` AWS WAF 公共 API 解除网页 ACL 与您的 App Runner 服务的关联。有关更多信息 AWS WAF APIs，请参阅 *AWS WAF API 参考指南*中的 [DisassociateWebACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_DisassociateWebACL.html)。  
**Example 解除关联 Web ACL-请求**  

   ```
   aws wafv2 disassociate-web-acl
   --resource-arn <apprunner_service_arn>
   --region <region>
   ```

1. 使用`get-web-acl-for-resource` AWS WAF 公共 API 验证 Web ACL 是否已与您的 App Runner 服务断开关联。  
**Example 验证 Web ACL 是否已解除关联-请求**  

   ```
   aws wafv2 get-web-acl-for-resource
   --resource-arn <apprunner_service_arn>
   --region <region>
   ```

   未列出您的 App Runner 服务的已取消关联的 Web ACL。如果没有与您的服务 ACLs 关联的 Web，您会收到一条空白的响应。

1. 使用`delete-web-acl` AWS WAF 公共 API 删除已取消关联的 Web ACL。有关更多信息 AWS WAF APIs，请参阅 *AWS WAF API 参考指南*中的 [DeleteWebACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_DeleteWebACL.html)。  
**Example 删除 Web ACL-请求**  

   ```
   aws wafv2 delete-web-acl
   --name <web_acl_name>
   --scope REGIONAL
   --id <web_acl_id>
   --lock-token <web_acl_lock_token>
   --region <region>
   ```

1. 使用`list-web-acl` AWS WAF 公共 API 验证网页 ACL 是否已删除。有关的更多信息 AWS WAF APIs，请参阅 *AWS WAF API 参考指南[ListWebACLs](https://docs.aws.amazon.com/waf/latest/APIReference/API_ListWebACLs.html)*中的。  
**Example 验证 Web ACL 是否已删除-请求**  

   ```
   aws wafv2 list-web-acls 
   --scope REGIONAL
   --region <region>
   ```

   已删除的 Web ACL 已不再列出。
**注意**  
如果网络 ACL 与其他活跃的 App Runner 服务或其他资源（例如 Amazon Cognito 用户池）相关联，则无法删除该网络 ACL。

### 列出与 Web ACL 关联的 App Runner 服务
<a name="waf-manage.api.list"></a>

一个 Web ACL 可以与多个 App Runner 服务和其他资源相关联。使用`list-resources-for-web-acl` AWS WAF 公共 API 列出与 Web ACL 关联的 App Runner 服务。有关更多信息 AWS WAF APIs，请参阅 *AWS WAF API 参考指南*中的 [ListResourcesForWebACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_ListResourcesForWebACL.html)。

**Example 列出与 Web ACL 关联的 App Runner 服务-请求**  

```
aws wafv2 list-resources-for-web-acl
--web-acl-arn <WEB_ACL_ARN>
--resource-type APP_RUNNER_SERVICE
--region <REGION>
```

**Example 列出与 Web ACL 关联的 App Runner 服务-响应**  
以下示例说明了没有与 Web ACL 关联的 App Runner 服务时的响应。  

```
{
  "ResourceArns": []
}
```

**Example 列出与 Web ACL 关联的 App Runner 服务-响应**  
以下示例说明了存在与 Web ACL 关联的 App Runner 服务时的响应。  

```
{
  "ResourceArns": [
    "arn:aws:apprunner:<region>:<aws_account_id>:service/<service_name>/<service_id>"
  ]
}
```

## 测试和记录 AWS WAF 网页 ACLs
<a name="waf-manage.testing-and-logging"></a>

当您在 Web ACL 中将规则操作设置为 C **ou** nt 时， AWS WAF 会将该请求添加到与该规则匹配的请求计数中。要使用 App Runner 服务测试 Web ACL，请将规则操作设置为 C **ou** nt，然后考虑与每条规则匹配的请求量。例如，您为`Block`操作设置了一条规则，该规则与您确定为普通用户流量的大量请求相匹配。在这种情况下，您可能需要重新配置规则。有关更多信息，请参阅《*AWS WAF 开发者指南》*中的[测试和调整 AWS WAF 保护措施](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-testing.html)。

您还可以配置 AWS WAF 为将请求标头记录到亚马逊 CloudWatch 日志组、亚马逊简单存储服务 (Amazon S3) 存储桶或亚马逊数据 Firehose。有关更多信息，请参阅 *AWS WAF 开发人员指南* 中的[记录 Web ACL 流量](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html)。

要访问与您的 App Runner 服务关联的 Web ACL 相关的日志，请参阅以下日志字段：
+ `httpSourceName`: 包含 `APPRUNNER` 
+ `httpSourceId`: 包含 `customeraccountid-apprunnerserviceid`

有关更多信息，请参阅《*AWS WAF 开发人员指南》*中的[日志示例](https://docs.aws.amazon.com/waf/latest/developerguide/logging-examples.html)。

**重要**  
与 WAF 网络关联的 App Runner 私有服务的源 IP 规则 ACLs *不符合基于 IP 的规则*。这是因为我们目前不支持将请求源 IP 数据转发到与 WAF 关联的 App Runner 私有服务。如果您的 App Runner 应用程序需要源 IP/CIDR 传入流量控制规则，则必须[对私有端点使用安全组规则](network-pl-manage.md)，而不是 WAF Web。 ACLs