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. Vault erstellt Audit-Logs, 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, müssen die Firewallports gemäß den Anforderungen des Bindplane-Agents geöffnet sein.
  • Privilegierter Zugriff auf den HashiCorp Vault-Server (Root-Token oder ausreichende Richtlinienberechtigungen zum Aktivieren von Audit-Geräten).

Google SecOps-Anmeldedaten für den Bindplane-Agenten abrufen

Wählen Sie eine der folgenden Methoden aus, um den Bindplane-Agent bei Google SecOps zu authentifizieren:

  • Neue Bereitstellungen: Verwenden Sie die Chronicle API (Option 1).
  • Alte Bereitstellungen: Verwenden Sie die Datei für die Authentifizierung bei der Aufnahme (Option 2) weiterhin, bis die Ingestion API am 20. Juli 2027 eingestellt wird.
  1. Melden Sie sich in der Google Cloud -Konsole an und wählen Sie das Google Cloud -Projekt aus, das mit Ihrer Google SecOps-Instanz verknüpft ist.
  2. Rufen Sie IAM & Verwaltung > Dienstkonten auf.
  3. Klicken Sie auf Dienstkonto erstellen.
  4. Geben Sie die folgenden Konfigurationsdetails an:
    • Name des Dienstkontos: Geben Sie einen Namen für das Konto ein, z. B. bindplane-ingest.
    • Dienstkontobeschreibung: Geben Sie eine Beschreibung ein (z. B. Bindplane agent log ingestion).
  5. Klicken Sie auf Erstellen und fortfahren.
  6. Klicken Sie im Abschnitt Diesem Dienstkonto Zugriff auf das Projekt erteilen auf Rolle auswählen und wählen Sie Chronicle-Bearbeiter aus.
  7. Klicken Sie auf Weiter und dann auf Fertig.
  8. Klicken Sie auf das erstellte Dienstkonto und rufen Sie dann den Tab Schlüssel auf.
  9. Klicken Sie auf Schlüssel hinzufügen > Neuen Schlüssel erstellen.
  10. Wählen Sie JSON aus und klicken Sie auf Erstellen. Die Schlüsseldatei wird auf Ihren Computer heruntergeladen.
  11. Speichern Sie die Schlüsseldatei als ingestion-auth.json im Bindplane-Collector-Verzeichnis (/opt/observiq-otel-collector/ingestion-auth.json unter Linux oder C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json unter Windows) oder aktualisieren Sie creds_file_path in config.yaml, sodass der Pfad mit dem Pfad übereinstimmt, unter dem Sie die Datei speichern.
  12. Rufen Sie IAM & Verwaltung > Einstellungen auf und kopieren Sie die Projektnummer. Sie benötigen sie für die Exporter-Konfiguration.

Option 2: Authentifizierungsdatei für die Datenaufnahme herunterladen (Legacy)

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

Google SecOps-Kundennummer abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Profil auf.
  3. Kopieren und speichern Sie die Kundennummer aus dem Bereich Organization Details (Organisationsdetails).

Bindplane-Agent installieren

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

Windows-Installation

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

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

    sudo systemctl status observiq-otel-collector
    

Der Dienst sollte als active (running) angezeigt werden.

Zusätzliche Installationsressourcen

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

Bindplane-Agent so konfigurieren, dass Syslog-Daten aufgenommen und an Google SecOps gesendet werden

