概要

Imperva CloudWAFではSIEM連携をサポートしています。機能の利用により、Security Logだけではなく
Access Logも取得可能となります。
ログイン後、Account Management > SIEM Logsから設定します。
以下、各ページの概要です。

Log Configuration
Near Real-Time SIEM Log Integration利用時のSIEM連携設定ページ。
ABP、ATO、Client Side Protection、DDoS Protection for Networks/IpsおよびAudit Trailの
ログ取得時に設定。
CloudWAFでNear Real-Time SIEM Log Integrationを設定したい場合はこれまで通りWAF Log Setupで設定。
Amazon S3方式のみの対応。

WAF Log Setup
ログの転送方法の設定。PullモードのImperva APIか、PushモードのSFTPまたはAmazon S3の
3つの方式から選択可能。

Attack Analytics Logs Setup
Attack Analytics(AA)利用時、AAログの転送方法の設定。設定方法はWAF Log Setupと同等。

Accounts Log Settings
サブアカウント設定時、サブアカウントごとにSIEMの有効/無効を設定。

Websites Log Levels
アカウント直下にあるサイトのログ設定を管理。サイトごとにDisabled, Security Logs, All Logsの選択が可能。
サブアカウント下のサイトは、サブアカウントのWebsites Log Levelsで設定。


本ページでは、最も利用機会の多いPullモードでの設定の概要について説明します。 


設定方法

Pullモードは、Impervaのクラウドレポジトリにログが集積され、お客様のサーバからのAPIコールで
ログをダウンロードする方法です。ログは最大48時間保管(または500MBの上限に達した際は
48時間待たず上書き)されます。
動作させるためには①CloudWAFコンソールと②お客様環境双方で設定が必要です。

①CloudWAFコンソール設定

a. 初回のページアクセス時には、SIEM Logs > WAF Log Setupページで[Activate Logs]をクリックして
機能を有効化する必要があります。API IDとKeyがウィンドウに表示されますので、Keyを忘れず控えて下さい。
以下、各セクションの設定項目です。

・Connection: Imperva APIが選択されていることを確認します。

・Format: ご希望のログフォーマットを選択してください。

■ログフォーマット例:
https://docs.imperva.com/bundle/cloud-application-security/page/more/example-logs.htm

Pythonスクリプトを利用してダウンロードする際は、必ずCompress logsオプションを有効にします。

・Encryption: イベントはリポジトリ内で共通鍵で暗号化されています(AES128)。
さらにこの鍵を公開鍵で暗号化するオプションが利用できます。
設定には、まずサーバ上で公開鍵・秘密鍵のペアを作成してください。
鍵は2048ビットの鍵長でPEM形式である必要がございます。

# openssl genrsa -out Private.pem 2048
# openssl rsa -in Private.pem -outform PEM -pubout -out Public.pem

コンソールから公開鍵Public.pemをアップロードします。後ほど、サーバに設定するために
秘密鍵Private.pemの拡張子を.keyに変更します。

・SIEM Packaged: 各ベンダのSIEMアプリケーションパッケージです。外部リンクに移動します。ご入用の際にダウンロードしてください。

b. Websites Log Levelsに移動し、ログを記録したいサイトのログ設定を変更します(デフォルト Disabled)。


②お客様環境設定

a. ファイルの取得
メーカが公開するGithubから、Settings.Config、LogsDownloader.py、requirements.txtを取得します。

■メーカGithub
https://github.com/imperva/incapsula-logs-downloader


・Settings.Config: ログをダウンロードする際の、サーバ側の定義ファイルです。
 - APIID : WAF Log SetupページのConnectionセクションのAPI IDに表示された数字を指定します。
 - APIKEY : SIEM機能を有効化した際に払い出されたAPIキーを指定します。
 - PROCESS_DIR : 取得したCloudWAFのログの保管先を指定します。
 - BASEURL : WAF Log SetupページのConnectionセクションのLog Server URIを指定します。
