Amazon WAF 政策 - Amazon WAFAmazon Firewall Manager、和 Amazon Shield Advanced
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon WAF 政策

在 Firew Amazon WAF all Manager 策略中,您可以指定要在资源中使用的 Amazon WAF 规则组。应用策略时,Firewall Manager 会根据您在策略中配置 Web ACL 管理的方式,在策略范围内的账户中创建 Web ACL。在策略创建的 Web ACL 中,除了您通过 Firewall Manager 定义的规则组外,个人账户管理员还可以添加规则和规则组。

Firewall Manager 如何管理 Web ACL

Firewall Manager 根据您在策略中配置 “管理未关联的网页 ACL” 设置或 API 中SecurityServicePolicyData数据类型的optimizeUnassociatedWebACL设置来创建 Web ACL

如果您启用了对未关联 Web ACL 的管理,则只有当至少一个资源使用 Web ACL 时,Firewall Manager 才会在策略范围内的账户中创建 Web ACL。当某个账户在任何时候进入策略范围时,如果至少有一个资源将使用 Web ACL,则 Firewall Manager 会自动在该账户中创建一个 Web ACL。启用对未关联 Web ACL 的管理后,Firewall Manager 会对您账户中的未关联 Web ACL 执行一次性清理。在清理过程中,Firewall Manager 会跳过您在创建后修改的所有 Web ACL,例如,如果您向 Web ACL 添加了规则组或修改了其设置。清理过程可能需要数小时时间。如果资源在 Firewall Manager 创建 Web ACL 后离开策略范围,Firewall Manager 将取消该资源与 Web ACL 的关联,但不会清理未关联的 Web ACL。只有当您在策略中首次启用对未关联的 Web ACL 的管理时,Firewall Manager 才会清理未关联的 Web ACL。

如果您不启用此选项,Firewall Manager 将不管理未关联 Web ACL,并且 Firewall Manager 会自动在策略范围内的每个账户中创建一个 Web ACL。

采样和 CloudWatch 指标

Amazon Firewall Manager 为其为 Amazon WAF 策略创建的 Web ACL 和规则组启用采样和 Amazon CloudWatch 指标。

Web ACL 命名结构

当 Firewall Manager 为策略创建 Web ACL 时,它会将该 Web ACL 命名为 FMManagedWebACLV2-policy name-timestamp。时间戳以毫秒为单位。例如,FMManagedWebACLV2-MyWAFPolicyName-1621880374078

注意

如果配置了高级自动应用层 DDoS 防护的资源属于 Amazon WAF 策略的范围,则 Firewall Manager 将无法将该 Amazon WAF 策略创建的 Web ACL 与该资源相关联。

Amazon WAF 策略中的规则组

由 Firewall Manager Amazon WAF 策略管理的 Web ACL 包含三组规则。这些规则集为 Web ACL 中的规则和规则组提供了更高级的优先级划分机制:

  • 第一个规则组,由您在 Firewall Manager Amazon WAF 策略中定义。 Amazon WAF 首先评估这些规则组。

  • 由账户经理在 Web ACL 中定义的规则和规则组。 Amazon WAF 会在中间评估任何客户托管的规则或规则组。

  • 最后一个规则组,由您在 Firewall Manager Amazon WAF 策略中定义。 Amazon WAF 最后评估这些规则组。

在每组规则中,根据规则和规则组在规则集中的优先级设置,照常 Amazon WAF 评估规则和规则组。

在策略的“最先运行的规则组”集和“最后运行的规则组”集中,您只能添加规则组。您可以使用托管规则组,由 Amazon 托管规则和 Amazon Web Services Marketplace 卖家为您创建和维护。您也可以管理和使用自己的规则组。有关所有这些操作的更多信息,请参阅规则组

如果要使用自己的规则组,请在创建 Firewall Manager Amazon WAF 策略之前创建这些规则组。有关操作指南,请参阅 管理您自己的规则组。要使用单个自定义规则,您必须定义自己的规则组,再在其中定义您的规则,然后在策略中使用该规则组。

您通过 Firewall Manager 管理的第一个和最后一个 Amazon WAF 规则组的名称分别以PREFMManaged-POSTFMManaged-开头,后跟防火墙管理器策略名称和规则组创建时间戳(以 UTC 毫秒为单位)。例如,PREFMManaged-MyWAFPolicyName-1621880555123

