HashiCorp Vault 監査ログを収集する

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

このドキュメントでは、Bindplane を使用して HashiCorp Vault 監査ログを Google Security Operations に取り込む方法について説明します。

HashiCorp Vault は、安全なストレージ、動的なシークレットの生成、データの暗号化、ID ベースのアクセス制御を提供するシークレット管理とデータ保護のプラットフォームです。Vault は、認証、シークレット アクセス、ポリシーの変更など、Vault へのすべてのリクエストとレスポンスを記録する監査ログを生成します。これらの監査ログは、syslog を使用して SIEM に転送し、セキュリティ モニタリングとコンプライアンスに使用できます。

始める前に

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

  • Google SecOps インスタンス。
  • Windows Server 2016 以降、または systemd を使用する Linux ホスト。
  • Bindplane エージェントと HashiCorp Vault サーバー間のネットワーク接続。
  • プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
  • HashiCorp Vault サーバーへの特権アクセス(監査デバイスを有効にするためのルートトークンまたは十分なポリシー権限)。

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

  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](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](https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh))" install_unix.sh
    
  3. インストールが完了するまで待ちます。

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

    sudo systemctl status observiq-otel-collector
    

サービスが [アクティブ(実行中)] と表示されます。

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

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

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

構成ファイルを探す

  • Linux:

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows:

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

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

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

    receivers:
      tcplog:
        listen_address: "0.0.0.0:1514"
    
    exporters:
      chronicle/vault:
        compression: gzip
        creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
        customer_id: 'your-customer-id-here'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: HASHICORP
        raw_log_field: body
        ingestion_labels:
          env: production
    
    service:
      pipelines:
        logs/vault_to_chronicle:
          receivers:
            - tcplog
          exporters:
            - chronicle/vault
    

構成パラメータ

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

  • レシーバーの構成:

    • listen_address: リッスンする IP アドレスとポート。すべてのインターフェースでリッスンするには、0.0.0.0 を使用します。Linux で root 権限を必要としないようにするには、ポート 1514 を使用することをおすすめします。
  • エクスポータの構成:

    • creds_file_path: 取り込み認証ファイルのフルパス:
      • Linux: /etc/bindplane-agent/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: Google SecOps のお客様 ID。
    • endpoint: リージョナル エンドポイント URL:
      • 米国: malachiteingestion-pa.googleapis.com
      • ヨーロッパ: europe-malachiteingestion-pa.googleapis.com
      • アジア: asia-southeast1-malachiteingestion-pa.googleapis.com
      • 完全なリストについては、リージョン エンドポイントをご覧ください。
    • ingestion_labels: YAML 形式の省略可能なラベル(例: env: production)。

構成ファイルを保存する

編集が完了したら、ファイルを保存します。

  • Linux: Ctrl+OEnterCtrl+X の順に押します。
  • Windows: [ファイル> 保存] をクリックします。

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

Linux で Bindplane エージェントを再起動するには:

  1. 次のコマンドを実行します。

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

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

    sudo journalctl -u observiq-otel-collector -f
    

Windows で Bindplane エージェントを再起動するには:

  1. 次のいずれかのオプションを選択します。

    • 管理者としてコマンド プロンプトまたは PowerShell を開きます。
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • サービス コンソール:
      1. Win+R キーを押して「services.msc」と入力し、Enter キーを押します。
      2. observIQ OpenTelemetry Collector を見つけます。
      3. 右クリックして [再起動] を選択します。
  2. サービスが実行されていることを確認します。

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

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

syslog 経由で HashiCorp Vault 監査ログ転送を構成する

Vault 監査デバイスは、すべてのリクエストとレスポンスをログに記録します。syslog 監査デバイスを有効にして、監査ログを Bindplane エージェントに転送できます。

syslog 監査デバイスを有効にする

  1. Vault CLI と有効な Vault トークンにアクセスできるターミナルを開きます。
  2. 次のコマンドを実行して、syslog 監査デバイスを有効にします。

    vault audit enable syslog tag="vault" facility="AUTH"
    
  3. 監査デバイスが有効になっていることを確認します。

    vault audit list
    

出力には、syslog 監査デバイスが有効と表示されます。

Bindplane エージェントへの syslog 転送を構成する

Vault syslog 監査デバイスを有効にしたら、Vault 監査ログを Bindplane エージェントに転送するようにシステム syslog デーモン(rsyslog または syslog-ng)を構成します。

オプション - rsyslog の構成

  1. 新しい rsyslog 構成ファイルを作成します。

    sudo nano /etc/rsyslog.d/50-vault-forward.conf
    
  2. 次の構成を追加します。

    # Forward Vault audit logs to Bindplane agent
    if $programname == 'vault' then @@BINDPLANE_IP:1514
    

    BINDPLANE_IP は、Bindplane エージェント ホストの IP アドレスに置き換えます。

  3. rsyslog を再起動します。

    sudo systemctl restart rsyslog
    

オプション - syslog-ng 構成

  1. syslog-ng 構成ファイルを編集します。

    sudo nano /etc/syslog-ng/conf.d/vault-forward.conf
    
  2. 次の構成を追加します。

    destination d_bindplane {
        network("BINDPLANE_IP" port(1514) transport("tcp"));
    };
    
    filter f_vault {
        program("vault");
    };
    
    log {
        source(s_src);
        filter(f_vault);
        destination(d_bindplane);
    };
    

    BINDPLANE_IP は、Bindplane エージェント ホストの IP アドレスに置き換えます。

  3. syslog-ng を再起動します。

    sudo systemctl restart syslog-ng
    

代替案 - ログ転送ツールを使用したファイルベースの監査

