手把后教你如何使用 Elasticsearch 进行 WAF 日志分析

2021-06-28 15:30

AWS WAF是一款Web应用程序防火墙,能够帮助我们保护Web应用程序免受各类常见恶意活动的影响,保障应用程序始终拥有合理的可用性、安全性与资源需求水平。AWS WAF还提供可自定义的Web安全规则,允许用户根据实际需要允许或阻止Web应用程序访问特定流量。


Amazon Elasticsearch Service (Amazon ES) 是一种托管服务,可以让您轻松在 Elasticsearch 云中部署、操作和扩展 AWS 集群。Elasticsearch 是一款流行的开源搜索和分析引擎,适用于日志分析、实时应用程序监控、点击流分析等使用案例。


AWS WAF 提供请求日志来记录相关 WebACL 流量的详细信息,日志信息包括被请求的 AWS 资源,每个请求的详细 HTTP 信息,以及每个请求匹配的规则和动作,具体日志字段请参考官方文档

https://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/logging.html

启用日志记录后,AWS WAF 的请求日志将通过用户配置的 Amazon Kinesis Data Firehose 传输到目标存储位置,例如 S3 Elasticsearch 等。


Note用来接收 WAF 请求日志的 Amazon Kinesis Data Firehose,名称必须以 aws-waf-logs-开头。为用于保护Amazon CloudFront WAF WebACL 启用日志,必须在美东区域(弗吉尼亚北部 - us-east-1)中创建 Firehose为用于保护 ALBAPI Gateway 等区域性资源的 WAF WebACL 启用日志,必须在相对应的区域中创建 Firehose


本文档将以用于保护 CloudFront WAF WebACL 举例,介绍如何为 WAF 启用日志,以及使用 Elasticsearch 分析日志。其中如何创建Elasticsearch服务,请参考步骤1:创建 Amazon ES


创建AWS Elasticseatch

如何创建Elasticsearch服务,请参考步骤1:创建 Amazon ES 域

https://docs.aws.amazon.com/zh_cn/elasticsearch-service/latest/developerguide/es-gsg-create-domain.html

重要:这是一个用于配置测试 Amazon Elasticsearch Service (Amazon ES) 域的简明教程。请勿使用此过程创建生产域。有关相同过程的综合版本,请参阅创建和管理 Amazon Elasticsearch Service 域

https://docs.aws.amazon.com/zh_cn/elasticsearch-service/latest/developerguide/es-createupdatedomains.html


创建Kinesis Data Firehose

进入位于us-east-1(弗吉尼亚北部区域) Kinesis Data Firehose控制台,并点击 创建传输流;


1.新的传输流页面上:


  • 传输流名称:aws-waf-logs-demo

  • 源:Direct PUT或其他源(默认)

  • 点击【下一步】按钮。

                                             


2.处理记录页面上:


  • 数据转换:禁用(默认)

  • 记录格式转换:禁用(默认)

  • 点击【下一步】按钮。



3.选择一个目标页面上:


  • 目标:Amazon Elasticsearch

  • 域:选择您自己创建的Elasticsearch域

  • 索引:awswaf

  • 索引轮换:每天(按需选择即可)

  • 目标VPC连接:由于我测试是使用公共终端节点的 Amazon ES 域,因此不需要配置VPC、子网以及安全组(如有开启,请选择Elasticearch所在的VPC和子网)。

  • 备份模式:仅失败的记录,

  • 备份 S3 存储桶:选择自行创建的S3桶

  • 备份 S3 存储桶前缀:awswaflog

  • 点击【下一步】按钮。



4.配置设置页面上:


  • 缓冲区大小:1MiB

  • 缓冲时间间隔:60s

  • 权限 - IAM角色:创建或更新IAM角色(默认),其他保留缺省值

  • 点击【下一步】按钮。



5.审核页面上,点击【创建传输流】按钮。


这个过程大约需要3分钟。



启用WAF日志

1.在 Kinesis Data Firehose 创建完成后,进入 AWS WAF 控制台的Web ACL界面

2.选择“ Global(CloudFront) ”。

3.点击您的WebACL进入详细界面,如没有WebACL,请参考官方文档开始使用 AWS WAF

https://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/getting-started.html

4.点击并进入“Logging and Metrics”页面。

5.点击【Enable logging】按钮。

6.点击【Select a delivery stream】按钮,选择上一步创建的Kinesis Data Firehose。

7.其他配置保留缺省值,点击【Save】按钮。


使用 Elasticsearch 分析 WAF 日志

首先需要在 Kibana 中,为用于传送 WAF 日志的 Kinesis Data Firehose IAM Role 添加权限。

进入上一步中创建的kinesis data firehose的详细页面,找到权限部分,点击IAM角色,打开IAM控制台,并把这个角色的ARN拷贝下来。


进入Elasticsearch控制台,点击图中链接登录 Kibana

1.    输入用户名和密码,点开左上角的菜单,

2.    点击左边的“Security”选项,

3.    点击左边的“Roles”选项,在右边找到“all_access” role 点击“all_access”,并点击“Mapped users”页面,点击【Manage mapping】按钮,

4.    Firehose IAM Role ARN复制到Backend Role即可,然后点击【Map】按钮即可。

然后需要使用 Index template 修改 WAF Log 对应的Mapping字段格式,否则将无法将 log 的 timestamp 字段识别为时间格式。具体操作如下:点开 Kibana 菜单,并选择“Dev Tools”,请下载awswaf-index.template

https://ecr-msp-lab.s3.amazonaws.com/awswaf-index.template

并将内容复制到左边窗口,然后执行图标。


接下来创建 Index pattern。登录 Kibana,点开菜单,点击左边的“Stack Management”选项,再点击“Index Patterns”选项,点击右边的“Create index pattern”按钮,输入awswaf-*,点击【Next step】按钮。

NoteKibana中创建 Index Pattern 时,如果提示 Ready to try Kibana? First, you need data.,则请对被 WAF 保护的 Web URL 发起几次请求,主动生成几条日志。

接着选择 timestamp 字段作为 Time field。点击【Create index pattern】按钮。

接着,请下载 awswaf-dashboard.ndjson

https://ecr-msp-lab.s3.amazonaws.com/awswaf-dashboard.ndjson

这是个用于 AWS WAF 日志可视化展示的 Kibana 模版文件。

Kibana菜单上,

1.    进入“Stack Management”选项,

2.    然后点击“Saved Object”选项,在右边点击“Import”选项,

3.    选中“awswaf-dashboard.ndjson”文件,点击【Import】按钮,完成导入,点击【Done】。

4.    其他设置保留默认配置,

Note如果提示Index Pattern Conflict,则从下拉菜单中选择对应的Index pattern (awswaf-*)

Note在导入的 objects 中,也会有一个awswaf-* index pattern,其中会多出两个 Scripted field 字段,分别为 Host UserAgent Dashboard 中有些视图会使用到这两个字段。

Kibana菜单上,进入“Dashboard”选项,在右侧的窗口里找到、并点击名为“WAFDashboard”dashboard,然后查看 CloudFront 实时日志可视化视图。




END


云代理伙伴
扫描关注微信公众号
获取更多云端资讯
联系我们
——

模板表单-2(1)

  • 姓名*

  • 电话*

  • 邮箱*

  • 职称*

  • 公司*

  • 地址*

  • 需求*

  • * 点击提交,即表示您同意我们存储和处理您提交的个人信息,以向您提供所请求的内容,该信息仅供公司提供服务使用。您的信息受到相关法律的安全保护。