有关如何 Amazon WAF 评估 Web 请求的信息,请参阅Web ACL 规则和规则组评估

有关创建 Firewall Manager Amazon WAF 策略的过程,请参阅为创建 Amazon Firewall Manager 策略 Amazon WAF

Firewall Manager 为您为 Amazon WAF 策略定义的规则组启用采样和 Amazon CloudWatch 指标。

个人账户所有者可以完全控制他们添加到策略托管 Web ACL 中的任何规则或规则组的指标和采样配置。

为 Amazon WAF 策略配置日志记录

您可以为 Amazon WAF 策略启用集中日志记录,以获取有关组织内的 Web ACL 分析的流量的详细信息。日志中的信息包括从您的 Amazon 资源 Amazon WAF 收到请求的时间、有关该请求的详细信息以及每个请求与所有范围内账户匹配的规则的操作。您可以将日志发送到 Amazon Data Firehose 数据流或亚马逊简单存储服务 (S3) 存储桶。有关 Amazon WAF 日志记录的信息,请参阅《Amazon WAF 开发人员指南》记录 Amazon WAF Web ACL 流量中的。

注意

Amazon Firewall Manager 支持此选项 Amazon WAFV2,但不适用于 Amazon WAF 经典版。

日志记录目标

本节介绍您可以选择发送 Amazon WAF 策略日志的日志目的地。每个部分都提供了有关配置目标类型日志记录的指导,以及有关特定于目标类型的任何行为的信息。配置日志目标后,您可以向 Firewall Manager Amazon WAF 策略提供其规格以开始登录该目标。

创建日志记录配置后,Firewall Manager 无法查看日志故障。您应负责验证日志传输是否按预期运行。

注意

Firewall Manager 不会修改您组织的成员账户中的任何现有日志记录配置。

Amazon Data Firehose 数据流

本主题提供有关将您的网页 ACL 流量日志发送到 Amazon Data Firehose 数据流的信息。

当您启用 Amazon Data Firehose 日志记录时,Firewall Manager 会将您策略的网页 ACL 中的日志发送到您已配置存储目标的亚马逊数据 Firehose。启用日志记录后,通过 Kinesis Data Firehose 的 HTTPS 端点将每个已配置的 Web ACL 的日志 Amazon WAF 传送到配置的存储目标。在使用之前,请测试您的传输流,确保其吞吐量足以容纳组织的日志。有关如何创建亚马逊 Kinesis Data Firehose 以及查看存储日志的更多信息,请参阅什么是亚马逊数据 Firehose?

您必须拥有以下权限才能使用 Kinesis 成功启用日志记录:

  • iam:CreateServiceLinkedRole

  • firehose:ListDeliveryStreams

  • wafv2:PutLoggingConfiguration

当您在 Amazon WAF 策略上配置 Amazon Data Firehose 日志记录目标时,防火墙管理器会在防火墙管理器管理员账户中为该策略创建一个 Web ACL,如下所示:

  • Firewall Manager 会在 Firewall Manager 管理员账户中创建 Web ACL,无论该账户是否在策略的范围内。

  • Web ACL 启用了日志记录,日志名称为 FMManagedWebACLV2-Loggingpolicy name-timestamp,时间戳为 Web ACL 启用日志的 UTC 时间(以毫秒为单位)。例如,FMManagedWebACLV2-LoggingMyWAFPolicyName-1621880565180。Web ACL 没有规则组,也没有关联的资源。

  • 根据 Amazon WAF 定价指南,您需要为 Web ACL 付费。有关更多信息,请参阅Amazon WAF 定价

  • 当您删除策略时,Firewall Manager 会删除 Web ACL。

有关服务相关角色以及 iam:CreateServiceLinkedRole 权限的信息,请参阅将服务相关角色用于 Amazon WAF

有关创建传输流的更多信息,请参阅创建 Amazon Data Firehose 传送流。

Amazon Simple Storage Service 存储桶

本主题提供有关将 Web ACL 流量日志发送到 Amazon S3 存储桶的信息。

选择作为日志记录目标的存储桶必须由 Firewall Manager 管理员账户所有。有关创建用于日志记录的 Amazon S3 存储桶的要求和存储桶命名要求的信息,请参阅Amazon WAF 开发人员指南中的 Amazon 简单存储服务

最终一致性

