HashiCorp Vault-Audit-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie HashiCorp Vault-Audit-Logs mit Bindplane in Google Security Operations aufnehmen können.

HashiCorp Vault ist eine Plattform für die Verwaltung von Secrets und den Datenschutz, die sichere Speicherung, dynamische Secret-Generierung, Datenverschlüsselung und identitätsbasierte Zugriffssteuerung bietet. In Vault werden Audit-Logs erstellt, in denen alle Anfragen und Antworten an Vault aufgezeichnet werden, einschließlich Authentifizierung, Secret-Zugriff und Richtlinienänderungen. Diese Audit-Logs können über Syslog an ein SIEM zur Sicherheitsüberwachung und Compliance weitergeleitet werden.

Hinweis

Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:

  • Eine Google SecOps-Instanz.
  • Windows Server 2016 oder höher oder Linux-Host mit systemd.
  • Netzwerkverbindung zwischen dem Bindplane-Agent und dem HashiCorp Vault-Server.
  • Wenn Sie den Agent hinter einem Proxy ausführen, achten Sie darauf, dass die Firewallports gemäß den Anforderungen des Bindplane-Agents geöffnet sind.
  • Privilegierter Zugriff auf den HashiCorp Vault-Server (Root-Token oder ausreichende Richtlinienberechtigungen zum Aktivieren von Audit-Geräten).

Authentifizierungsdatei für die Google SecOps-Datenaufnahme abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Collection Agents auf.
  3. Laden Sie die Authentifizierungsdatei für die Aufnahme herunter.
  4. Speichern Sie die Datei sicher auf dem System, auf dem BindPlane installiert wird.

Google SecOps-Kundennummer abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Profile auf.
  3. Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.

BindPlane-Agent installieren

Installieren Sie den Bindplane-Agent auf Ihrem Windows- oder Linux-Betriebssystem gemäß der folgenden Anleitung.

Fenstereinbau

  1. Öffnen Sie die Eingabeaufforderung oder PowerShell als Administrator.
  2. Führen Sie dazu diesen Befehl aus:

    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. Warten Sie, bis die Installation abgeschlossen ist.

  4. Überprüfen Sie die Installation mit folgendem Befehl:

    sc query observiq-otel-collector
    

Der Dienst sollte als RUNNING (Wird ausgeführt) angezeigt werden.

Linux-Installation

  1. Öffnen Sie ein Terminal mit Root- oder Sudo-Berechtigungen.
  2. Führen Sie dazu diesen Befehl aus:

    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. Warten Sie, bis die Installation abgeschlossen ist.

  4. Überprüfen Sie die Installation mit folgendem Befehl:

    sudo systemctl status observiq-otel-collector
    

Der Dienst sollte als aktiv (wird ausgeführt) angezeigt werden.

Zusätzliche Installationsressourcen

Weitere Installationsoptionen und Informationen zur Fehlerbehebung finden Sie in der Installationsanleitung für den Bindplane-Agent.

BindPlane-Agent zum Erfassen von Syslog-Daten und Senden an Google SecOps konfigurieren

Konfigurationsdatei suchen

  • Linux:

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

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

Konfigurationsdatei bearbeiten

  • Ersetzen Sie den gesamten Inhalt von config.yaml durch die folgende Konfiguration:

    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
    

Konfigurationsparameter

Ersetzen Sie die folgenden Platzhalter:

  • Empfängerkonfiguration:

    • listen_address: IP-Adresse und Port, auf dem gelauscht werden soll. Verwenden Sie 0.0.0.0, um alle Schnittstellen zu überwachen. Der Port 1514 wird empfohlen, um Root-Berechtigungen unter Linux zu vermeiden.
  • Exporter-Konfiguration:

    • creds_file_path: Vollständiger Pfad zur Datei für die Authentifizierung bei der Aufnahme:
      • Linux: /etc/bindplane-agent/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: Ihre Google SecOps-Kundennummer.
    • endpoint: Regionale Endpunkt-URL:
      • USA: malachiteingestion-pa.googleapis.com
      • Europa: europe-malachiteingestion-pa.googleapis.com
      • Asien: asia-southeast1-malachiteingestion-pa.googleapis.com
      • Eine vollständige Liste finden Sie unter Regionale Endpunkte.
    • ingestion_labels: Optionale Labels im YAML-Format (z. B. env: production).

Konfigurationsdatei speichern

Speichern Sie die Datei nach der Bearbeitung:

  • Linux: Drücken Sie Ctrl+O, dann Enter und dann Ctrl+X.
  • Windows: Klicken Sie auf Datei > Speichern.

Bindplane-Agent neu starten, um die Änderungen zu übernehmen

So starten Sie den Bindplane-Agent unter Linux neu:

  1. Führen Sie dazu diesen Befehl aus:

    sudo systemctl restart observiq-otel-collector
    
  2. Prüfen Sie, ob der Dienst ausgeführt wird:

    sudo systemctl status observiq-otel-collector
    
  3. Logs auf Fehler prüfen:

    sudo journalctl -u observiq-otel-collector -f
    

