监控 Web 应用程序防火墙 (WAF) 日志

编辑

在本节中,您将学习如何使用 Amazon Data Firehose 将 AWS WAF 事件从 AWS 发送到您的 Elastic Stack。

您将完成以下步骤

  • 选择一个与 WAF 兼容的资源(例如,CloudFront 分配)
  • 在 Amazon Data Firehose 中创建交付流
  • 创建 Web 访问控制列表 (ACL) 以生成 WAF 日志
  • 设置日志记录,以使用 Firehose 流将日志转发到 Elastic Stack
  • 在 Kibana 中可视化您的 WAF 日志
开始之前
编辑

我们假设您已经拥有

  • 一个具有从 AWS 拉取必要数据的权限的 AWS 账户。
  • 一个使用我们托管在 Elastic Cloud 上的 Elasticsearch 服务的部署。该部署包括一个用于存储和搜索您的数据的 Elasticsearch 集群,以及用于可视化和管理您的数据的 Kibana。AWS Data Firehose 仅适用于在 Elastic Cloud 上运行的 Elastic Stack 7.17 或更高版本。

请确保部署在 AWS 上,因为 Amazon Data Firehose 交付流专门连接到需要在 AWS 上的端点。

步骤 1:在 Kibana 中安装 AWS 集成
编辑
  1. 在主菜单中找到集成,或使用全局搜索字段
  2. 浏览目录以查找 AWS 集成。
  3. 导航到设置选项卡,然后单击安装 AWS 资产
步骤 2:在 Amazon Data Firehose 中创建交付流
编辑
  1. 转到 AWS 控制台并导航到 Amazon Data Firehose。
  2. 单击创建 Firehose 流,然后选择您的 Firehose 流的源和目标。除非您从 Kinesis Data Streams 流式传输数据,否则将源设置为 Direct PUT,并将目标设置为 Elastic
  3. 提供一个有意义的Firehose 流名称,以便您稍后识别此交付流。您的 Firehose 名称必须以 aws-waf-logs- 前缀开头,否则它稍后不会显示。

对于高级用例,可以通过调用自定义 Lambda 函数来转换源记录。使用 Elastic 集成时,这不应该是必需的。

步骤 3:指定您的 Firehose 流的目标设置
编辑
  1. 目标设置面板中,指定以下设置

    • Elastic 端点 URL:输入您的 Elasticsearch 集群的 Elastic 端点 URL。要查找 Elasticsearch 端点,请转到 Elastic Cloud 控制台,导航到“集成”页面,然后选择连接详细信息。这是一个示例,说明它看起来的样子:https://my-deployment.es.us-east-1.aws.elastic-cloud.com
    • API 密钥:输入编码的 Elastic API 密钥。要创建 API 密钥,请转到 Elastic Cloud 控制台,导航到“集成”页面,选择连接详细信息,然后单击创建和管理 API 密钥。如果您使用具有限制权限的 API 密钥,请确保查看索引权限,以为您将在此交付流中使用的索引提供至少“auto_configure”&“write”权限。
    • 内容编码:为了获得更好的网络效率,请将内容编码设置为 GZIP。
    • 重试持续时间:确定 Firehose 在发生错误时继续重试请求的时间。60-300 秒的持续时间应适合大多数用例。
    • es_datastream_name: logs-aws.waf-default
步骤 4:创建 Web 访问控制列表
编辑

要创建新的 Web 访问控制列表 (ACL),请按照以下步骤操作

  1. 转到 AWS 控制台并导航到WAF & Shield页面。
  2. 通过输入资源类型、区域和名称来描述 Web ACL。
  3. 将其关联到 AWS 资源。如果您没有现有资源,您可以创建 Web ACL 并将其附加到多个 AWS 资源

    • CloudFront 分配
    • 应用程序负载均衡器
    • Amazon API Gateway REST API
    • Amazon App Runner 服务
    • AWS AppSync GraphQL API
    • Amazon Cognito 用户池
    • AWS Verified Access 实例
  4. 从 AWS 管理的规则组中的免费规则组列表中添加 1 或 2 个规则。将所有其他设置保留为默认值。
  5. 通过保留默认值来设置规则优先级。
  6. 通过保留默认值来配置指标。
  7. 查看并创建 Web ACL。
步骤 5:设置日志记录
编辑
  1. 转到您在上一步中创建的 Web ACL。
  2. 打开日志记录和指标部分,然后编辑以下设置

    • 日志记录目标:选择“Amazon Data Firehose 流”
    • Amazon Data Firehose 流:选择您在步骤 2 中创建的 Firehose 流。

WAF 创建所需的身份和访问管理 (IAM) 角色。如果您的 Firehose 流名称未出现在列表中,请确保您为该流选择的名称以 aws-waf-logs- 开头,如 AWS 命名约定所述。

步骤 6:在 Kibana 中可视化您的 WAF 日志
编辑

您现在可以登录到您的 Elastic Stack,以检查 WAF 日志是否在流动。要生成日志,您可以使用 cURL 向您的测试 CloudFront 分配发送 HTTP 请求。

curl -i https://<your cloudfront distribution>.cloudfront.net

要保持稳定的日志流,您可以使用 watch -n 5 每 5 秒重复该命令。

watch -n 5 curl -i https://<your cloudfront distribution>.cloudfront.net

导航到 Kibana,并在您的 Elastic Stack 中可视化第一个 WAF 日志。

Firehose WAF logs in Kibana