Ivanti Connect Secure(Pulse Secure)のログを収集する

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

このドキュメントでは、Bindplane エージェントを使用して Ivanti Connect Secure(Pulse Secure)ログを Google Security Operations に取り込む方法について説明します。

Ivanti Connect Secure(旧 Pulse Secure)は、エンタープライズ アプリケーション、リソース、ネットワークへの安全なリモート アクセスを提供する SSL VPN ソリューションです。リモート ワーカーとパートナー向けに、多要素認証、エンドポイント コンプライアンス チェック、きめ細かいアクセス ポリシーをサポートしています。

始める前に

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

  • Google SecOps インスタンス
  • Windows Server 2016 以降、または systemd を使用する Linux ホスト
  • プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
  • Ivanti Connect Secure(Pulse Secure)管理コンソールへの特権アクセス

Bindplane エージェントの Google SecOps 認証情報を取得する

Bindplane エージェントを Google SecOps に対して認証するには、次のいずれかの方法を選択します。

  • 新規デプロイ: Chronicle API を使用します(オプション 1)。
  • 以前のデプロイ: 2027 年 7 月 20 日に Ingestion API が廃止されるまで、取り込み認証ファイル(オプション 2)を引き続き使用します。
  1. Google Cloud コンソールにログインし、Google SecOps インスタンスにリンクされている Google Cloud プロジェクトを選択します。
  2. [IAM と管理] > [サービス アカウント] に移動します。
  3. [サービス アカウントを作成] をクリックします。
  4. 次の構成情報を指定します。
    • サービス アカウント名: アカウントの名前を入力します(例: bindplane-ingest)。
    • サービス アカウントの説明: 説明を入力します(例: Bindplane agent log ingestion)。
  5. [作成して続行] をクリックします。
  6. [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、[ロールを選択] をクリックし、[Chronicle 編集者] を選択します。
  7. [続行] をクリックして [完了] をクリックします。
  8. 作成したサービス アカウントをクリックし、[キー] タブに移動します。
  9. [鍵を追加] > [新しい鍵を作成] の順にクリックします。
  10. [JSON] を選択し、[作成] をクリックします。鍵ファイルがパソコンにダウンロードされます。
  11. 鍵ファイルを ingestion-auth.json として Bindplane コレクタ ディレクトリ(Linux の場合は /opt/observiq-otel-collector/ingestion-auth.json、Windows の場合は C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json)に保存するか、config.yaml の creds_file_path を更新して、保存先のパスと一致させます。
  12. [IAM と管理] > [設定] に移動し、[プロジェクト番号] をコピーします。これはエクスポータの構成に必要です。

オプション 2: 取り込み認証ファイルをダウンロードする(レガシー)

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [収集エージェント] に移動します。
  3. 取り込み認証ファイルをダウンロードします。
  4. 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
    
  3. インストールが完了するまで待ちます。

  4. 次のコマンドを実行して、インストールの内容を確認します。

    sc query observiq-otel-collector
    

    サービスは RUNNING と表示されます。

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
    
  3. インストールが完了するまで待ちます。

  4. 次のコマンドを実行して、インストールの内容を確認します。

    sudo systemctl status observiq-otel-collector
    

    サービスは active (running) と表示されます。

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

その他のインストール オプションとトラブルシューティングについては、Bindplane エージェントのインストール ガイドをご覧ください。

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

構成ファイルを探す

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

構成ファイルを編集します。

  • config.yaml の内容全体を次の構成に置き換えます。

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/chronicle_w_labels:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        customer_id: 'YOUR_CUSTOMER_ID'
        endpoint: chronicle.googleapis.com
        log_type: 'PULSE_SECURE_VPN'
        raw_log_field: body
        ingestion_labels:
    
    service:
      pipelines:
        logs/source0__chronicle_w_labels-0:
          receivers:
            - udplog
          exporters:
            - chronicle/chronicle_w_labels
    

構成パラメータ

各プレースホルダを次のように置き換えます。

  • レシーバーの構成:

    • udplog: UDP Syslog には udplog、TCP Syslog には tcplog を使用します。
    • 0.0.0.0: リッスンする IP アドレス(すべてのインターフェースでリッスンする場合は 0.0.0.0)
    • 514: リッスンするポート番号(標準の syslog ポート)
  • エクスポータの構成:

    • creds_file_path: サービス アカウントの JSON キーファイルのフルパス(オプション 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • YOUR_CUSTOMER_ID: 「顧客 ID を取得する」セクションの顧客 ID
    • location: <LOCATION> を Google SecOps インスタンスのリージョン(us、europe、asia-southeast1 など)に置き換えます。エクスポートでは、この値が chronicle.googleapis.com の前に付加されます。完全なリストについては、リージョン エンドポイントをご覧ください。
    • project: <PROJECT_NUMBER> を [IAM と管理] > [設定] のプロジェクト番号に置き換えます。
    • endpoint: chronicle.googleapis.com に設定したままにします。
    • log_type: Chronicle に表示されるログタイプ(PULSE_SECURE_VPN)

以前の Ingestion API エクスポータ

  • オプション 2 の取り込み認証ファイルを使用する場合は、exporters ブロックを次のように置き換えます。creds_file_path を取り込み認証ファイルのパスに設定します。インスタンスが米国以外にある場合は、malachiteingestion-pa.googleapis.com をリージョン エンドポイント(例: europe-malachiteingestion-pa.googleapis.com)に置き換えます。

    exporters:
      chronicle/chronicle_w_labels:
        compression: gzip
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        customer_id: 'YOUR_CUSTOMER_ID'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: 'PULSE_SECURE_VPN'
        raw_log_field: body
        ingestion_labels:
    

構成ファイルを保存する

  • 編集が完了したら、ファイルを保存します。
    • Linux: Ctrl+O、Enter、Ctrl+X の順に押します。
    • Windows の場合: [ファイル] > [保存] をクリックします。

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

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

    sudo systemctl restart observiq-otel-collector
    
    1. サービスが実行されていることを確認します。

      sudo systemctl status observiq-otel-collector
      
    2. ログでエラーを確認します。

      sudo journalctl -u observiq-otel-collector -f
      
  • Windows で Bindplane エージェントを再起動するには、次のいずれかのオプションを選択します。

    • 管理者としてコマンド プロンプトまたは PowerShell を開きます。

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • サービス コンソール:

      1. Win+R キーを押し、「services.msc」と入力して Enter キーを押します。
      2. observIQ OpenTelemetry Collector を見つけます。
      3. 右クリックして [再起動] を選択します。
      4. サービスが実行されていることを確認します。

        sc query observiq-otel-collector
        
      5. ログでエラーを確認します。

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Ivanti Connect Secure(Pulse Secure)で syslog 転送を構成する

  1. Ivanti Connect Secure(旧 Pulse Secure)管理コンソールにログインします。
  2. [System] > [Log/Monitoring] に移動します。
  3. [Settings] タブをクリックします。
  4. syslog サーバーの構成セクションで、次の詳細を入力します。
    • サーバー名/IP: Bindplane エージェント ホストの IP アドレスまたは FQDN を入力します。
    • Facility: LOCAL0(または LOCAL0 ~ LOCAL7 の中から任意の Facility)を選択します。
    • タイプ: [UDP] を選択します。
    • フィルタ: [標準] を選択します。
    • ソース インターフェース: [グローバル](または Bindplane エージェントにアクセスできる特定のインターフェース)を選択します。
  5. [追加] をクリックします。
  6. [変更を保存] をクリックします。
  7. 各ローカルログタブで次の操作を行い、ログカテゴリごとに syslog レポートを有効にします。

    1. [イベント] タブをクリックし、syslog サーバーのチェックボックスをオンにして、[変更を保存] をクリックします。
    2. [User Access] タブをクリックし、syslog サーバーのチェックボックスをオンにして、[Save Changes] をクリックします。
    3. [管理者権限] タブをクリックし、Syslog サーバーのチェックボックスをオンにして、[変更を保存] をクリックします。
  8. Bindplane エージェント ログをチェックして、syslog メッセージが送信されていることを確認します。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
アクション security_result.action_details action フィールドから直接マッピングされます。
アプリケーション principal.application application フィールドから直接マッピングされます。
bytes_read network.received_bytes bytes_read フィールドから直接マッピングされ、符号なし整数に変換されます。
bytes_written network.sent_bytes bytes_written フィールドから直接マッピングされ、符号なし整数に変換されます。
client_host principal.hostname、principal.asset.hostname client_host フィールドから直接マッピングされます。
cmd principal.process.command_line cmd フィールドから直接マッピングされます。
connection_status security_result.detection_fields.value.string_value connection_status フィールドから直接マッピングされます。
data_time metadata.event_timestamp.seconds さまざまなタイムスタンプ形式(MM-dd-yyyy HH:mm:ss Z、RFC 3339、ISO8601、MMM d HH:mm:ss、MMM d HH:mm:ss)を使用して、data_time フィールドから解析されます。
devname principal.hostname、principal.asset.hostname devname フィールドから直接マッピングされます。
dstip target.ip、target.asset.ip dstip フィールドから直接マッピングされます。
dstport target.port dstport フィールドから直接マッピングされ、整数に変換されます。
dstcountry target.location.country_or_region 「Reserved」または空でない場合、dstcountry フィールドから直接マッピングされます。
期間 network.session_duration.seconds 再生時間フィードから直接マッピングされ、整数に変換されます。
dvc intermediary.hostname または intermediary.ip dvc フィールドを IP アドレスに変換できる場合は、intermediary.ip にマッピングされます。それ以外の場合は、intermediary.hostname にマッピングされます。
dvc_hostname intermediary.hostname、principal.hostname、principal.asset.hostname、または intermediary.ip、principal.ip、principal.asset.ip dvc_hostname フィールドを IP アドレスに変換できる場合は、それぞれの IP フィールドにマッピングされます。それ以外の場合は、それぞれのホスト名フィールドにマッピングされます。
event_type metadata.product_event_type event_type フィールドから直接マッピングされます。
failure_reason security_result.description failure_reason フィールドから直接マッピングされます。メッセージに「because host」が含まれている場合、失敗理由の先頭に「host」というテキストが追加されます。
has_principal event.idm.read_only_udm.principal(存在) プリンシパル フィールドが入力されている場合は「true」、それ以外の場合は「false」に設定します。パーサー ロジックによって取得されます。
has_target event.idm.read_only_udm.target(存在) いずれかのターゲット フィールドが入力されている場合は「true」、それ以外の場合は「false」に設定します。パーサー ロジックによって取得されます。
has_target_user event.idm.read_only_udm.target.user.userid(存在) target.user.userid が入力されている場合は「true」に設定し、それ以外の場合は「false」に設定します。パーサー ロジックによって取得されます。
host_ip principal.ip, principal.asset.ip host_ip フィールドから直接マッピングされます。
host_mac principal.mac host_mac フィールドから直接マッピングされ、ハイフンがコロンに置き換えられます。
http_method network.http.method http_method フィールドから直接マッピングされます。
http_response network.http.response_code http_response フィールドから直接マッピングされ、整数に変換されます。
info_desc about.labels.value info_desc フィールドから直接マッピングされます。
ip_new target.ip、target.asset.ip ip_new フィールドから直接マッピングされます。
レベル security_result.severity、security_result.severity_details security_result.severity は、level フィールド(「error」/「warning」-> HIGH、「notice」-> MEDIUM、「information」/「info」-> LOW)から取得されます。レベルの生の値も security_result.severity_details にマッピングされます。
logid metadata.product_log_id logid フィールドから直接マッピングされます。
locip principal.ip、principal.asset.ip locip フィールドから直接マッピングされます。
メッセージ metadata.description grok フィルタと kv フィルタを使用してさまざまなフィールドを抽出するために使用されます。メッセージに「EventID」が含まれている場合、Windows イベントログとして処理されます。
message_info metadata.description より具体的な grok パターンで使用されていない場合は、metadata.description に直接マッピングされます。
msg metadata.product_event_type、metadata.description msg フィールドが存在する場合、商品タイプが抽出されて metadata.product_event_type にマッピングされ、残りのメッセージは metadata.description にマッピングされます。
msg_hostname principal.hostname、principal.asset.hostname msg_hostname フィールドから直接マッピングされます。
msg_ip principal.ip、principal.asset.ip msg_ip フィールドから直接マッピングされます。
msg_user_agent network.http.user_agent、network.http.parsed_user_agent、metadata.product_version ユーザー エージェント文字列は network.http.user_agent にマッピングされ、解析されたユーザー エージェントは network.http.parsed_user_agent にマッピングされ、プロダクト バージョン(存在する場合)は metadata.product_version にマッピングされます。
network_duration network.session_duration.seconds network_duration フィールドから直接マッピングされ、整数に変換されます。
policyid security_result.rule_id policyid フィールドから直接マッピングされます。
policyname security_result.rule_name policyname フィールドから直接マッピングされます。
policytype security_result.rule_type policytype フィールドから直接マッピングされます。
priority_code about.labels.value priority_code フィールドから直接マッピングされ、「Severity」キーの about.labels.value を導出するためにも使用されます(ロジックを参照)。
prod_name metadata.product_name prod_name フィールドから直接マッピングされます。
product_type metadata.product_event_type product_type フィールドから直接マッピングされます。
product_version metadata.product_version product_version フィールドから直接マッピングされます。
proto network.ip_protocol ルックアップを使用して IP プロトコル名に変換された後、network.ip_protocol にマッピングされます。
pwd principal.process.file.full_path pwd フィールドから直接マッピングされます。
レルム principal.group.attribute.labels.value realm フィールドから直接マッピングされます。
rcvdbyte network.received_bytes rcvdbyte フィールドから直接マッピングされ、符号なし整数に変換されます。
remip target.ip remip フィールドから直接マッピングされます。
resource_name target.resource.name 先頭と末尾の空白文字とハイフンを削除した後、resource_name フィールドから直接マッピングされます。
resource_status security_result.description resource_status フィールドから直接マッピングされます。
resource_user_group principal.user.group_identifiers resource_user_group フィールドから直接マッピングされます。
resource_user_name principal.user.userid resource_user_name フィールドから直接マッピングされます。
ロール principal.user.group_identifiers roles フィールドから直接マッピングされます。
sentbyte network.sent_bytes sentbyte フィールドから直接マッピングされ、符号なし整数に変換されます。
session_id network.session_id session_id フィールドから直接マッピングされます。
sessionid network.session_id sessionid フィールドから直接マッピングされます。
srcip principal.ip、principal.asset.ip srcip フィールドから直接マッピングされます。
srcport principal.port srcport フィールドから直接マッピングされ、整数に変換されます。
srccountry principal.location.country_or_region 「Reserved」でも空でもない場合、srccountry フィールドから直接マッピングされます。
subtype metadata.product_event_type type と組み合わせて metadata.product_event_type を形成します。
target_file target.file.full_path target_file フィールドから直接マッピングされます。
target_host target.hostname、target.asset.hostname target_host フィールドから直接マッピングされます。
target_ip target.ip、target.asset.ip target_ip フィールドから直接マッピングされます。
target_port target.port target_port フィールドから直接マッピングされ、整数に変換されます。
target_url target.url target_url フィールドから直接マッピングされます。
時間 metadata.event_timestamp.seconds 「yyyy-MM-dd HH:mm:ss」形式を使用して、時間フィールドから解析されます。
type metadata.product_event_type subtype と組み合わせて使用され、metadata.product_event_type を形成します。
u_event_source_ip principal.ip、principal.asset.ip、target.ip target_ip または target_host が存在する場合、u_event_source_ip は principal.ip と principal.asset.ip にマッピングされます。それ以外の場合、target_ip、target_host、target_url がすべて空であれば、u_event_source_ip は target.ip にマッピングされます。
u_observer_ip observer.ip u_observer_ip フィールドから直接マッピングされます。
u_prin_ip principal.ip, principal.asset.ip u_prin_ip フィールドから直接マッピングされます。
ユーザー target.user.userid ユーザー フィールドから直接マッピングされます。
user_agent network.http.user_agent、network.http.parsed_user_agent ユーザー エージェント文字列は network.http.user_agent にマッピングされ、解析されたユーザー エージェントは network.http.parsed_user_agent にマッピングされます。
user_group_identifier target.user.group_identifiers または principal.user.group_identifiers ほとんどの場合、target.user.group_identifiers にマッピングされます。IP 変更(USER_UNCATEGORIZED)イベントと Realm 制限イベントの principal.user.group_identifiers にマッピングされます。
user_ip principal.ip、principal.asset.ip user_ip フィールドから直接マッピングされます。空で、u_event_source_ip が空でない場合は、u_event_source_ip の値が使用されます。
ユーザー名 principal.user.userid または target.user.userid ほとんどの場合、principal.user.userid にマッピングされます。特定のシナリオ(detect_user_logout_failed が false で、detect_policy_change_failed が false の場合など)で target.user.userid にマッピングされます。
username_removed target.user.userid username_removed フィールドから直接マッピングされます。
vd principal.administrative_domain vd フィールドから直接マッピングされます。
client_ip event.idm.read_only_udm.principal.ip 変更履歴からマッピング
client_ip event.idm.read_only_udm.principal.asset.ip 変更履歴からマッピング
req_host event.idm.read_only_udm.target.hostname 変更履歴からマッピング
req_host event.idm.read_only_udm.target.asset.hostname 変更履歴からマッピング
target_url event.idm.read_only_udm.target.url 変更履歴からマッピング
http_method event.idm.read_only_udm.network.http.method 変更履歴からマッピング
referrer_url event.idm.read_only_udm.network.http.referral_url 変更履歴からマッピング
sr_action event.idm.read_only_udm.security_result.action 変更履歴からマッピング
http_version event.idm.read_only_udm.network.application_protocol_version 変更履歴からマッピング
server_name event.idm.read_only_udm.intermediary.hostname 変更履歴からマッピング
server_name event.idm.read_only_udm.intermediary.asset.hostname 変更履歴からマッピング
BLOCK security_result.action 変更履歴からマッピング
Pulse Secure VPN metadatda.product_name 変更履歴からマッピング
observer_hostname observer.hostname 変更履歴からマッピング
priority_code", "Syslog_version", and "info_desc about.labels 変更履歴からマッピング

変更ログ

このパーサーの変更ログを表示する

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