本文介紹了如何使用Python Program將Web Application Firewall(WAF)的日誌整合到Syslog日誌系統中,以實現合規、審計等要求,也方便您在安全控制中心統一管理所有相關日誌。
背景資訊
該方案的整體整合架構如下圖所示:
阿里雲Log Service為日誌資料提供一站式服務,被廣泛應用於阿里巴巴集團的許多巨量資料情境中。Log Service在無需開發介入的前提下,協助您快速完成資料擷取、消費、投遞、查詢和分析,提高營運營運效率,建立DT時代海量資料的處理能力。Web Application Firewall整合了Log Service的能力,通過WAFLog Service功能提供網站訪問日誌的採集、查詢、分析等服務。更多資訊,請參見WAFLog Service概述。
Python Program是運行在ECS上的一段日誌投遞程式,協助您將WAF日誌投遞到Syslog伺服器。消費庫(Consumer Library)是對LogHub消費者提供的進階模式,它使用消費組(Consumer Group)統一處理消費端問題。相比於直接使用SDK讀取資料,消費庫讓您只關注商務邏輯,而無需在意Log Service的實施細節或多消費者間的容錯問題。更多資訊,請參見消費組消費。
Syslog伺服器是一個集中的日誌訊息管理伺服器,它可以從多個Syslog源接收資料。
前提條件
您已開通WAFLog Service並為網站網域名稱開啟日誌採集。更多資訊,請參見快速使用WAFLog Service。
您擁有一個Linux ECS伺服器,該伺服器滿足以下推薦配置:
Ubuntu作業系統
8核處理器,2.0 Ghz以上主頻率
32 GB記憶體
可用磁碟空間大於2 GB(建議在10 GB以上)
您擁有一個Syslog伺服器,並開放UDP協議514連接埠用來接收Syslog資料。
操作步驟
您需要先在ECS執行個體中安裝Log Service的Python SDK,然後配置Python Program,投遞WAF日誌到Syslog伺服器。具體操作步驟如下:
通過SSH或ECS控制台遠端連線ECS執行個體。具體操作請參見串連ECS執行個體。
安裝Python3、pip和aliyun-log-python-sdk。關於Log ServicePython 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中與Log Service(SLS)、Syslog相關的配置參數,具體包括:
參數
釋義
描述
SLS Project
記錄項目名稱
記錄項目(Project)是Log Service的資源嵌入式管理單元,用來劃分和操作資源。
您可以登入阿里雲Log Service控制台查看WAFLog Service專案。
WAFLog Service專案的名稱以
waf-project
開頭。華東1(杭州)地區的專案表示中國內地WAF執行個體的記錄項目,新加坡地區的專案表示非中國內地WAF執行個體的記錄項目。SLS Endpoint
Log Service入口
Log Service入口是訪問一個記錄項目及其內部日誌資料的URL。它和專案所在的阿里雲地區及記錄項目名稱相關。要查看Log Service的入口URL,請參見服務入口。
SLS Logstore
日誌庫
日誌庫(Logstore)是Log Service用來採集、儲存和查詢日誌資料的單元。每個日誌庫歸屬在一個專案下,每個專案可以擁有多個日誌庫。
您可以登入阿里雲Log Service控制台,單擊WAFLog Service專案後,在WAFLog Service專案中查看日誌庫的名稱。
SLS AccessKey ID和AccessKey Secret
存取金鑰
存取金鑰是您在使用API(而非控制台)訪問雲資源時的密碼。您需要使用AccessKey為API請求內容簽名,使其能夠通過Log Service的安全認證。具體請參見存取金鑰。
您可以登入使用者資訊管理主控台查看您的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的配置樣本。
Log Service配置
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日誌。