このトピックでは、Pythonプログラムを使用してWeb Application Firewall (WAF) ログをSyslogサーバーに統合し、規制要件と監査要件を満たす方法について説明します。 これにより、セキュリティオペレーションセンターのすべての関連ログを管理できます。
背景情報
次の図は、統合アーキテクチャを示しています。
Log Serviceは、Alibaba Cloudによって開発されたエンドツーエンドのログサービスであり、ビッグデータシナリオでAlibaba Groupによって広く使用されています。 Log Serviceを使用すると、開発を必要とせずに、ログデータの収集、消費、配信、クエリ、および分析を完了できます。 これにより、O&M効率と運用効率が向上し、データテクノロジー (DT) 時代の大量のログを処理する機能が提供されます。 WAFはLog Serviceと統合されています。 Log Service for WAF機能を使用すると、Webサイトのアクセスログを収集、クエリ、および分析できます。 詳細については、「概要」をご参照ください。
Python Programは、ECSインスタンスで実行され、WAFログをSyslogサーバーに配信するプログラムです。 コンシューマライブラリは、LogHubコンシューマ向けに提供される高度なモードです。 消費者グループを使用して消費終了を管理します。 SDKを使用してデータを読み取るモードと比較して、コンシューマーライブラリではビジネスロジックのみに集中できます。 Log Serviceの実装の詳細や、複数のコンシューマ間のフォールトトレランスについて心配する必要はありません。 詳細については、「コンシューマグループを使用したログの消費」をご参照ください。
Syslogサーバーはログメッセージを一元管理します。 複数のSyslogソースからデータを受信できます。
前提条件
Log Service for WAFが有効になっています。 ドメイン名に対してログ収集機能が有効になっています。 詳細については、「Simple Log Service For WAF機能の使用を開始する」をご参照ください。
次の推奨設定を持つLinux ECSインスタンスがデプロイされます。
Ubuntuオペレーティングシステム
2.0 8つのコアを持つGHzプロセッサ以上
32 GBのメモリ
2 GBを超える使用可能なディスク容量 (10 GBを超える使用可能なディスク容量を推奨)
Syslogサーバーがデプロイされ、Syslogデータを受信するためにサーバーでUDPポート514が有効になります。
手順
ECSインスタンスにLog Service SDK for Pythonをインストールし、WAFログをSyslogサーバーに配信するようにPythonプログラムを設定します。 以下の手順を実行します。
SSHまたはECSコンソールでECSインスタンスに接続します。 詳細については、「ECSインスタンスへの接続」をご参照ください。
Python 3、pip、およびaliyun-log-python-sdkをインストールします。 Log Service SDK For Pythonの詳細については、「ユーザーガイド」をご参照ください。
apt-getアップデート apt-get install -y python3-pip python3-dev cd /usr /ローカル /ビン 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とSyslogパラメーターを置き換えます。 下表に、各パラメーターを説明します。
パラメーター
意味
説明
SLSプロジェクト
ログプロジェクト名
プロジェクトは、Log Serviceのリソースを分離および制御するための基本単位です。
log Serviceコンソールにログインして、WAFのログプロジェクトを表示できます。
WAFログプロジェクトの名前は、
waf-project
で始まります。 中国 (杭州) リージョンにあるプロジェクトは、中国本土のWAFインスタンスのログプロジェクトです。 シンガポールリージョンにあるプロジェクトは、中国本土以外のWAFインスタンスのログプロジェクトです。SLSエンドポイント
Log Serviceエンドポイント
Log Service ポイントは、プロジェクトにアクセスし、プロジェクト内のログにアクセスするために使用される URL で、 エンドポイントは、プロジェクトが存在するAlibaba Cloudリージョンとプロジェクト名によって異なります。 URLを表示するには、「エンドポイント」をご参照ください。
SLS Logstore
ログストア
Logstoreは、ログデータを収集、保存、および照会するためのLog Serviceの単位です。 各Logstoreは単一のプロジェクトに属します。 各プロジェクトは複数のLogstoreを持つことができます。
log Serviceコンソールにログインし、WAFログプロジェクトをクリックしてLogstore名を表示します。
SLS AccessKey IDとAccessKey Secret
AccessKey ペア
AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成され、コンソールではなくAPIを使用してクラウドリソースにアクセスするように設計されています。 AccessKeyペアを使用してAPIリクエストに署名し、リクエストがLog Serviceのセキュリティ認証を通過できるようにすることができます。 詳細は、「AccessKey」をご参照ください。
[ユーザー管理コンソール] にログインして、AccessKeyペアの情報を表示できます。
Syslogホスト
Syslogホスト
SyslogサーバのIPアドレスまたはホスト名。
Syslogポート
Syslogポート
Syslogデータの受信に使用されるポート。 UDPポート514とTCPポート1468がサポートされています。
Syslogプロトコル
Syslogプロトコル
Syslogデータの受信に使用されるUDPまたはTCPプロトコル。 パラメーターの値は、Syslogサーバーの設定によって異なります。
Syslogセパレータ
Syslog区切り文字
Syslogキーと値のペアを区切るために使用される区切り文字。
次のコードは、Pythonプログラムの設定方法の例を示しています。
Log Serviceの設定
endpoint = os.environ.get('SLS_endpoint ', 'http:// ap-southeast-1.log.aliyuncs.com') accessKeyId = os.environ.get('SLS_AK_ID ', 'Your AccessKey ID') accessKey = os.environ.get('SLS_AK_KEy', 'Your 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": なし、 "timeout": 120、 "facility": syslogclient.FAC_USER、 "重大度": syslogclient.SEV_INFO、 "hostname": なし、 "tag": なし }
Pythonプログラムを開始します。 Pythonプログラムが
sync_data_to_syslog.py
として保存されているとします。 次のコマンドを実行して起動します。python sync_data_to_syslog.py
次のコマンド出力は、Pythonプログラムの開始後にログがSyslogサーバーに配信されることを示しています。
*** データの消費を開始... コンシューマーワーカー「WAF-SLS-1」スタート ハートビートスタート ハートビート結果: [] get: [0, 1] シャードからデータを取得0、ログ数: 6 完全リモートにデータを送信 シャードからデータを取得0、ログ数: 2 完全リモートにデータを送信 ハートビート結果: [0, 1] get: [0, 1]
SyslogサーバーでWAFログを照会できます。