Akamai WAF のログを収集する
このドキュメントでは、Akamai CEF コネクタと Bindplane を使用して Akamai WAF ログを Google Security Operations に取り込む方法について説明します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- Bindplane エージェントのインストール用の Windows 2016 以降または systemd を使用する Linux ホスト
- 少なくとも 2 個の CPU コア、6 GB の RAM、Akamai CEF Connector 用の 2 GB の空きディスク容量を備えた Linux サーバー(CentOS/RHEL/Ubuntu を推奨)
- CEF コネクタ ホストに Java 8(JRE 1.8)以降がインストールされている
- プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いており、プロキシの許可リストに
*.cloudsecurity.akamaiapis.netと*.luna.akamaiapis.netが登録されていることを確認します。 - Akamai Control Center への特権アクセス
- App & API Protector、Kona Site Defender、Web Application Protector、Bot Manager、Account Protector が有効になっている Akamai セキュリティ構成
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [コレクション エージェント] に移動します。
- Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステムにファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
- [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
Akamai Control Center で SIEM 統合を有効にする
- Akamai Control Center にログインします。
- [WEB & DATA CENTER SECURITY] で [Security Configuration] をクリックします。
- セキュリティ構成と、SIEM データを収集する適切なバージョンを開きます。
- [詳細設定] をクリックし、[SIEM 統合のデータ収集] を展開します。
- [オン] をクリックして SIEM を有効にします。
- データをエクスポートするセキュリティ ポリシーを選択します。
- すべてのセキュリティ ポリシー: セキュリティ構成内のセキュリティ ポリシーのいずれかまたはすべてに違反するイベントの SIEM データを送信する場合に選択します。
- 特定のセキュリティ ポリシー: 1 つ以上の特定のセキュリティ ポリシーに関するデータを送信する場合は、これを選択します。プルダウン リストから適切なポリシーを選択します。
- 省略可: アカウント プロテクターを使用しており、暗号化されていないユーザー名を含める場合は、[ユーザー名を含める] チェックボックスをオンにします。
- 省略可: SIEM イベントで JA4 指紋情報を受け取る場合は、[Include the JA4 Client TLS Fingerprint] チェックボックスをオンにします。
- 省略可: 特定の保護タイプとアクションに属するイベントを除外する場合は、[例外を追加] をクリックします。SIEM で収集しない保護と関連するアクションを選択します。[保存] をクリックします。
- [Web Security Configuration ID] フィールドの値をコピーします。この ID は後で使用するために保存しておきます。
- [有効にする] をクリックして、セキュリティ構成の変更を本番環境ネットワークに push します。[ネットワーク] で、[本番環境]、[有効にする] の順にクリックします。
Akamai Control Center で SIEM を管理するユーザーを設定する
- Akamai Control Center の [ACCOUNT ADMIN] で、[Identity & access] をクリックします。
- [ユーザーと API クライアント] タブで、ロールを割り当てるユーザーを見つけるか、[ユーザーを作成] ボタンをクリックします。
- 既存のユーザーに SIEM ロールを割り当てるには:
- ユーザーのアカウントを開き、[ロールを編集] タブをクリックします。
- 適切なグループを見つけて [ロール] メニューをクリックし、[SIEM の管理] ロールを選択します。
- [送信] をクリックします。
- 新しいユーザーに SIEM ロールを割り当てるには:
- [Create user] をクリックします。
- ユーザーの基本情報を入力し、[Assign Roles] セクションに移動します。
- 適切なグループを見つけて [ロール] メニューをクリックし、[SIEM の管理] ロールを選択します。
- [保存] をクリックします。
Akamai Control Center で SIEM API 認証情報をプロビジョニングする
- Akamai のドキュメントの認証情報を作成するページをご覧ください。
- 手順に沿って、SIEM の管理を割り当てたユーザーに SIEM API をプロビジョニングします。
- 次の認証情報をコピーして安全に保存します。
- アクセス トークン
- クライアント トークン
- Client Secret
- ベース URL
Akamai CEF Connector をインストールする
- Linux サーバーで、Akamai GitHub リポジトリから最新の CEF コネクタ配布パッケージをダウンロードします。
wgetまたは SFTP を使用して、パッケージをサーバーに転送します。- ダウンロードしたファイルの SHA256 ハッシュを検証して、完全性を確認します。
配布パッケージを抽出します。
unzip CEFConnector-<version>.zip抽出されたディレクトリに移動します。
cd CEFConnector-<version>サービスをインストールするには、起動スクリプトへのシンボリック リンクを作成します。
sudo ln -s /path/to/CEFConnector-<version>/bin/AkamaiCEFConnector.sh /etc/init.d/AkamaiCEFConnector
Akamai CEF コネクタを構成する
CEF コネクタのインストール内の
configディレクトリに移動します。cd configテキスト エディタ(
nano、viなど)を使用してCEFConnector.propertiesファイルを開きます。sudo nano CEFConnector.properties次の必須パラメータを構成します。
# Akamai API Configuration akamai.data.requesturlhost=https://cloudsecurity.akamaiapis.net akamai.data.configs=<YOUR_SECURITY_CONFIG_ID> akamai.data.timebased=false akamai.data.limit=200000 # API Credentials (from Step: Provision SIEM API credentials) akamai.data.accesstoken=<YOUR_ACCESS_TOKEN> akamai.data.clienttoken=<YOUR_CLIENT_TOKEN> akamai.data.clientsecret=<YOUR_CLIENT_SECRET> akamai.data.baseurl=<YOUR_BASE_URL> # CEF Format Configuration akamai.cefformatheader=CEF:0|Akamai|akamai_siem|1.0|eventClassId()|name()|severity() akamai.cefformatextension=act=appliedAction() app=${httpMessage.protocol} c6a2=ipv6src() c6a2Label="Source IPv6 Address" cs1=${attackData.rules} cs1Label="Rules" cs2=${attackData.ruleMessages} cs2Label="Rule Messages" cs3=${attackData.ruleData} cs3Label="Rule Data" cs4=${attackData.ruleSelectors} cs4Label="Rule Selectors" cs5=${attackData.clientReputation} cs5Label="Client Reputation" cs6=${attackData.apiId} cs6Label="API ID" devicePayloadId=${httpMessage.requestId} dhost=${httpMessage.host} dpt=${httpMessage.port} flexString1=${attackData.configId} flexString1Label="Security Config ID" flexString2=${attackData.policyId} flexString2Label="Firewall Policy Id" out=${httpMessage.bytes} request=requestURL() requestMethod=${httpMessage.method} src=${attackData.clientIP} start=${httpMessage.start} AkamaiSiemSlowPostAction=${attackData.slowPostAction} AkamaiSiemSlowPostRate=${attackData.slowPostRate} AkamaiSiemRuleVersions=${attackData.ruleVersions} AkamaiSiemRuleTags=${attackData.ruleTags} AkamaiSiemJA4=${identity.ja4} AkamaiSiemRuleActions=${attackData.ruleActions} # Connector Pull Configuration connector.refresh.period=60 connector.consumer.count=3 connector.retry=5 # Proxy Configuration (if applicable) # connector.proxy.host= # connector.proxy.port=次のプレースホルダを実際の値に置き換えます。
<YOUR_SECURITY_CONFIG_ID>: 先ほどコピーした Web セキュリティ構成 ID。複数の構成を指定する場合は、ID をセミコロンで区切ります(例:12345;67890)。<YOUR_ACCESS_TOKEN>: Akamai API 認証情報のアクセス トークン<YOUR_CLIENT_TOKEN>: Akamai API 認証情報のクライアント トークン<YOUR_CLIENT_SECRET>: Akamai API 認証情報のクライアント シークレット<YOUR_BASE_URL>: Akamai API 認証情報のベース URL
ファイルを保存して閉じます。
CEF コネクタのロギングを構成する
- CEF コネクタのインストール内の
configディレクトリに移動します。 テキスト エディタを使用して
log4j2.xmlファイルを開きます。sudo nano log4j2.xmlBindplane への syslog 出力用に次のパラメータを構成します。
<!-- Syslog Appender Configuration --> <Syslog name="SyslogAppender" host="<BINDPLANE_IP_ADDRESS>" port="<BINDPLANE_PORT>" protocol="<PROTOCOL>" facility="LOCAL0" format="RFC5424"> <PatternLayout pattern="%m%n"/> </Syslog>各プレースホルダを次のように置き換えます。
<BINDPLANE_IP_ADDRESS>: Bindplane エージェントがインストールされているサーバーの IP アドレス<BINDPLANE_PORT>: Bindplane エージェントがリッスンするポート番号(UDP の場合は514、TCP の場合は601など)<PROTOCOL>:UDPまたはTCPのいずれかを選択します。
CEF 固有の設定を構成して、CEF コネクタがリモート Syslog サーバー(BindPpane)にログを送信するようにします。
# In CEFConnector.properties, ensure these are set: # Note: These settings are typically in log4j2.xml but referenced here for clarityファイルを保存して閉じます。
Akamai CEF コネクタを開始する
CEF コネクタ サービスを起動します。
sudo /etc/init.d/AkamaiCEFConnector startサービスが実行されていることを確認します。
sudo /etc/init.d/AkamaiCEFConnector statusログをモニタリングして、コネクタが Akamai からイベントを取得し、Bindplane に送信していることを確認します。
tail -f /path/to/CEFConnector-<version>/bin/logs/cefconnector.log
Bindplane エージェントをインストールする
次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。
Windows のインストール
- 管理者として コマンド プロンプトまたは PowerShell を開きます。
次のコマンドを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux のインストール
- root 権限または sudo 権限でターミナルを開きます。
次のコマンドを実行します。
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
その他のインストール リソース
- その他のインストール オプションについては、こちらのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
構成ファイルにアクセスします。
config.yamlファイルを見つけます。通常、Linux では/etc/bindplane-agent/ディレクトリに、Windows ではインストール ディレクトリにあります。- テキスト エディタ(
nano、vi、メモ帳など)を使用してファイルを開きます。
config.yamlファイルを次のように編集します。receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" tcplog: # Alternative TCP receiver if using TCP protocol listen_address: "0.0.0.0:601" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in the Get ingestion authentication file section creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from the Get customer ID section customer_id: <YOUR_CUSTOMER_ID> # Select the appropriate regional endpoint based on where your Google SecOps instance is provisioned # For regional endpoints, see: https://cloud.google.com/chronicle/docs/reference/ingestion-api#regional_endpoints endpoint: malachiteingestion-pa.googleapis.com # Set the log_type to ensure the correct parser is applied log_type: 'AKAMAI_WAF' raw_log_field: body # Add optional ingestion labels for better organization ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog # - tcplog # Uncomment if using TCP exporters: - chronicle/chronicle_w_labels
Bindplane エージェントを再起動して変更を適用する
Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。
sudo systemctl restart bindplane-agentWindows で Bindplane エージェントを再起動するには、Services コンソールを使用するか、次のコマンドを入力します。
net stop BindPlaneAgent && net start BindPlaneAgent
ログの取り込みを確認する
- Google SecOps コンソールにログインします。
- [検索] または [未加工ログスキャン] に移動します。
取り込みラベルを使用して、最近の Akamai WAF ログを検索します。
metadata.log_type = "AKAMAI_WAF"ログが目的のフィールドとタイムスタンプで表示されていることを確認します。
CEF 形式のフィールドが正しく解析され、UDM にマッピングされていることを確認します。
トラブルシューティング
CEF コネクタに関する問題
- イベントが取得されない:
cefconnector.logファイルでエラーを確認します。Akamai API 認証情報が正しく、セキュリティ構成 ID が有効であることを確認します。 - 接続エラー: プロキシ設定(該当する場合)が正しく構成され、必要なドメインが許可リストに登録されていることを確認します。
データベースのリセット: オフセット トラッキングをリセットする必要がある場合は、次のコマンドを実行します。
sudo /etc/init.d/AkamaiCEFConnector resetdb
Bindplane エージェントに関する問題
- ログが Bindplane に到達しない: CEF コネクタが、正しい Bindplane IP アドレスとポートに syslog を送信するように構成されていることを確認します。CEF Connector と Bindplane エージェント間のファイアウォール ルールを確認します。
ログが Google SecOps に到達しない: Bindplane 構成ファイル、顧客 ID、取り込み認証パスを確認します。Bindplane ログでエラーを確認します。
sudo journalctl -u observiq-otel-collector -f
ネットワークと接続
- CEF コネクタが Akamai SIEM API エンドポイントに到達できることを確認します。
- Bindplane エージェントが Google SecOps 取り込みエンドポイント(
malachiteingestion-pa.googleapis.com)にアクセスできることを確認します。 - 必要なファイアウォール ポートがすべて開いていることを確認します。
過去のセキュリティ イベントを取得する
Akamai CEF コネクタは、次の 2 つのモードで動作します。
- オフセットベース(推奨): コネクタは、セキュリティ イベントがほぼリアルタイムで収集されると、自動的にログに記録します。
akamai.data.timebasedがfalseに設定されている場合、これがデフォルト モードです。 - 時間ベース: 特定の期間(過去 12 時間以内)に発生したイベントを取得できます。
欠落しているセキュリティ イベントや過去のセキュリティ イベントを取得するには:
コネクタの構成ファイルを開きます。
sudo nano /path/to/CEFConnector-<version>/config/CEFConnector.properties時間ベースの構成を変更します。
akamai.data.timebased=true akamai.data.timebased.from=<EPOCH_START_TIME> akamai.data.timebased.to=<EPOCH_END_TIME><EPOCH_START_TIME>は、エポック形式の開始時間(過去 12 時間以内)に置き換えます。<EPOCH_END_TIME>は、エポック形式の終了時間に置き換えます(省略可。空白のままにすると、現在までのイベントが取得されます)。
CEF コネクタを再起動します。
sudo /etc/init.d/AkamaiCEFConnector restart履歴データを取得したら、オフセット モードに戻します。
akamai.data.timebased=falseCEF コネクタを再度再起動します。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
src(attackData.clientIP) |
principal.ip |
リクエストを行っているクライアントの送信元 IP アドレス |
c6a2(ipv6src) |
principal.ip |
attackData.clientIP が IPv6 形式の場合の送信元 IPv6 アドレス |
dhost(httpMessage.host) |
target.hostname |
HTTP HOST ヘッダーのホスト名 |
dpt(httpMessage.port) |
target.port |
受信リクエストで使用されるポート番号 |
requestMethod(httpMessage.method) |
network.http.method |
受信リクエストの HTTP メソッド(GET、POST など) |
request(requestURL) |
target.url |
httpMessage フィールドから計算された完全な URL |
cs1(attackData.rules) |
security_result.rule_id |
このリクエストでトリガーされたルールのルール ID |
cs2(attackData.ruleMessages) |
security_result.rule_name |
トリガーされたルールのメッセージ |
act(appliedAction) |
security_result.action |
実行されたアクション(アラート、拒否、中止など) |
severity |
security_result.severity |
計算された重大度(検出の場合は 5、軽減の場合は 10) |
cs5(attackData.clientReputation) |
security_result.threat_name |
クライアントの評判のクライアント IP スコア |
cs6(attackData.apiId) |
security_result.detection_fields |
API Protection の API ID |
start(httpMessage.start) |
metadata.event_timestamp |
Edge サーバーが接続を開始した時刻(エポック形式) |
devicePayloadId(httpMessage.requestId) |
metadata.product_log_id |
メッセージのグローバルに一意の ID |
flexString1(attackData.configId) |
security_result.detection_fields |
このリクエストに適用されたセキュリティ構成の ID |
flexString2(attackData.policyId) |
security_result.detection_fields |
このリクエストに適用されたファイアウォール ポリシーの ID |
AkamaiSiemJA4(identity.ja4) |
network.tls.client.ja3 |
JA4 クライアント TLS フィンガープリント |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。