Python プログラムを使用して、Web Application Firewall (WAF) のアクセスログを Syslog サーバーに転送します。これにより、WAF ログをセキュリティオペレーションセンター (SOC) に集約し、規制や監査の要件を満たすことができます。
仕組み
WAF はアクセスログを Simple Log Service (SLS) に書き込みます。Python プログラムは Elastic Compute Service (ECS) インスタンス上で実行され、コンシューマーグループを使用して SLS からログを読み取り、各ログエントリを UDP または TCP 経由でご利用の Syslog サーバーに転送します。

Python プログラムは、LogHub コンシューマーグループ上に構築された高度な消費モードである SLS コンシューマーライブラリを使用します。コンシューマーグループはオフセットの追跡とフォールトトレランスを自動的に処理するため、Python プログラムは転送ロジックに完全に集中できます。
Syslog チャネルは、暗号化なしで UDP または TCP 経由でログデータを送信します。厳格なセキュリティ要件を持つ本番環境では、保護されたチャネル経由でリモートの Syslog サーバーに転送する前に、同じホスト上のローカル Syslog プロキシを経由してログをルーティングしてください。
前提条件
開始する前に、以下のものが揃っていることを確認してください:
WAF の Log Service 機能が有効になっており、ご利用のドメイン名でログ収集がオンになっていること。詳細については、「WAF の Log Service 機能の利用開始」をご参照ください。
以下の最小仕様を満たす、Ubuntu が実行されている Linux ECS インスタンス:
2.0 GHz プロセッサ、8 コア
32 GB メモリ
2 GB 以上の利用可能なディスク領域 (10 GB 以上を推奨)
Syslog データを受信するために UDP ポート 514 が開いている Syslog サーバー
Python プログラムのセットアップ
ステップ 1:依存関係のインストール
ECS インスタンスには、SSH または ECS コンソールを介して接続します。詳細については、「ECS インスタンスへの接続方法」をご参照ください。
Python 3、pip、および SLS 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-sdkSDK のドキュメントについては、「aliyun-log-python-sdk ユーザーガイド」をご参照ください。
ステップ 2:サンプルスクリプトのダウンロード
wget https://raw.githubusercontent.com/aliyun/aliyun-log-python-sdk/master/tests/consumer_group_examples/sync_data_to_syslog.py完全なソースコードは GitHub で入手できます。
ステップ 3:Python プログラムの設定
sync_data_to_syslog.py を開き、以下のパラメーターを設定します。
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')| パラメーター | 説明 |
|---|---|
SLS_ENDPOINT | ご利用のプロジェクトのリージョンに対応する Log Service のエンドポイント。詳細については、「エンドポイント」をご参照ください。 |
SLS_AK_ID | ご利用の AccessKey ID。 ユーザー管理コンソール から取得します。 ![]() |
SLS_AK_KEY | ご利用の AccessKey Secret。 |
SLS_PROJECT | ご利用の WAF インスタンスに対応する SLS プロジェクト名。プロジェクト名は waf-project で始まります。中国 (杭州) リージョンのプロジェクトは中国本土の WAF インスタンスに属し、シンガポール のプロジェクトは中国本土以外の WAF インスタンスに属します。プロジェクト名を確認するには、Log Service コンソールLog Service コンソールにログインします。 ![]() |
SLS_LOGSTORE | プロジェクト内の Logstore 名。Logstore 名を表示するには、Log Service コンソールLog Service コンソールでご利用の WAF プロジェクトをクリックします。 ![]() |
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
}| パラメーター | 説明 |
|---|---|
host | ご利用の Syslog サーバーの IP アドレスまたはホスト名。 |
port | Syslog データ用のポート。サポートされている値: 514 (UDP) および 1468 (TCP)。 |
protocol | トランスポートプロトコル: udp または tcp。ご利用の Syslog サーバーの設定に合わせてください。 |
sep | 各 Syslog メッセージ内のキーと値のペアを区切るために使用される区切り文字。 |
facility | ログソースを分類する Syslog ファシリティコード。Syslog はファシリティコードを使用して、サーバー上の異なるログファイルにメッセージをルーティングします。デフォルトの FAC_USER は、一般的なアプリケーションログに適しています。利用可能なすべての値については、syslogclient のドキュメントをご参照ください。 |
severity | 転送されるすべてのメッセージの Syslog 重要度レベル。デフォルトの SEV_INFO は、WAF のアクセスログに適しています。 |
timeout | 接続タイムアウト (秒単位)。デフォルトは 120 です。 |
cert_path | TLS 証明書ファイルへのパス。TCP 経由で TLS を使用する場合に設定します。暗号化されていない接続の場合は None のままにします。 |
ステップ 4:Python プログラムの起動
python sync_data_to_syslog.pyPython プログラムが正常に起動すると、出力は次のようになります:
*** 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]WAF アクセスログがご利用の Syslog サーバーに転送されるようになります。
次のステップ
WAF の Log Service 機能の概要 — WAF が収集するログフィールドと、それらをクエリする方法について説明します。
コンシューマーグループを使用したログの消費 — コンシューマーライブラリが分散ログ消費をどのように管理するかを理解します。