当您对配置有 Amazon S3 日志目标的 Amazon WAF 策略进行更改时,Firewall Manager 会更新存储桶策略以添加记录所需的权限。在这样做时,Firewall Manager 会遵循亚马逊简单存储服务所遵循的 last-writer-wins 语义和数据一致性模型。如果您在 Firewall Manager 控制台中或通过 PutPolicyAPI 同时对 Amazon S3 目标进行多个策略更新,则可能无法保存某些权限。有关 Amazon S3 数据一致性模型的更多信息,请参阅 Amazon Simple Storage Service 用户指南中的 Amazon S3 数据一致性模型

向 Amazon S3 存储桶发布日志的权限

在 Amazon WAF 策略中为 Amazon S3 存储桶配置 Web ACL 流量日志需要以下权限设置。当您将 Amazon S3 配置为日志记录目标以授予服务向存储桶发布日志的权限时,Firewall Manager 会自动将这些权限附加到您的 Amazon S3 存储桶。如果您希望更精细地管理对日志和 Firewall Manager 资源的访问权限,您可以自己设置这些权限。有关管理权限的信息,请参阅IAM 用户指南中的 Amazon 资源的访问权限管理。有关 Amazon WAF 托管策略的信息,请参阅Amazon 的托管策略 Amazon WAF

