管理 AWS WAF Web ACL - AWS App Runner

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

管理 AWS WAF Web ACL

使用以下方法之一管理您的 App Runner 服务的 AWS WAF 网页 ACL:

应用程序运行器控制台

在 App Runner 控制台上创建服务更新现有服务时,可以关联或取消关联 AWS WAF Web ACL。

注意
  • 一个 App Runner 服务只能与一个 Web ACL 关联。但是,除了其他 AWS 资源之外,您还可以将一个 Web ACL 与多个 App Runner 服务相关联。

  • 在关联 Web ACL 之前,请务必更新您的 IAM 权限 AWS WAF。有关更多信息,请参阅 权限

关联 AWS WAF Web ACL

重要

与 WAF Web ACL 关联的 App Runner 私有服务的源 IP 规则不符合基于 IP 的规则。这是因为我们目前不支持将请求源 IP 数据转发到与 WAF 关联的 App Runner 私有服务。如果您的 App Runner 应用程序需要源 IP/CIDR 传入流量控制规则,则必须对私有端点使用安全组规则,而不是 WAF Web ACL。

关联 AWS WAF Web ACL
  1. 打开 App Runner 控制台,然后在 “区域” 列表中,选择您的 AWS 区域。

  2. 根据您是在创建还是更新服务,执行以下步骤之一:

    • 如果您要创建新服务,请选择创建 App Runner 服务,然后转到配置服务

    • 如果您要更新现有服务,请选择 “配置” 选项卡,然后在 “配置服务” 下选择 “编辑”

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

  4. 选择 “激活” 切换按钮以查看选项。

    App Runner 控制台布局,显示了 Web 应用程序防火墙选项。
  5. 执行下列步骤之一:

    • 要关联现有 Web ACL,请执行以下操作:从 “选择要与 App Runner 服务关联的 Web ACL” 表中选择所需的 Web ACL。

    • 要创建新的 Web ACL,请执行以下操作:选择创建 Web ACL 以使用 AWS WAF 控制台创建新的 Web ACL。有关更多信息,请参阅《AWS WAF 开发者指南》中的创建 Web ACL

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

      2. 选择所需的 Web ACL。

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

  7. 要验证 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

您可以通过更新 App Runner 服务来取消与不再需要的 AWS WAF Web ACL 的关联。

解除与 AWS WAF Web ACL 的关联
  1. 打开 App Runner 控制台,然后在 “区域” 列表中,选择您的 AWS 区域。

  2. 前往要更新的服务的 “配置” 选项卡,然后在 “配置服务” 下选择 “编辑”

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

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

  5. 选择确认。Web ACL 已与您的 App Runner 服务断开关联。

    注意
    • 如果要将您的服务与其他 Web ACL 关联,请从 “选择 Web ACL” 表中选择一个 Web ACL。App Runner 取消与当前 Web ACL 的关联,并启动与所选网络 ACL 关联的进程。

    • 如果没有其他 App Runner 服务或资源使用已取消关联的 Web ACL,请考虑删除 Web ACL。否则,您将继续承担费用。有关定价的更多信息,请参阅AWS WAF 定价。有关如何删除 Web ACL 的说明,请参阅 AWS WAF API 参考中的 DeleteWebACL

    • 您无法删除与其他活跃的 App Runner 服务或其他资源关联的 Web ACL。

AWS CLI

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

AWS WAF 当您为处于无效状态的 App Runner 服务调用以下 AWS WAF API 之一时,会返回WAFNonexistentItemException错误:

  • AssociateWebACL

  • DisassociateWebACL

  • GetWebACLForResource

您的 App Runner 服务的无效状态包括:

  • CREATE_FAILED

  • DELETE_FAILED

  • DELETED

  • OPERATION_IN_PROGRESS

    注意

    OPERATION_IN_PROGRESS仅当你的 App Runner 服务被删除时,状态才无效。

有关 AWS WAF 公共 API 的更多信息,请参阅 AWS WAF API 参考指南

注意

更新您的 IAM 权限 AWS WAF。有关更多信息,请参阅 权限

使用关联 AWS WAF Web ACL AWS CLI

重要

与 WAF Web ACL 关联的 App Runner 私有服务的源 IP 规则不符合基于 IP 的规则。这是因为我们目前不支持将请求源 IP 数据转发到与 WAF 关联的 App Runner 私有服务。如果您的 App Runner 应用程序需要源 IP/CIDR 传入流量控制规则,则必须对私有端点使用安全组规则,而不是 WAF Web ACL。

