Akamai EAA(Enterprise Application Access)ログを収集する

以下でサポートされています。

このドキュメントでは、Akamai の Unified Log Streamer(ULS)と Bindplane を使用して Akamai Enterprise Application Access(EAA)ログを Google Security Operations に取り込む方法について説明します。Akamai EAA は、アクセスログ、管理監査ログ、認証の詳細、コネクタの健全性指標の形式で運用データを生成します。パーサーは、JSON ログからフィールドを抽出し、文字列変換や IP アドレスの抽出などのデータ変換を実行して、これらのフィールドを UDM にマッピングします。特定のフィールドの有無に基づいて、NETWORK_HTTPUSER_UNCATEGORIZED などのさまざまなイベントタイプを処理します。また、ベンダー名やプロダクト名などのメタデータも UDM イベントに追加します。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス
  • Bindplane エージェントを実行するための systemd を使用する Windows 2016 以降または Linux ホスト
  • Unified Log Streamer を実行するための Linux、macOS、またはコンテナ化された環境(Docker/Kubernetes)
  • プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
  • 管理者権限を持つ Akamai EAA テナント
  • Akamai API 認証情報(EdgeGrid 認証):
    • アクセス トークン
    • クライアント トークン
    • クライアント シークレット
    • API ベースホスト名(例: akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.luna.akamaiapis.net

Google SecOps の取り込み認証ファイルを取得する

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

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

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

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:
      tcplog:
        listen_address: "0.0.0.0:5140"
    
    exporters:
      chronicle/chronicle_w_labels:
        compression: gzip
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        customer_id: <CUSTOMER_ID>
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: 'AKAMAI_EAA'
        raw_log_field: body
        ingestion_labels:
          source: akamai_eaa
    
    service:
      pipelines:
        logs/akamai_eaa:
          receivers:
            - tcplog
          exporters:
            - chronicle/chronicle_w_labels
    
    • 次のように置き換えます。
      • <CUSTOMER_ID> は、実際の顧客 ID に置き換えます。
      • /path/to/ingestion-authentication-file.json の値を、Google SecOps の取り込み認証ファイルを取得するで認証ファイルを保存したパスに更新します。
      • 0.0.0.0:5140: Bindplane がリッスンする IP アドレスとポート。環境に合わせて必要に応じて調整します。

Bindplane エージェントを再起動して変更を適用する

  • Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。

    sudo systemctl restart bindplane-agent
    
  • Windows で Bindplane エージェントを再起動するには、Services コンソールを使用するか、次のコマンドを入力します。

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Akamai Unified Log Streamer をインストールする

Unified Log Streamer(ULS)は、Enterprise Application Access API を介して Akamai EAA からログを取得し、TCP または UDP を使用して Bindplane にストリーミングします。

Linux のインストール

  1. 最新の ULS リリースをダウンロードします。

    curl -LO https://github.com/akamai/uls/releases/latest/download/uls-linux-amd64
    
  2. バイナリを実行可能にします。

    chmod +x uls-linux-amd64
    
  3. 標準の場所に移動します。

    sudo mv uls-linux-amd64 /usr/local/bin/uls
    

macOS のインストール

  1. 最新の ULS リリースをダウンロードします。

    curl -LO https://github.com/akamai/uls/releases/latest/download/uls-darwin-amd64
    
  2. バイナリを実行可能にします。

    chmod +x uls-darwin-amd64
    
  3. 標準の場所に移動します。

    sudo mv uls-darwin-amd64 /usr/local/bin/uls
    

Docker のインストール

  1. 公式の ULS Docker イメージを pull します。

    docker pull akamai/uls:latest
    

Akamai EdgeGrid 認証情報を構成する

  1. EdgeGrid 認証情報ファイルを作成します。

    mkdir -p ~/.edgerc
    nano ~/.edgerc
    
  2. Akamai API 認証情報を次の形式で追加します。

    [default]
    client_secret = your-client-secret
    host = akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.luna.akamaiapis.net
    access_token = your-access-token
    client_token = your-client-token
    
  3. 認証情報ファイルを保護します。

    chmod 600 ~/.edgerc
    

次のように置き換えます。

  • your-client-secret: Akamai クライアント シークレット。
  • your-access-token: Akamai アクセス トークン。
  • your-client-token: Akamai クライアント トークン。
  • akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.luna.akamaiapis.net: Akamai API のベース ホスト名。

EAA ログを BindPlane にストリーミングするように ULS を構成する

コマンドライン実行(テスト)

TCP 出力で ULS を実行して、ログを Bindplane エージェントにストリーミングします。

  uls --input eaa \
      --feed access \
      --output tcp \
      --host <BINDPLANE_HOST> \
      --port 5140 \
      --edgerc ~/.edgerc \
      --section default
  • 次のように置き換えます。
    • <BINDPLANE_HOST>: Bindplane を実行しているサーバーの IP アドレスまたはホスト名
    • 5140: Bindplane の tcplog レシーバーで構成されたポート

複数のフィードタイプをストリーミングするには、個別の ULS インスタンスを実行します。

```bash
# Access logs
uls --input eaa --feed access --output tcp --host <BINDPLANE_HOST> --port 5140 --edgerc ~/.edgerc --section default

# Admin audit logs
uls --input eaa --feed admin --output tcp --host <BINDPLANE_HOST> --port 5140 --edgerc ~/.edgerc --section default

# Connector health
uls --input eaa --feed conhealth --output tcp --host <BINDPLANE_HOST> --port 5140 --edgerc ~/.edgerc --section default
```

Systemd サービス(本番環境)

本番環境のデプロイでは、ULS を systemd サービスとして構成します。

  1. ULS 構成ファイルを作成します。

    sudo mkdir -p /etc/uls
    sudo nano /etc/uls/eaa-access-tcp.conf
    
  2. 次の構成を追加します。

    ULS_INPUT=eaa
    ULS_FEED=access
    ULS_OUTPUT=tcp
    ULS_HOST=<BINDPLANE_HOST>
    ULS_PORT=5140
    ULS_EDGERC=/root/.edgerc
    ULS_SECTION=default
    
  3. systemd サービス ファイルを作成します。

    sudo nano /etc/systemd/system/uls-eaa-access.service
    
  4. 次の内容を追加します。

    [Unit]
    Description=Unified Log Streamer - EAA Access Logs to BindPlane
    After=network.target
    
    [Service]
    Type=simple
    EnvironmentFile=/etc/uls/eaa-access-tcp.conf
    ExecStart=/usr/local/bin/uls --input ${ULS_INPUT} --feed ${ULS_FEED} --output ${ULS_OUTPUT} --host ${ULS_HOST} --port ${ULS_PORT} --edgerc ${ULS_EDGERC} --section ${ULS_SECTION}
    Restart=always
    RestartSec=10
    User=root
    
    [Install]
    WantedBy=multi-user.target
    
  5. サービスを有効にして開始します。

    sudo systemctl daemon-reload
    sudo systemctl enable uls-eaa-access.service
    sudo systemctl start uls-eaa-access.service
    
  6. サービスが実行されていることを確認します。

    sudo systemctl status uls-eaa-access.service
    
  7. ログを表示します。

    sudo journalctl -u uls-eaa-access.service -f
    

別の名前(uls-eaa-admin.serviceuls-eaa-conhealth.service など)の構成ファイルとサービスファイルを作成して、追加のフィードタイプ(admin、conhealth)ごとに手順 1 ~ 7 を繰り返します。

Docker デプロイ

  1. Docker Compose ファイルを作成します。

    nano docker-compose.yml
    
  2. 次の構成を追加します。

    version: '3.8'
    
    services:
      uls-eaa-access:
        image: akamai/uls:latest
        container_name: uls-eaa-access
        restart: unless-stopped
        environment:
          - ULS_INPUT=eaa
          - ULS_FEED=access
          - ULS_OUTPUT=tcp
          - ULS_HOST=<BINDPLANE_HOST>
          - ULS_PORT=5140
        volumes:
          - ~/.edgerc:/root/.edgerc:ro
        command: >
          --input eaa
          --feed access
          --output tcp
          --host "$${ULS_HOST}"
          --port "$${ULS_PORT}"
          --edgerc /root/.edgerc
          --section default
    
      uls-eaa-admin:
        image: akamai/uls:latest
        container_name: uls-eaa-admin
        restart: unless-stopped
        environment:
          - ULS_INPUT=eaa
          - ULS_FEED=admin
          - ULS_OUTPUT=tcp
          - ULS_HOST=<BINDPLANE_HOST>
          - ULS_PORT=5140
        volumes:
          - ~/.edgerc:/root/.edgerc:ro
        command: >
          --input eaa
          --feed admin
          --output tcp
          --host "$${ULS_HOST}"
          --port "$${ULS_PORT}"
          --edgerc /root/.edgerc
          --section default
    
      uls-eaa-conhealth:
        image: akamai/uls:latest
        container_name: uls-eaa-conhealth
        restart: unless-stopped
        environment:
          - ULS_INPUT=eaa
          - ULS_FEED=conhealth
          - ULS_OUTPUT=tcp
          - ULS_HOST=<BINDPLANE_HOST>
          - ULS_PORT=5140
        volumes:
          - ~/.edgerc:/root/.edgerc:ro
        command: >
          --input eaa
          --feed conhealth
          --output tcp
          --host "$${ULS_HOST}"
          --port "$${ULS_PORT}"
          --edgerc /root/.edgerc
          --section default
    
    • <BINDPLANE_HOST> は、Bindplane サーバーの IP アドレスまたはホスト名に置き換えます。
  3. コンテナを起動します。

    docker-compose up -d
    
  4. ログを表示します。

    docker-compose logs -f
    

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
app target.application app フィールドのコロンの後の値。
apphost target.hostname 直接マッピングされます。
browser network.http.user_agent 直接マッピングされます。
bytes_in network.received_bytes 直接マッピングされます。
bytes_out network.sent_bytes 直接マッピングされます。
cc principal.location.country_or_region 直接マッピングされます。
client_id additional.fields.key: "Client Id", additional.fields.value.string_value: client_id client_id が存在する場合は条件付きでマッピングされます。
clientip principal.ip 直接マッピングされます。
cloud_zone principal.cloud.availability_zone 直接マッピングされます。
connector_resp_time security_result.detection_fields.key: "Connector response time", security_result.detection_fields.value: connector_resp_time connector_resp_time が空でないか「-」でない場合、条件付きでマッピングされます。
content_type additional.fields.key: "Content type", additional.fields.value.string_value: content_type content_type が存在する場合は条件付きでマッピングされます。
datetime metadata.event_timestamp RFC3339 形式を使用して datetime フィールドから解析されます。
deny_reason security_result.summary 直接マッピングされます。
device_type principal.platformprincipal.platform_version 正規表現の一致に基づいて WINDOWSLINUX、または MAC にマッピングされます。未加工の値は principal.platform_version にマッピングされます。
di metadata.ingestion_labels.key: "di", metadata.ingestion_labels.value: di 取り込みラベルとして直接マッピングされます。
error_code additional.fields.key: "Error code", additional.fields.value.string_value: error_code error_code が存在する場合は条件付きでマッピングされます。
event metadata.description 直接マッピングされます。
geo_city principal.location.city 直接マッピングされます。
geo_country principal.location.country_or_region 直接マッピングされます。
geo_state principal.location.state 直接マッピングされます。
groups principal.user.group_identifiers 直接マッピングされます。
http_method network.http.method 直接マッピングされます。
http_ver network.application_protocolnetwork.application_protocol_version grok を使用して解析され、プロトコルとバージョンが抽出されます。
idpinfo additional.fields.key: "IDP Info", additional.fields.value.string_value: idpinfo idpinfo が存在する場合は条件付きでマッピングされます。
internal_host additional.fields.key: "Internal host", additional.fields.value.string_value: internal_host internal_host が存在する場合は条件付きでマッピングされます。
metadata.log_type metadata.log_type 「AKAMAI_EAA」にハードコードされています。
metadata.product_name metadata.product_name 「AKAMAI_EAA」にハードコードされています。
metadata.vendor_name metadata.vendor_name 「AKAMAI_EAA」にハードコードされています。
metadata.event_type metadata.event_type ロジックによって決定されます。uid が存在する場合は USER_UNCATEGORIZEDprincipal.iptarget の両方が設定されている場合は NETWORK_HTTP、それ以外の場合は GENERIC_EVENT
origin_host additional.fields.key: "Origin host", additional.fields.value.string_value: origin_host origin_host が存在する場合は条件付きでマッピングされます。
origin_resp_time security_result.detection_fields.key: "オリジン応答時間", security_result.detection_fields.value: origin_resp_time origin_resp_time が空でないか「-」でない場合、条件付きでマッピングされます。
os principal.platform 正規表現の一致に基づいて WINDOWSMAC、または LINUX にマッピングされます。
port target.port app フィールドのコロンの後の値。
ral metadata.description ral 配列の連結値(カンマ区切り)。
referer network.http.referral_url 直接マッピングされます。
resource principal.resource.attribute.labels.key: "Resource", principal.resource.attribute.labels.value: resource resource が存在する場合は条件付きでマッピングされます。
resource_type principal.resource.attribute.labels.key: "Resource Type", principal.resource.attribute.labels.value: resource_type resource_type が存在する場合は条件付きでマッピングされます。
rscd metadata.ingestion_labels.key: "rscd", metadata.ingestion_labels.value: rscd 取り込みラベルとして直接マッピングされます。
session_id network.session_id 直接マッピングされます。
session_info additional.fields.key: 「セッション情報」、additional.fields.value.string_value: session_info session_info が存在する場合は条件付きでマッピングされます。
state principal.location.state 直接マッピングされます。
status_code network.http.response_code 直接マッピングされます。
total_resp_time security_result.detection_fields.key: "Total response time", security_result.detection_fields.value: total_resp_time total_resp_time が空でないか「-」でない場合、条件付きでマッピングされます。
ts metadata.event_timestamp 存在する場合は ts フィールドから UNIX ミリ秒または秒として解析され、存在しない場合は datetime フィールドから解析されます。
uid principal.user.userid 直接マッピングされます。
uip principal.ip 直接マッピングされます。
url_path target.url 直接マッピングされます。
user_agent network.http.user_agentnetwork.http.parsed_user_agent 直接マッピングされ、構造化された parsed_user_agent フィールドに解析されます。
username principal.user.email_addresses または principal.user.userid メールアドレスのように見える場合は email_addresses に、それ以外の場合は userid にマッピングされます。

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。