So starten Sie den Bindplane-Agent unter Windows neu:

  1. Wählen Sie eine der folgenden Optionen aus:

    • Eingabeaufforderung oder PowerShell als Administrator:
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • Dienste-Konsole:
      1. Drücken Sie Win+R, geben Sie services.msc ein und drücken Sie die Eingabetaste.
      2. Suchen Sie nach observIQ OpenTelemetry Collector.
      3. Klicken Sie mit der rechten Maustaste und wählen Sie Neu starten aus.
  2. Prüfen Sie, ob der Dienst ausgeführt wird:

    sc query observiq-otel-collector
    
  3. Logs auf Fehler prüfen:

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

Weiterleitung von HashiCorp Vault-Audit-Logs über Syslog konfigurieren

Vault-Audit-Geräte protokollieren alle Anfragen und Antworten. Sie können ein Syslog-Audit-Gerät aktivieren, um Audit-Logs an den Bindplane-Agent weiterzuleiten.

Syslog-Prüfgerät aktivieren

  1. Öffnen Sie ein Terminal mit Zugriff auf die Vault-Befehlszeile und einem gültigen Vault-Token.
  2. Führen Sie den folgenden Befehl aus, um das Syslog-Audit-Gerät zu aktivieren:

    vault audit enable syslog tag="vault" facility="AUTH"
    
  3. Prüfen Sie, ob das Prüfgerät aktiviert ist:

    vault audit list
    

In der Ausgabe sollte das Syslog-Audit-Gerät als enabled angezeigt werden.

Syslog-Weiterleitung an den Bindplane-Agent konfigurieren

Nachdem Sie das Syslog-Audit-Gerät von Vault aktiviert haben, konfigurieren Sie den Syslog-Daemon des Systems (rsyslog oder syslog-ng), um Vault-Audit-Logs an den Bindplane-Agent weiterzuleiten.

Option – rsyslog-Konfiguration

  1. Erstellen Sie eine neue rsyslog-Konfigurationsdatei:

    sudo nano /etc/rsyslog.d/50-vault-forward.conf
    
  2. Fügen Sie die folgende Konfiguration hinzu:

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

    Ersetzen Sie BINDPLANE_IP durch die IP-Adresse des Bindplane-Agent-Hosts.

  3. Starten Sie rsyslog neu:

    sudo systemctl restart rsyslog
    

Option – syslog-ng-Konfiguration

  1. Bearbeiten Sie die syslog-ng-Konfigurationsdatei:

    sudo nano /etc/syslog-ng/conf.d/vault-forward.conf
    
  2. Fügen Sie die folgende Konfiguration hinzu:

    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);
    };
    

    Ersetzen Sie BINDPLANE_IP durch die IP-Adresse des Bindplane-Agent-Hosts.

  3. Starten Sie syslog-ng neu:

    sudo systemctl restart syslog-ng
    

Alternative: Dateibasierte Prüfung mit Log-Forwarder

Wenn Sie kein Syslog-Audit bevorzugen, können Sie ein Datei-Audit-Gerät aktivieren und den Dateiinhalt weiterleiten:

  1. Gerät für Datei-Audit aktivieren:

    vault audit enable file file_path=/var/log/vault/audit.log
    
  2. Konfigurieren Sie rsyslog so, dass die Datei überwacht und weitergeleitet wird:

    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
    

    Ersetzen Sie BINDPLANE_IP durch die IP-Adresse des Bindplane-Agent-Hosts.

  3. Starten Sie rsyslog neu:

    sudo systemctl restart rsyslog
    

Logweiterleitung überprüfen

  1. Vault-Vorgang ausführen (z. B. Anmeldung oder Lesen eines Secrets):

    vault login token=<YOUR_TOKEN>
    
  2. Prüfen Sie die BindPlane-Agentenlogs, um zu bestätigen, dass Logs empfangen werden.