{ "Version": "2012-10-17", "Id": "AWSLogDeliveryForFirewallManager", "Statement": [ { "Sid": "AWSLogDeliveryAclCheckFMS", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::aws-waf-example-bucket" }, { "Sid": "AWSLogDeliveryWriteFMS", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::aws-waf-logs-example-bucket/policy-id/AWSLogs/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

为防止跨服务混淆代理问题,您可以将 aws:SourceArnaws:SourceAccount 全局条件上下文密钥添加到存储桶的策略中。要添加这些密钥,您可以修改 Firewall Manager 在配置日志记录目标时为您创建的策略,或者如果您想要精细控制,则可以创建自己的策略。如果您将这些条件添加到日志记录目标策略中,Firewall Manager 将无法验证或监控混淆代理保护。有关混淆代理问题的更多信息,请参阅 IAM 用户指南中的混淆代理问题

当您添加 sourceAccount 添加 sourceArn 属性时,将增加存储桶策略的大小。如果要添加一长串 sourceAccount 添加 sourceArn 属性,请注意不要超过 Amazon S3 存储桶策略大小限额。

以下示例说明了如何通过在存储桶策略中使用 aws:SourceArnaws:SourceAccount 全局条件上下文键来防止混淆代理问题。member-account-id替换为组织中成员的账户 ID。

{ "Version":"2012-10-17", "Id":"AWSLogDeliveryForFirewallManager", "Statement":[ { "Sid":"AWSLogDeliveryAclCheckFMS", "Effect":"Allow", "Principal":{ "Service":"delivery.logs.amazonaws.com" }, "Action":"s3:GetBucketAcl", "Resource":"arn:aws:s3:::aws-waf-logs-example-bucket", "Condition":{ "StringEquals":{ "aws:SourceAccount":[ "member-account-id", "member-account-id" ] }, "ArnLike":{ "aws:SourceArn":[ "arn:aws:logs:*:member-account-id:*", "arn:aws:logs:*:member-account-id:*" ] } } }, { "Sid":"AWSLogDeliveryWriteFMS", "Effect":"Allow", "Principal":{ "Service":"delivery.logs.amazonaws.com" }, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::aws-waf-logs-example-bucket/policy-id/AWSLogs/*", "Condition":{ "StringEquals":{ "s3:x-amz-acl":"bucket-owner-full-control", "aws:SourceAccount":[ "member-account-id", "member-account-id" ] }, "ArnLike":{ "aws:SourceArn":[ "arn:aws:logs:*:member-account-id-1:*", "arn:aws:logs:*:member-account-id-2:*" ] } } } ] }
Amazon S3 存储桶服务器端加密

您可以启用 Amazon S3 服务器端加密,也可以在 S3 存储桶上使用 Amazon Key Management Service 客户托管密钥。如果您选择在 Amazon S3 存储桶上对 Amazon WAF 日志使用默认 Amazon S3 加密,则无需采取任何特殊操作。但是,如果您选择使用客户提供的加密密钥对静态的 Amazon S3 数据进行加密,则必须在 Amazon Key Management Service 密钥策略中添加以下权限声明:

{ "Sid": "Allow Logs Delivery to use the key", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

有关在 Amazon S3 中使用客户提供的加密密钥的信息,请参阅 Amazon Simple Storage Service 用户指南中的使用客户提供的密钥进行服务器端加密 (SSE-C)

启用日志记录

以下过程介绍如何在 Firewall Manager 控制台中为 Amazon WAF 策略启用日志记录。

为 Amazon WAF 策略启用日志记录
  1. 在启用日志记录之前,必须按以下方式配置日志记录目标资源:

    • Amazon Kinesis Data Streams — 使用你的防火墙管理器管理员账户创建亚马逊数据 Firehose。使用以前缀 aws-waf-logs- 开头的名称。例如,aws-waf-logs-firewall-manager-central。使用 PUT 源,在您执行操作的区域中创建 Data Firehose。如果您要为 Amazon 捕获日志 CloudFront,请在美国东部(弗吉尼亚北部)创建消防水带。在使用之前,请测试您的传输流,确保其吞吐量足以容纳组织的日志。有关更多信息,请参阅创建 Amazon Data Firehose 传送流

    • Amazon 简单存储服务存储桶 – 根据Amazon WAF 开发人员指南Amazon 简单存储服务主题中的指南创建 Amazon S3 存储桶。您还必须使用 向 Amazon S3 存储桶发布日志的权限 中列出的权限配置 Amazon S3 存储桶。

  2. Amazon Web Services Management Console 使用您的 Firewall Manager 管理员帐户登录,然后打开防火墙管理器控制台,网址为https://console.amazonaws.cn/wafv2/fmsv2。有关设置 Firewall Manager 管理员账户的信息,请参阅Amazon Firewall Manager 先决条件

    注意

    有关设置 Firewall Manager 管理员账户的信息,请参阅Amazon Firewall Manager 先决条件

  3. 在导航窗格中,选择安全策略

  4. 选择要为其启用日志记录的 Amazon WAF 策略。有关 Amazon WAF 日志记录的更多信息,请参阅 记录 Amazon WAF Web ACL 流量

  5. 策略详细信息选项卡的策略规则部分,选择编辑

  6. 对于日志记录配置,选择启用日志记录以打开日志记录。日志记录提供了有关 Web ACL 对流量进行分析的详细信息。选择日志记录目标,然后选择您配置的日志记录目标。必须选择名称以 aws-waf-logs- 开头的日志记录目标。有关配置 Amazon WAF 日志目标的信息,请参阅为 Amazon WAF 策略配置日志记录

  7. (可选)如果您不希望在日志中包含特定字段及其值,请编辑这些字段。选择要编辑的字段,然后选择 添加。根据需要重复操作来编辑其他字段。编辑后的字段在日志中显示为 REDACTED。例如,如果您编辑 URI 字段,则日志中的 URI 字段将为 REDACTED

  8. (可选)如果您不想向日志发送所有请求,请添加您的筛选条件和行为。在筛选日志下,对于要应用的每个筛选器,选择添加筛选条件,然后选择您的筛选条件并指定是要保留还是删除符合条件的请求。添加完筛选条件后,如果需要,可以修改默认日志记录行为。有关更多信息,请参阅 Amazon WAF 开发人员指南中的 管理 Web ACL 日志记录

  9. 选择下一步

  10. 查看您的设置,然后选择保存以保存对策略的更改。

禁用日志记录

以下过程介绍如何在 Firewall Manager 控制台中禁用 Amazon WAF 策略的日志记录。

禁用 Amazon WAF 策略的日志记录
  1. Amazon Web Services Management Console 使用您的 Firewall Manager 管理员帐户登录,然后打开防火墙管理器控制台,网址为https://console.amazonaws.cn/wafv2/fmsv2。有关设置 Firewall Manager 管理员账户的信息,请参阅Amazon Firewall Manager 先决条件

    注意

    有关设置 Firewall Manager 管理员账户的信息,请参阅Amazon Firewall Manager 先决条件

  2. 在导航窗格中,选择安全策略

  3. 选择要禁用日志记录的 Amazon WAF 策略。

  4. 策略详细信息选项卡的策略规则部分,选择编辑

  5. 对于日志配置状态,请选择禁用

  6. 选择下一步

  7. 查看您的设置,然后选择保存以保存对策略的更改。