本文介绍了如何使用Python Program将Web应用防火墙(WAF)的日志集成到Syslog日志系统中,以实现合规、审计等要求,也方便您在安全操作中心统一管理所有相关日志。
背景信息
该方案的整体集成架构如下图所示:
阿里云日志服务为日志数据提供一站式服务,被广泛应用于阿里巴巴集团的许多大数据场景中。日志服务在无需开发介入的前提下,帮助您快速完成数据采集、消费、投递、查询和分析,提高运维运营效率,建立DT时代海量数据的处理能力。Web应用防火墙集成了日志服务的能力,通过WAF日志服务功能提供网站访问日志的采集、查询、分析等服务。更多信息,请参见WAF日志服务概述。
Python Program是运行在ECS上的一段日志投递程序,帮助您将WAF日志投递到Syslog服务器。消费库(Consumer Library)是对LogHub消费者提供的高级模式,它使用消费组(Consumer Group)统一处理消费端问题。相比于直接使用SDK读取数据,消费库让您只关注业务逻辑,而无需在意日志服务的实施细节或多消费者间的容错问题。更多信息,请参见消费组消费。
Syslog服务器是一个集中的日志消息管理服务器,它可以从多个Syslog源接收数据。
前提条件
您已开通WAF日志服务并为网站域名开启日志采集。更多信息,请参见快速使用WAF日志服务。
您拥有一个Linux ECS服务器,该服务器满足以下推荐配置:
Ubuntu操作系统
8核处理器,2.0 Ghz以上主频率
32 GB内存
可用磁盘空间大于2 GB(建议在10 GB以上)
您拥有一个Syslog服务器,并开放UDP协议514端口用来接收Syslog数据。
操作步骤
您需要先在ECS实例中安装日志服务的Python SDK,然后配置Python Program,投递WAF日志到Syslog服务器。具体操作步骤如下:
通过SSH或ECS控制台远程连接ECS实例。具体操作请参见连接ECS实例。
安装Python3、pip和aliyun-log-python-sdk。关于日志服务Python SDK的介绍,请参见用户指南。
apt-get update apt-get install -y python3-pip python3-dev cd /usr/local/bin ln -s /usr/bin/python3 python pip3 install --upgrade pip pip install aliyun-log-python-sdk
执行以下命令,从GitHub下载最新的集成示例代码。
wget https://raw.githubusercontent.com/aliyun/aliyun-log-python-sdk/master/tests/consumer_group_examples/sync_data_to_syslog.py
替换示例代码Python Program中与日志服务(SLS)、Syslog相关的配置参数,具体包括:
参数
释义
描述
SLS Project
日志项目名称
日志项目(Project)是日志服务的资源管理单元,用来划分和操作资源。
您可以登录阿里云日志服务控制台查看WAF日志服务项目。
WAF日志服务项目的名称以
waf-project
开头。华东1(杭州)地域的项目表示中国内地WAF实例的日志项目,新加坡地域的项目表示非中国内地WAF实例的日志项目。SLS Endpoint
日志服务入口
日志服务入口是访问一个日志项目及其内部日志数据的URL。它和项目所在的阿里云地域及日志项目名称相关。要查看日志服务的入口URL,请参见服务入口。
SLS Logstore
日志库
日志库(Logstore)是日志服务用来采集、存储和查询日志数据的单元。每个日志库归属在一个项目下,每个项目可以拥有多个日志库。
您可以登录阿里云日志服务控制台,单击WAF日志服务项目后,在WAF日志服务项目中查看日志库的名称。
SLS AccessKey ID和AccessKey Secret
访问密钥
访问密钥是您在使用API(而非控制台)访问云资源时的密码。您需要使用AccessKey为API请求内容签名,使其能够通过日志服务的安全认证。具体请参见访问密钥。
您可以登录用户信息管理控制台查看您的AccessKey信息。
Syslog Host
Syslog主机
Syslog服务器的IP地址或主机名称。
Syslog Port
Syslog端口
接收Syslog的端口。UDP协议使用514,TCP协议使用1468。
Syslog protocol
Syslog协议
指定使用UDP或TCP协议来接收Syslog数据,具体取决于Syslog服务器的配置。
Syslog separator
Syslog分隔符
指定用于分隔Syslog键值对的分隔符。
以下是Python Program的配置示例。
日志服务配置
endpoint = os.environ.get('SLS_ENDPOINT', 'http://ap-southeast-1.log.aliyuncs.com') accessKeyId = os.environ.get('SLS_AK_ID', '替换成您自己的AccessKey ID') accessKey = os.environ.get('SLS_AK_KEY', '替换成您自己的AccessKey Secret') project = os.environ.get('SLS_PROJECT', 'waf-project-548613414276****-ap-southeast-1') logstore = os.environ.get('SLS_LOGSTORE', 'waf-logstore') consumer_group = os.environ.get('SLS_CG', 'WAF-SLS')
Syslog配置
settings = { "host": "1.2.xx.xx", "port": 514, "protocol": "udp", "sep": ",", "cert_path": None, "timeout": 120, "facility": syslogclient.FAC_USER, "severity": syslogclient.SEV_INFO, "hostname": None, "tag": None }
启用Python Program。假设Python program被保存为
sync_data_to_syslog.py
,您可以使用以下命令启用它:python sync_data_to_syslog.py
启用Python Program后,会显示成功投递日志到Syslog服务器。
*** start to consume data... consumer worker "WAF-SLS-1" start heart beat start heart beat result: [] get: [0, 1] Get data from shard 0, log count: 6 Complete send data to remote Get data from shard 0, log count: 2 Complete send data to remote heart beat result: [0, 1] get: [0, 1]
完成以上操作后,您可以在Syslog服务器中查询WAF日志。