关联 AWS WAF Web ACL
  1. 使用您对服务的首选规则操作集AllowBlock对服务的 Web 请求,为您的服务创建 Web ACL。 AWS WAF 有关 AWS WAF API 的更多信息,请参阅 AWS WAF API 参考指南中的 CreateWebACL

    例 创建 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.
  2. 使用associate-web-acl AWS WAF 公共 API 将您创建的 Web ACL 与 App Runner 服务相关联。有关 AWS WAF API 的更多信息,请参阅 AWS WAF API 参考指南中的 AssociateWebACL

    注意

    创建 Web ACL 时,经过一小段时间后,Web ACL 才会完全传播并可用于 App Runner。传播时间可以从几秒钟到几分钟不等。 AWS WAF WAFUnavailableEntityException当您尝试在 Web ACL 完全传播之前将其关联时,会返回。

    如果您在 Web ACL 完全传播之前刷新浏览器或离开了 App Runner 控制台,则关联将失败。但是,您可以在 App Runner 控制台中导航。

    例 关联 Web ACL-请求
    aws wafv2 associate-web-acl --resource-arn <apprunner_service_arn> --web-acl-arn <web_acl_arn> --region <region>
  3. 使用get-web-acl-for-resource AWS WAF 公共 API 验证 Web ACL 是否与您的 App Runner 服务相关联。有关 AWS WAF API 的更多信息,请参阅 AWS WAF API 参考指南ForResource中的 GetWebACL

    例 验证资源的 Web ACL-请求
    aws wafv2 get-web-acl-for-resource --resource-arn <apprunner_service_arn> --region <region>

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

使用删除 AWS WAF Web ACL AWS CLI

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

删除 AWS WAF Web ACL
  1. 使用disassociate-web-acl AWS WAF 公共 API 解除网页 ACL 与您的 App Runner 服务的关联。有关 AWS WAF API 的更多信息,请参阅 AWS WAF API 参考指南中的 DisassociateWebACL

    例 取消关联 Web ACL-请求
    aws wafv2 disassociate-web-acl --resource-arn <apprunner_service_arn> --region <region>
  2. 使用get-web-acl-for-resource AWS WAF 公共 API 验证 Web ACL 是否已与您的 App Runner 服务断开关联。

    例 验证 Web ACL 是否已解除关联-请求
    aws wafv2 get-web-acl-for-resource --resource-arn <apprunner_service_arn> --region <region>

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

  3. 使用delete-web-acl AWS WAF 公共 API 删除已取消关联的 Web ACL。有关 AWS WAF API 的更多信息,请参阅 AWS WAF API 参考指南中的 DeleteWebACL

    例 删除 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>
  4. 使用list-web-acl AWS WAF 公共 API 验证网页 ACL 是否已删除。有关 AWS WAF API 的更多信息,请参阅 AP AWS WAF I 参考指南中的 ListWebACL

    例 验证 Web ACL 是否已删除-请求
    aws wafv2 list-web-acls --scope REGIONAL --region <region>

    已删除的 Web ACL 已不再列出。

    注意

    如果网络 ACL 与其他活跃的 App Runner 服务或其他资源(例如 Amazon Cognito 用户池)相关联,则无法删除该网络 ACL。

列出与 Web ACL 关联的 App Runner 服务

一个 Web ACL 可以与多个 App Runner 服务和其他资源相关联。使用list-resources-for-web-acl AWS WAF 公共 API 列出与 Web ACL 关联的 App Runner 服务。有关 AWS WAF API 的更多信息,请参阅 AWS WAF API 参考指南中的 ListResourcesForWebACL

例 列出与 Web ACL 关联的 App Runner 服务-请求
aws wafv2 list-resources-for-web-acl --web-acl-arn <WEB_ACL_ARN> --resource-type APP_RUNNER_SERVICE --region <REGION>
例 列出与 Web ACL 关联的 App Runner 服务-响应

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

{ "ResourceArns": [] }
例 列出与 Web ACL 关联的 App Runner 服务-响应

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

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

测试和记录 AWS WAF Web ACL

当您在 Web ACL 中将规则操作设置为 C ou nt 时, AWS WAF 会将该请求添加到与该规则匹配的请求计数中。要使用您的 App Runner 服务测试 Web ACL,请将规则操作设置为 C ou nt,然后考虑与每条规则匹配的请求量。例如,您为Block操作设置了一条规则,该规则与您确定为普通用户流量的大量请求相匹配。在这种情况下,您可能需要重新配置规则。有关更多信息,请参阅《AWS WAF 开发者指南》中的测试和调整 AWS WAF 保护措施

您还可以配置 AWS WAF 为将请求标头记录到亚马逊 CloudWatch 日志组、亚马逊简单存储服务 (Amazon S3) 存储桶或亚马逊数据 Firehose。有关更多信息,请参阅 AWS WAF 开发人员指南 中的记录 Web ACL 流量

要访问与您的 App Runner 服务关联的 Web ACL 相关的日志,请参阅以下日志字段:

  • httpSourceName: 包含 APPRUNNER

  • httpSourceId: 包含 customeraccountid-apprunnerserviceid

有关更多信息,请参阅《AWS WAF 开发人员指南》中的日志示例

重要

与 WAF Web ACL 关联的 App Runner 私有服务的源 IP 规则不符合基于 IP 的规则。这是因为我们目前不支持将请求源 IP 数据转发到与 WAF 关联的 App Runner 私有服务。如果您的 App Runner 应用程序需要源 IP/CIDR 传入流量控制规则,则必须对私有端点使用安全组规则,而不是 WAF Web ACL。