syslog 監査が推奨されない場合は、ファイル監査デバイスを有効にして、ファイルの内容を転送できます。

  1. ファイル監査デバイスを有効にします。

    vault audit enable file file_path=/var/log/vault/audit.log
    
  2. ファイルをモニタリングして転送するように rsyslog を構成します。

    sudo nano /etc/rsyslog.d/50-vault-file-forward.conf
    
    module(load="imfile")
    input(type="imfile"
        File="/var/log/vault/audit.log"
        Tag="vault-audit"
        Severity="info"
        Facility="auth")
    
    if $syslogtag == 'vault-audit' then @@BINDPLANE_IP:1514
    

    BINDPLANE_IP は、Bindplane エージェント ホストの IP アドレスに置き換えます。

  3. rsyslog を再起動します。

    sudo systemctl restart rsyslog
    

ログ転送を確認する

  1. Vault オペレーション(ログインやシークレットの読み取りなど)を実行します。

    vault login token=<YOUR_TOKEN>
    
  2. Bindplane エージェント ログを調べて、ログが受信されていることを確認します。

詳細については、HashiCorp Vault 監査デバイスのドキュメントをご覧ください。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
auth.client_token network.session_id auth.client_token から取得された値(ハッシュ化)。
auth.display_name principal.user.user_display_name auth.display_name から取得された値。
auth.metadata.role_name principal.user.attribute.roles.name auth.metadata.role_name から取得された値。
auth.policies principal.user.attribute.permissions.name auth.policies 配列から取得された値。
auth.token_type additional.fields auth.token_type から取得した値が、キー token_type とともに追加されます。
request.id metadata.product_log_id request.id から取得された値。
request.operation metadata.product_event_type request.operation から取得された値。
request.path target.resource.name request.path から取得された値。
request.remote_address principal.ip request.remote_address から取得された値。
request.namespace.id target.namespace request.namespace.id から取得された値。
response.auth.client_token network.session_id レスポンス client_token から取得された値(ハッシュ化)。
type metadata.product_event_type オペレーション(requestresponse など)に追加されます。
time metadata.event_timestamp RFC 3339 タイムスタンプとして解析されます。
error security_result.description error が存在する場合は、その値が使用されます。
metadata.vendor_name [HashiCorp] に設定します。
metadata.product_name Vault に設定します。
metadata.event_type シークレット オペレーションの場合は USER_RESOURCE_ACCESS、認証オペレーションの場合は USER_LOGIN、それ以外の場合は GENERIC_EVENT に設定します。
response.auth.metadata.username event.idm.read_only_udm.target.user.userid 変更履歴からマッピング
appname event.idm.read_only_udm.target.application 変更履歴からマッピング
priority event.idm.read_only_udm.security_result.priority_details 変更履歴からマッピング
proc_id event.idm.read_only_udm.observer.process.pid 変更履歴からマッピング
auth.policies event.idm.read_only_udm.additional.fields 変更履歴からマッピング
auth.token_policies event.idm.read_only_udm.additional.fields 変更履歴からマッピング
request.policy_override event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
response.data.admin_password event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
response.data.admin_token event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
response.data.admin_user event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
response.data.certificate event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
response.data.check_url event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
response.data.keystore event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
response.data.keystore_password event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
response.data.private_key event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
type event.idm.read_only_udm.additional.fields 変更履歴からマッピング
auth.identity_policies event.idm.read_only_udm.additional.fields 変更履歴からマッピング
request.data event.idm.read_only_udm.additional.fields 変更履歴からマッピング
facility event.idm.read_only_udm.additional.fields 変更履歴からマッピング
task event.idm.read_only_udm.additional.fields 変更履歴からマッピング
jsonPayload.auth.policy_results.granting_policies.type", "jsonPayload.auth.policy_results.granting_policies.name", and "jsonPayload.auth.policy_results.granting_policies.namespace_id additional.fields 変更履歴からマッピング
jsonPayload.request.namespace.id target.namespace 変更履歴からマッピング
jsonPayload.cos.googleapis.com/container_id", "jsonPayload.cos.googleapis.com/container_name", "jsonPayload.cos.googleapis.com/stream additional.fields 変更履歴からマッピング
resource.labels.instance_id principal.resource.product_object_id 変更履歴からマッピング
principal.resource.attribute.cloud.availability_zone resource.labels.zone 変更履歴からマッピング
logName security_result.category_details 変更履歴からマッピング
resource.labels.namespace_name target.namespace 変更履歴からマッピング
resource.labels.pod_name", "resource.labels.container_name additional.fields 変更履歴からマッピング
resource.labels.project_id target.cloud.project.name 変更履歴からマッピング
resource.labels.location target.location.name 変更履歴からマッピング
insertId metadata.product_log_id 変更履歴からマッピング
labels.k8s-pod/app_kubernetes_io/instance", "labels.k8s-pod/app_kubernetes_io/name", "labels.k8s-pod/component", "labels.k8s-pod/helm_sh/chart", "labels.k8s-pod/controller-revision-hash", "labels.k8s-pod/vault-initialized", "labels.k8s-pod/vault-version", "labels.k8s-pod/vault-sealed", "labels.k8s-pod/vault-perf-standby", and "labels.k8s-pod/vault-active target.resource.attribute.labels 変更履歴からマッピング
labels.compute.googleapis.com/resource_name target.resource.name 変更履歴からマッピング
status network.http.response_code 変更履歴からマッピング
runner principal.user.userid 変更履歴からマッピング
job_id", "job_status additional.fields 変更履歴からマッピング
host observer.hostname 変更履歴からマッピング
cluster observer.resource.name 変更履歴からマッピング
cluster observer.resource.resource_type 変更履歴からマッピング

変更履歴

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

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