日志记录目标 - AWS WAF、AWS Firewall Manager 和 AWS Shield Advanced

日志记录目标

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

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

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

Amazon Data Firehose 数据流

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

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

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

  • iam:CreateServiceLinkedRole

  • firehose:ListDeliveryStreams

  • wafv2:PutLoggingConfiguration

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

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

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

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

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

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

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

Amazon Simple Storage Service 存储桶

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

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

最终一致性

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

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

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

{ "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-LOGGING-BUCKET-SUFFIX" }, { "Sid": "AWSLogDeliveryWriteFMS", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::aws-waf-logs-LOGGING-BUCKET-SUFFIX/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 全局条件上下文键来防止混淆代理问题。将成员账户 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-LOGGING-BUCKET-SUFFIX", "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-LOGGING-BUCKET-SUFFIX/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 存储桶上使用 AWS Key Management Service 客户托管的密钥。如果您选择在 Amazon S3 存储桶上对 AWS WAF 日志使用默认 Amazon S3 加密,则无需采取任何特殊操作。但是,如果您选择使用客户提供的加密密钥对 Amazon S3 静态数据进行加密,则必须在 AWS 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)