Konfigurationsdatei suchen

  • Linux:

    sudo nano /opt/observiq-otel-collector/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:
        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: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: 'your-customer-id-here'
        endpoint: chronicle.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 abzuhören. Port 1514 wird empfohlen, um Root-Berechtigungen unter Linux zu vermeiden.
  • Exporter-Konfiguration:

    • creds_file_path: Vollständiger Pfad zur JSON-Schlüsseldatei des Dienstkontos (Option 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: Ihre Google SecOps-Kundennummer.
    • location: Ersetzen Sie <LOCATION> durch die Region Ihrer Google SecOps-Instanz (z. B. us, europe oder asia-southeast1). Der Exporter stellt diesem Wert chronicle.googleapis.com voran. Eine vollständige Liste finden Sie unter Regionale Endpunkte.
    • project: Ersetzen Sie <PROJECT_NUMBER> durch die Projektnummer aus IAM & Verwaltung > Einstellungen.
    • endpoint: Behalten Sie die Einstellung chronicle.googleapis.com bei.
    • ingestion_labels: Optionale Labels im YAML-Format (z. B. env: production).

Exporter für die Legacy Ingestion API

  • Wenn Sie die Datei zur Authentifizierung bei der Aufnahme aus Option 2 verwenden, ersetzen Sie den Block exporters durch Folgendes. Legen Sie für creds_file_path den Pfad zur Authentifizierungsdatei für die Datenaufnahme fest. Wenn sich Ihre Instanz außerhalb der USA befindet, ersetzen Sie malachiteingestion-pa.googleapis.com durch Ihren regionalen Endpunkt (z. B. europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/vault:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/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
    

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.

Starten Sie den Bindplane-Agent neu, um die Änderungen zu übernehmen.

So starten Sie den Bindplane-Agenten 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-Agenten 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
    
    • Dienstkonsole:
      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. Rechtsklicken Sie und wählen Sie Neu starten aus.
  2. Prüfen Sie, ob der Dienst ausgeführt wird:

    sc query observiq-otel-collector
    
  3. Prüfen Sie die Logs auf Fehler:

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

HashiCorp Vault-Audit-Log-Weiterleitung über Syslog konfigurieren

In Vault-Audit-Geräten werden alle Anfragen und Antworten protokolliert. 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 ein gültiges Vault-Token.
  2. Führen Sie den folgenden Befehl aus, um das Syslog-Prüfgerät zu aktivieren:

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

    vault audit list
    

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

Syslog-Weiterleitung an den Bindplane-Agenten konfigurieren

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

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 die Dateiüberwachung aktivieren:

    vault audit enable file file_path=/var/log/vault/audit.log
    
  2. Konfigurieren Sie rsyslog, um die Datei zu überwachen und weiterzuleiten:

    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 prüfen

  1. Führen Sie einen Vault-Vorgang aus, z. B. eine Anmeldung oder das Lesen eines Secrets:

    vault login token=<YOUR_TOKEN>
    
  2. Prüfen Sie die Bindplane-Agent-Logs, 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 Auf Vault festlegen.
metadata.event_type Wird für Secret-Vorgänge auf USER_RESOURCE_ACCESS, für Authentifizierungsvorgänge auf USER_LOGIN und andernfalls auf GENERIC_EVENT gesetzt.
response.auth.metadata.username event.idm.read_only_udm.target.user.userid Aus Änderungsprotokoll zugeordnet
appname event.idm.read_only_udm.target.application Aus Änderungsprotokoll zugeordnet
priority event.idm.read_only_udm.security_result.priority_details Aus Änderungsprotokoll zugeordnet
proc_id event.idm.read_only_udm.observer.process.pid Aus Änderungsprotokoll zugeordnet
auth.policies event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
auth.token_policies event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
request.policy_override event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
response.data.admin_password event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
response.data.admin_token event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
response.data.admin_user event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
response.data.certificate event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
response.data.check_url event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
response.data.keystore event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
response.data.keystore_password event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
response.data.private_key event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
type event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
auth.identity_policies event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
request.data event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
facility event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
task event.idm.read_only_udm.additional.fields Aus Ä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 Änderungsprotokoll zugeordnet
jsonPayload.request.namespace.id target.namespace Aus Änderungsprotokoll zugeordnet
jsonPayload.cos.googleapis.com/container_id", "jsonPayload.cos.googleapis.com/container_name", "jsonPayload.cos.googleapis.com/stream additional.fields Aus Änderungsprotokoll zugeordnet
resource.labels.instance_id principal.resource.product_object_id Aus Änderungsprotokoll zugeordnet
principal.resource.attribute.cloud.availability_zone resource.labels.zone Aus Änderungsprotokoll zugeordnet
logName security_result.category_details Aus Änderungsprotokoll zugeordnet
resource.labels.namespace_name target.namespace Aus Änderungsprotokoll zugeordnet
resource.labels.pod_name", "resource.labels.container_name additional.fields Aus Änderungsprotokoll zugeordnet
resource.labels.project_id target.cloud.project.name Aus Änderungsprotokoll zugeordnet
resource.labels.location target.location.name Aus Änderungsprotokoll zugeordnet
insertId metadata.product_log_id Aus Ä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 Änderungsprotokoll zugeordnet
labels.compute.googleapis.com/resource_name target.resource.name Aus Änderungsprotokoll zugeordnet
status network.http.response_code Aus Änderungsprotokoll zugeordnet
runner principal.user.userid Aus Änderungsprotokoll zugeordnet
job_id", "job_status additional.fields Aus Änderungsprotokoll zugeordnet
host observer.hostname Aus Änderungsprotokoll zugeordnet
cluster observer.resource.name Aus Änderungsprotokoll zugeordnet
cluster observer.resource.resource_type Aus Änderungsprotokoll zugeordnet

Änderungsprotokoll

Änderungsprotokoll für diesen Parser ansehen

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