监控 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 上运行的 7.17 或更高版本的 Elastic Stack。

确保部署在 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_namelogs-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 将创建所需的 Identity and Access Management (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