本文介紹了如何使用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日志。