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 の取り込み認証ファイルを取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [コレクション エージェント] に移動します。
  3. Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステムにファイルを安全に保存します。

Google SecOps のお客様 ID を取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [プロファイル] に移動します。
  3. [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。

Akamai Control Center で SIEM 統合を有効にする

  1. Akamai Control Center にログインします。
  2. [WEB & DATA CENTER SECURITY] で [Security Configuration] をクリックします。
  3. セキュリティ構成と、SIEM データを収集する適切なバージョンを開きます。
  4. [詳細設定] をクリックし、[SIEM 統合のデータ収集] を展開します。
  5. [オン] をクリックして SIEM を有効にします。
  6. データをエクスポートするセキュリティ ポリシーを選択します。
    • すべてのセキュリティ ポリシー: セキュリティ構成内のセキュリティ ポリシーのいずれかまたはすべてに違反するイベントの SIEM データを送信する場合に選択します。
    • 特定のセキュリティ ポリシー: 1 つ以上の特定のセキュリティ ポリシーに関するデータを送信する場合は、これを選択します。プルダウン リストから適切なポリシーを選択します。
  7. 省略可: アカウント プロテクターを使用しており、暗号化されていないユーザー名を含める場合は、[ユーザー名を含める] チェックボックスをオンにします。
  8. 省略可: SIEM イベントで JA4 指紋情報を受け取る場合は、[Include the JA4 Client TLS Fingerprint] チェックボックスをオンにします。
  9. 省略可: 特定の保護タイプとアクションに属するイベントを除外する場合は、[例外を追加] をクリックします。SIEM で収集しない保護と関連するアクションを選択します。[保存] をクリックします。
  10. [Web Security Configuration ID] フィールドの値をコピーします。この ID は後で使用するために保存しておきます。
  11. [有効にする] をクリックして、セキュリティ構成の変更を本番環境ネットワークに push します。[ネットワーク] で、[本番環境]、[有効にする] の順にクリックします。

Akamai Control Center で SIEM を管理するユーザーを設定する

  1. Akamai Control Center の [ACCOUNT ADMIN] で、[Identity & access] をクリックします。
  2. [ユーザーと API クライアント] タブで、ロールを割り当てるユーザーを見つけるか、[ユーザーを作成] ボタンをクリックします。
  3. 既存のユーザーに SIEM ロールを割り当てるには:
    • ユーザーのアカウントを開き、[ロールを編集] タブをクリックします。
    • 適切なグループを見つけて [ロール] メニューをクリックし、[SIEM の管理] ロールを選択します。
    • [送信] をクリックします。
  4. 新しいユーザーに SIEM ロールを割り当てるには:
    • [Create user] をクリックします。
    • ユーザーの基本情報を入力し、[Assign Roles] セクションに移動します。
    • 適切なグループを見つけて [ロール] メニューをクリックし、[SIEM の管理] ロールを選択します。
    • [保存] をクリックします。

Akamai Control Center で SIEM API 認証情報をプロビジョニングする

  1. Akamai のドキュメントの認証情報を作成するページをご覧ください。
  2. 手順に沿って、SIEM の管理を割り当てたユーザーに SIEM API をプロビジョニングします。
  3. 次の認証情報をコピーして安全に保存します。
    • アクセス トークン
    • クライアント トークン
    • Client Secret
    • ベース URL

Akamai CEF Connector をインストールする

  1. Linux サーバーで、Akamai GitHub リポジトリから最新の CEF コネクタ配布パッケージをダウンロードします。
  2. wget または SFTP を使用して、パッケージをサーバーに転送します。
  3. ダウンロードしたファイルの SHA256 ハッシュを検証して、完全性を確認します。
  4. 配布パッケージを抽出します。

    unzip CEFConnector-<version>.zip
    
  5. 抽出されたディレクトリに移動します。

    cd CEFConnector-<version>
    
  6. サービスをインストールするには、起動スクリプトへのシンボリック リンクを作成します。

    sudo ln -s /path/to/CEFConnector-<version>/bin/AkamaiCEFConnector.sh /etc/init.d/AkamaiCEFConnector
    

Akamai CEF コネクタを構成する

  1. CEF コネクタのインストール内の config ディレクトリに移動します。

    cd config
    
  2. テキスト エディタ(nanovi など)を使用して CEFConnector.properties ファイルを開きます。

    sudo nano CEFConnector.properties
    
  3. 次の必須パラメータを構成します。

    # 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=
    
  4. 次のプレースホルダを実際の値に置き換えます。

    • <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
  5. ファイルを保存して閉じます。

CEF コネクタのロギングを構成する

  1. CEF コネクタのインストール内の config ディレクトリに移動します。
  2. テキスト エディタを使用して log4j2.xml ファイルを開きます。

    sudo nano log4j2.xml
    
  3. Bindplane への 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>
    
  4. 各プレースホルダを次のように置き換えます。

    • <BINDPLANE_IP_ADDRESS>: Bindplane エージェントがインストールされているサーバーの IP アドレス
    • <BINDPLANE_PORT>: Bindplane エージェントがリッスンするポート番号(UDP の場合は 514、TCP の場合は 601 など)
    • <PROTOCOL>: UDP または TCP のいずれかを選択します。
  5. CEF 固有の設定を構成して、CEF コネクタがリモート Syslog サーバー(BindPpane)にログを送信するようにします。

    # In CEFConnector.properties, ensure these are set:
    # Note: These settings are typically in log4j2.xml but referenced here for clarity
    
  6. ファイルを保存して閉じます。

Akamai CEF コネクタを開始する

  1. CEF コネクタ サービスを起動します。

    sudo /etc/init.d/AkamaiCEFConnector start
    
  2. サービスが実行されていることを確認します。

    sudo /etc/init.d/AkamaiCEFConnector status
    
  3. ログをモニタリングして、コネクタが Akamai からイベントを取得し、Bindplane に送信していることを確認します。

    tail -f /path/to/CEFConnector-<version>/bin/logs/cefconnector.log
    

Bindplane エージェントをインストールする

次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。

Windows のインストール

  1. 管理者として コマンド プロンプトまたは PowerShell を開きます。
  2. 次のコマンドを実行します。

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Linux のインストール

  1. root 権限または sudo 権限でターミナルを開きます。
  2. 次のコマンドを実行します。

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

その他のインストール リソース

Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する

  1. 構成ファイルにアクセスします。

    1. config.yaml ファイルを見つけます。通常、Linux では /etc/bindplane-agent/ ディレクトリに、Windows ではインストール ディレクトリにあります。
    2. テキスト エディタ(nanovi、メモ帳など)を使用してファイルを開きます。
  2. 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-agent
    
  • Windows で Bindplane エージェントを再起動するには、Services コンソールを使用するか、次のコマンドを入力します。

    net stop BindPlaneAgent && net start BindPlaneAgent
    

ログの取り込みを確認する

  1. Google SecOps コンソールにログインします。
  2. [検索] または [未加工ログスキャン] に移動します。
  3. 取り込みラベルを使用して、最近の Akamai WAF ログを検索します。

    metadata.log_type = "AKAMAI_WAF"
    
  4. ログが目的のフィールドとタイムスタンプで表示されていることを確認します。

  5. 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.timebasedfalse に設定されている場合、これがデフォルト モードです。
  • 時間ベース: 特定の期間(過去 12 時間以内)に発生したイベントを取得できます。

欠落しているセキュリティ イベントや過去のセキュリティ イベントを取得するには:

  1. コネクタの構成ファイルを開きます。

    sudo nano /path/to/CEFConnector-<version>/config/CEFConnector.properties
    
  2. 時間ベースの構成を変更します。

    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> は、エポック形式の終了時間に置き換えます(省略可。空白のままにすると、現在までのイベントが取得されます)。
  3. CEF コネクタを再起動します。

    sudo /etc/init.d/AkamaiCEFConnector restart
    
  4. 履歴データを取得したら、オフセット モードに戻します。

    akamai.data.timebased=false
    
  5. CEF コネクタを再度再起動します。

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 のプロフェッショナルから回答を得ることができます。