e.g. https://logs1.incapsula.com/1234_1234567/

その他、経由するプロキシやsyslog転送の要否に応じて設定すべき値は以下のドキュメントも参照ください。

■Log Configuration File
https://docs.imperva.com/bundle/cloud-application-security/page/more/log-configuration.htm

・LogsDownloader.py: Python3で動作するダウンロードスクリプト。

・requirements.txt: 動作環境の用意のために必須のモジュールが記載されています。
 - pycrypto
 - M2Crypto
 - urllib3

次のコマンドで取得可能です。
*お客様環境によっては、ダウンロードのために手動で依存関係を解消する必要があります。

# pip install -r requirements.txt


b. サーバのディレクトリ構造
デフォルト設定に従って環境を用意する場合、以下のディレクトリを作成していただく必要がございます。
お客様環境に併せて変更した場合は、スクリプト実行時のオプションでディレクトリを指定してください。

・ /etc/incapsula/logs/config : 値を設定したSettings.Configを配置します。

・ /etc/incapsula/logs/config/keys/<数字> : 復号化用の秘密鍵Private.keyを配置します。
鍵ペアを更新した場合は、/2/,/3/,...と新たな番号のディレクトリを新規作成し、秘密鍵を再配置します。

・ /var/log/incapsula/logsDownloader/ : システムログの出力先ディレクトリです。

 

スクリプトの実行

Pythonスクリプトが配置されているディレクトリに移動し、つぎのようにコマンドを実行します。

# python3 LogsDownloader.py \
-c path_to_config_folder \
-l path_to_system_logs_folder \
-v system_logs_level

お客様環境に合わせてディレクトリ構造を変更している場合は、各オプションで正しいディレクトリを指定します。
以下は各オプションの説明です。

-c: デフォルトの/etc/incapsula/logs/configに相当するディレクトリを指定します。
-l: デフォルトの/var/log/incapsula/logsDownloader/に相当するディレクトリを指定します。
-v: システムログレベルを指定します。デフォルトはinfoです。その他にはdebugまたはerrorが指定可能です。

 

エラーが発生したら

・Error -3

- エラーログ例:
zlib.error: Error -3 while decompressing data: incorrect header check

- 原因:
error -3はスクリプトがファイルの解凍に失敗したときに表示されます。
多くの場合、すでに解凍されているファイルを解凍しようとした際に発生します。

- 対処法:
SIEM Logs > WAF Log Setupで圧縮設定が有効になっているかご確認ください。


・404エラー

- エラーログ例:
2023-09-11 00:17:04,792 ERROR Could not find file
https://logs1.incapsula.com/1234_123456/1234_5555555.log. Response code is 404

- 原因:
スクリプトがログをダウンロードする際、①まずサーバでlogs.indexというインデックスファイルをダウンロードし、
②次にインデックスに記載されたログファイルを順次ダウンロードします。
通常、Pythonスクリプトは連続してファイルをダウンロードしますが、
logs.indexファイルにファイル名が記録されていた場合でも、
遅延によりImperva Cloudストレージにアップロードされていない場合がございます。
そのため、もしダウンロードする時にファイルがまだImperva Cloudストレージにアップロードされていない時は、
Pythonスクリプトは404で応答します。
その他、ログファイル番号が連続しない場合もございます。

- 対処法:
このような事象が発生した際はLastKnownDownloadedFields.txtを編集するか、再起動してご対応ください。

■参考:技術コミュニティ ディスカッション
https://github.com/imperva/incapsula-logs-downloader/issues/46


レファレンス

他のモードの設定方法や詳細については以下ドキュメントもご確認ください。

■SIEM設定
https://docs.imperva.com/bundle/cloud-application-security/page/settings/log-integration.htm

■Connector設定
https://docs.imperva.com/bundle/cloud-application-security/page/more/log-configuration.htm

■メーカGithub
https://github.com/imperva/incapsula-logs-downloader

更新日:2023年9月11日