Weitere Informationen finden Sie in der Dokumentation zu HashiCorp Vault-Audit-Geräten.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
auth.client_token network.session_id Wert aus auth.client_token (gehasht).
auth.display_name principal.user.user_display_name Wert aus auth.display_name.
auth.metadata.role_name principal.user.attribute.roles.name Wert aus auth.metadata.role_name.
auth.policies principal.user.attribute.permissions.name Werte aus dem auth.policies-Array.
auth.token_type additional.fields Der Wert wird aus auth.token_type übernommen und mit dem Schlüssel token_type hinzugefügt.
request.id metadata.product_log_id Wert aus request.id.
request.operation metadata.product_event_type Wert aus request.operation.
request.path target.resource.name Wert aus request.path.
request.remote_address principal.ip Wert aus request.remote_address.
request.namespace.id target.namespace Wert aus request.namespace.id.
response.auth.client_token network.session_id Wert aus der Antwort client_token (gehasht).
type metadata.product_event_type Wird an den Vorgang angehängt (z. B. request oder response).
time metadata.event_timestamp Wird als RFC 3339-Zeitstempel geparst.
error security_result.description Der Wert wird aus error übernommen, falls vorhanden.
metadata.vendor_name Auf HashiCorp festgelegt.
metadata.product_name Legen Sie Vault fest.
metadata.event_type Auf USER_RESOURCE_ACCESS für geheime Vorgänge, USER_LOGIN für Authentifizierungsvorgänge und GENERIC_EVENT für alle anderen Vorgänge festlegen.
response.auth.metadata.username event.idm.read_only_udm.target.user.userid Aus dem Änderungsprotokoll zugeordnet
appname event.idm.read_only_udm.target.application Aus dem Änderungsprotokoll zugeordnet
priority event.idm.read_only_udm.security_result.priority_details Aus dem Änderungsprotokoll zugeordnet
proc_id event.idm.read_only_udm.observer.process.pid Aus dem Änderungsprotokoll zugeordnet
auth.policies event.idm.read_only_udm.additional.fields Aus dem Änderungsprotokoll zugeordnet
auth.token_policies event.idm.read_only_udm.additional.fields Aus dem Änderungsprotokoll zugeordnet
request.policy_override event.idm.read_only_udm.target.resource.attribute.labels Aus dem Änderungsprotokoll zugeordnet
response.data.admin_password event.idm.read_only_udm.target.resource.attribute.labels Aus dem Änderungsprotokoll zugeordnet
response.data.admin_token event.idm.read_only_udm.target.resource.attribute.labels Aus dem Änderungsprotokoll zugeordnet
response.data.admin_user event.idm.read_only_udm.target.resource.attribute.labels Aus dem Änderungsprotokoll zugeordnet
response.data.certificate event.idm.read_only_udm.target.resource.attribute.labels Aus dem Änderungsprotokoll zugeordnet
response.data.check_url event.idm.read_only_udm.target.resource.attribute.labels Aus dem Änderungsprotokoll zugeordnet
response.data.keystore event.idm.read_only_udm.target.resource.attribute.labels Aus dem Änderungsprotokoll zugeordnet
response.data.keystore_password event.idm.read_only_udm.target.resource.attribute.labels Aus dem Änderungsprotokoll zugeordnet
response.data.private_key event.idm.read_only_udm.target.resource.attribute.labels Aus dem Änderungsprotokoll zugeordnet
type event.idm.read_only_udm.additional.fields Aus dem Änderungsprotokoll zugeordnet
auth.identity_policies event.idm.read_only_udm.additional.fields Aus dem Änderungsprotokoll zugeordnet
request.data event.idm.read_only_udm.additional.fields Aus dem Änderungsprotokoll zugeordnet
facility event.idm.read_only_udm.additional.fields Aus dem Änderungsprotokoll zugeordnet
task event.idm.read_only_udm.additional.fields Aus dem Änderungsprotokoll zugeordnet
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 Aus dem Änderungsprotokoll zugeordnet
jsonPayload.request.namespace.id target.namespace Aus dem Änderungsprotokoll zugeordnet
jsonPayload.cos.googleapis.com/container_id", "jsonPayload.cos.googleapis.com/container_name", "jsonPayload.cos.googleapis.com/stream additional.fields Aus dem Änderungsprotokoll zugeordnet
resource.labels.instance_id principal.resource.product_object_id Aus dem Änderungsprotokoll zugeordnet
principal.resource.attribute.cloud.availability_zone resource.labels.zone Aus dem Änderungsprotokoll zugeordnet
logName security_result.category_details Aus dem Änderungsprotokoll zugeordnet
resource.labels.namespace_name target.namespace Aus dem Änderungsprotokoll zugeordnet
resource.labels.pod_name", "resource.labels.container_name additional.fields Aus dem Änderungsprotokoll zugeordnet
resource.labels.project_id target.cloud.project.name Aus dem Änderungsprotokoll zugeordnet
resource.labels.location target.location.name Aus dem Änderungsprotokoll zugeordnet
insertId metadata.product_log_id Aus dem Änderungsprotokoll zugeordnet
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 Aus dem Änderungsprotokoll zugeordnet
labels.compute.googleapis.com/resource_name target.resource.name Aus dem Änderungsprotokoll zugeordnet
status network.http.response_code Aus dem Änderungsprotokoll zugeordnet
runner principal.user.userid Aus dem Änderungsprotokoll zugeordnet
job_id", "job_status additional.fields Aus dem Änderungsprotokoll zugeordnet
host observer.hostname Aus dem Änderungsprotokoll zugeordnet
cluster observer.resource.name Aus dem Änderungsprotokoll zugeordnet
cluster observer.resource.resource_type Aus dem Änderungsprotokoll zugeordnet

Änderungsprotokoll

Änderungsprotokoll für diesen Parser ansehen

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten