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: 依存関係のインストール
SSH または ECS コンソール経由で 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')パラメーター | 説明 |
| プロジェクトがあるリージョンの Log Service エンドポイント。詳細については、「エンドポイント」をご参照ください。 |
| お使いの AccessKey ID。ユーザー管理コンソールから取得できます。 |
| お使いの AccessKey secret。 |
| WAF インスタンスの SLS プロジェクト名。プロジェクト名は |
| プロジェクト内の Logstore 名。Log Service コンソールで WAF プロジェクトをクリックすると、Logstore 名が表示されます。 |
| コンシューマーグループ名。デフォルト値の |
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
}パラメーター | 説明 |
| Syslog サーバーの IP アドレスまたはホスト名。 |
| Syslog データ用のポート。サポートされている値: |
| トランスポートプロトコル: |
| 各 Syslog メッセージでキーと値のペアを区切るための区切り文字。 |
| ログソースを分類する Syslog ファシリティコード。Syslog はファシリティコードを使用して、サーバー上のさまざまなログファイルにメッセージをルーティングします。デフォルトの |
| 転送するすべてのメッセージに適用する Syslog の深刻度レベル。デフォルトの |
| 接続タイムアウト (秒単位)。デフォルトは |
| TLS 証明書ファイルへのパス。TCP 経由で TLS を使用する場合に設定します。暗号化されていない接続の場合は |
ステップ 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 が収集するログフィールドと、それらを照会する方法について説明しています。
コンシューマーグループを使用したログの消費 — コンシューマーライブラリが分散ログ消費をどのように管理するかを説明しています。