Raccogliere i log di controllo di HashiCorp

Supportato in:

Questo parser elabora i log di controllo HashiCorp in formato JSON, Syslog o combinato. Estrae i campi, esegue l'analisi Grok e KV per i messaggi di tipo standard e "runner", gestisce i payload JSON e mappa i dati estratti all'UDM. Il parser include anche la gestione degli errori e l'eliminazione dei log non validi.

Prima di iniziare

  • Assicurati di avere un'istanza Google Security Operations.
  • Assicurati di avere un host Windows 2016 o versioni successive o Linux con systemd.
  • Se l'esecuzione avviene tramite un proxy, assicurati che le porte del firewall siano aperte.
  • Assicurati di disporre dell'accesso privilegiato a HCP.

Recuperare il file di autenticazione importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione importazione.

Recuperare l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Installa l'agente Bindplane

  1. Per l'installazione di Windows, esegui il seguente script:
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Per l'installazione di Linux, esegui il seguente script:
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. Ulteriori opzioni di installazione sono disponibili in questa guida all'installazione.

Configura l'agente Bindplane per importare Syslog e inviarlo a Google SecOps

  1. Accedi alla macchina in cui è installato l'agente Bindplane.
  2. Modifica il file config.yaml come segue:

    receivers:
        udplog:
            # Replace the below port <54525> and IP <0.0.0.0> with your specific values
            listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: auditd
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Riavvia l'agente Bindplane per applicare le modifiche:

    sudo systemctl restart bindplane
    

Abilita Syslog per HCP Vault

  1. Accedi al portale HCP.
  2. Vai a Vault Clusters.
  3. Seleziona il cluster Vault dall'elenco dei cluster di cui è stato eseguito il deployment.
  4. In Panoramica del cluster, individua e copia l'indirizzo Vault (ad esempio, https://vault-cluster-name.hashicorpcloud.com:8200).
  5. Vai alla sezione Dettagli di accesso e copia il token root.

Installa la CLI di Vault

  • Per Linux:

    curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
    echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
    sudo apt update && sudo apt install vault
    
  • Per macOS (utilizzando Homebrew):

    brew tap hashicorp/tap
    brew install hashicorp/tap/vault
    
  • Per Windows:

    Download the executable file.
    Extract it and add the Vault binary to your system's PATH.
    
  • Verifica l'installazione di Vault CLI eseguendo:

    vault --version
    

Configura HCP Vault utilizzando la CLI per inviare audit log a Bindplane

  1. Apri il terminale o il prompt dei comandi.
  2. Imposta l'indirizzo del server Vault utilizzando la variabile di ambiente:

    export VAULT_ADDR="https://vault-cluster-name.hashicorpcloud.com:8200"
    
  3. Accedi a Vault utilizzando il token root:

    vault login <root-token>
    

Configura il percorso Syslog su un socket Syslog esterno

  1. Esegui questo comando per abilitare syslog e inviarlo a Bindplane Agent:

    vault audit enable socket address="udp://<bindplane-ip>:<bindplane-port>" socket_type="udp" tag="vault"
    
  2. Conferma la nuova configurazione:

    vault audit list
    
  3. L'output dovrebbe mostrare la nuova configurazione del socket.

  4. (Facoltativo) Automatizza la configurazione utilizzando Terraform:

    • Crea un file di configurazione Terraform (audit.tf):
    resource "vault_audit" "syslog" {
      type        = "syslog"
      description = "Syslog audit logs"
      options = {
        tag      = "vault"
        facility = "LOCAL0"
      }
    }
    
    resource "vault_audit" "socket" {
      type        = "socket"
      description = "Remote syslog socket"
      options = {
        address     = "udp://<syslog-server-ip>:514"
        socket_type = "udp"
        tag         = "vault"
      }
    }
    
    • Applica la configurazione:
    terraform init
    terraform apply
    

Risoluzione dei problemi relativi ai log non ricevuti

  • Verifica che il server syslog sia raggiungibile:

    ping <syslog-server-ip>
    

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
auth.accessor security_result.about.resource.attribute.labels.value Il valore di auth.accessor del log non elaborato viene mappato a un'etichetta con la chiave "auth_accessor" in security_result.about.resource.attribute.labels nel modello UDM.
auth.client_token security_result.about.resource.attribute.labels.value Il valore di auth.client_token del log non elaborato viene mappato a un'etichetta con la chiave "auth_client_token" in security_result.about.resource.attribute.labels nell'UDM.
auth.display_name target.user.user_display_name Il valore di auth.display_name del log non elaborato viene mappato a target.user.user_display_name in UDM.
auth.entity_id target.resource.product_object_id Il valore di auth.entity_id del log non elaborato viene mappato a target.resource.product_object_id in UDM.
auth.metadata.account_id target.user.userid Il valore di auth.metadata.account_id del log non elaborato viene mappato a target.user.userid in UDM.
auth.metadata.auth_type security_result.about.resource.attribute.labels.value Il valore di auth.metadata.auth_type del log non elaborato viene mappato a un'etichetta con la chiave "auth_type" in security_result.about.resource.attribute.labels nell'UDM.
auth.metadata.role_id security_result.about.resource.attribute.labels.value Il valore di auth.metadata.role_id del log non elaborato viene mappato a un'etichetta con la chiave "role_id" in security_result.about.resource.attribute.labels nell'UDM.
auth.metadata.role_name target.resource.attribute.roles.name Il valore di auth.metadata.role_name del log non elaborato viene mappato a target.resource.attribute.roles.name in UDM.
auth.token_ttl security_result.about.resource.attribute.labels.value Il valore di auth.token_ttl del log non elaborato viene mappato a un'etichetta con la chiave "auth_token_ttl" in security_result.about.resource.attribute.labels nell'UDM.
auth.token_type security_result.about.resource.attribute.labels.value Il valore di auth.token_type del log non elaborato viene mappato a un'etichetta con la chiave "auth_token_type" in security_result.about.resource.attribute.labels nell'UDM.
cluster observer.resource.name Il valore di cluster del log non elaborato viene mappato a observer.resource.name in UDM.
error security_result.description Il valore di error del log non elaborato viene mappato a security_result.description in UDM.
headers.accept security_result.about.resource.attribute.labels.value Il valore di headers.accept del log non elaborato viene mappato a un'etichetta con la chiave "httpHeaders accept" in security_result.about.resource.attribute.labels nell'UDM.
headers.httpHeaders.cache-control additional.fields.value.string_value Il valore di headers.httpHeaders.cache-control del log non elaborato viene mappato a un campo con la chiave "Controllo cache httpHeaders" in additional.fields in UDM.
headers.snyk-acting-org-public-id principal.resource.attribute.labels.value Il valore di headers.snyk-acting-org-public-id del log non elaborato viene mappato a un'etichetta con la chiave "snyk-acting-org-public-id" in principal.resource.attribute.labels nell'UDM.
headers.snyk-flow-name principal.resource.attribute.labels.value Il valore di headers.snyk-flow-name del log non elaborato viene mappato a un'etichetta con la chiave "snyk-flow-name" in principal.resource.attribute.labels nell'UDM.
headers.snyk-request-id principal.resource.attribute.labels.value Il valore di headers.snyk-request-id del log non elaborato viene mappato a un'etichetta con la chiave "snyk-request-id" in principal.resource.attribute.labels nell'UDM.
headers.user-agent network.http.parsed_user_agent Il valore di headers.user-agent del log non elaborato viene analizzato come user agent e mappato a network.http.parsed_user_agent nell'UDM.
headers.x-forwarded-host principal.hostname Il valore di headers.x-forwarded-host del log non elaborato viene mappato a principal.hostname in UDM.
headers.x-forwarded-port principal.port Il valore di headers.x-forwarded-port del log non elaborato viene mappato a principal.port in UDM.
headers.x-real-ip principal.ip Il valore di headers.x-real-ip del log non elaborato viene mappato a principal.ip in UDM.
hostname observer.hostname Il valore di hostname del log non elaborato viene mappato a observer.hostname in UDM.
httpHeaders.cf-cache-status target.resource.attribute.labels.value Il valore di httpHeaders.cf-cache-status del log non elaborato viene mappato a un'etichetta con la chiave "cf-cache-status" in target.resource.attribute.labels nell'UDM.
httpHeaders.cf-ray target.resource.attribute.labels.value Il valore di httpHeaders.cf-ray del log non elaborato viene mappato a un'etichetta con la chiave "cf-ray" in target.resource.attribute.labels nell'UDM.
httpHeaders.content-length security_result.about.resource.attribute.labels.value Il valore di httpHeaders.content-length del log non elaborato viene mappato a un'etichetta con la chiave "httpHeaders Content-Length" in security_result.about.resource.attribute.labels nell'UDM.
httpHeaders.content-type security_result.about.resource.attribute.labels.value Il valore di httpHeaders.content-type del log non elaborato viene mappato a un'etichetta con la chiave "httpHeaders Content-Type" in security_result.about.resource.attribute.labels nell'UDM.
httpHeaders.gitlab-lb target.resource.attribute.labels.value Il valore di httpHeaders.gitlab-lb del log non elaborato viene mappato a un'etichetta con la chiave "gitlab-lb" in target.resource.attribute.labels nell'UDM.
httpHeaders.gitlab-sv target.resource.attribute.labels.value Il valore di httpHeaders.gitlab-sv del log non elaborato viene mappato a un'etichetta con la chiave "gitlab-sv" in target.resource.attribute.labels nell'UDM.
httpHeaders.ratelimit-limit target.resource.attribute.labels.value Il valore di httpHeaders.ratelimit-limit del log non elaborato viene mappato a un'etichetta con la chiave "ratelimit-limit" in target.resource.attribute.labels nell'UDM.
httpHeaders.ratelimit-observed target.resource.attribute.labels.value Il valore di httpHeaders.ratelimit-observed del log non elaborato viene mappato a un'etichetta con la chiave "ratelimit-observed" in target.resource.attribute.labels nell'UDM.
httpHeaders.ratelimit-remaining target.resource.attribute.labels.value Il valore di httpHeaders.ratelimit-remaining del log non elaborato viene mappato a un'etichetta con la chiave "ratelimit-remaining" in target.resource.attribute.labels nell'UDM.
httpHeaders.ratelimit-reset target.resource.attribute.labels.value Il valore di httpHeaders.ratelimit-reset del log non elaborato viene mappato a un'etichetta con la chiave "ratelimit-reset" in target.resource.attribute.labels nell'UDM.
httpHeaders.ratelimit-resettime target.resource.attribute.labels.value Il valore di httpHeaders.ratelimit-resettime del log non elaborato viene mappato a un'etichetta con la chiave "ratelimit-resettime" in target.resource.attribute.labels nell'UDM.
httpHeaders.referrer-policy target.resource.attribute.labels.value Il valore di httpHeaders.referrer-policy del log non elaborato viene mappato a un'etichetta con la chiave "referrer-policy" in target.resource.attribute.labels nell'UDM.
httpHeaders.server target.resource.attribute.labels.value Il valore di httpHeaders.server del log non elaborato viene mappato a un'etichetta con la chiave "server" in target.resource.attribute.labels nell'UDM.
httpHeaders.x-content-type-options target.resource.attribute.labels.value Il valore di httpHeaders.x-content-type-options del log non elaborato viene mappato a un'etichetta con la chiave "x-content-type-options" in target.resource.attribute.labels nell'UDM.
httpHeaders.x-frame-options target.resource.attribute.labels.value Il valore di httpHeaders.x-frame-options del log non elaborato viene mappato a un'etichetta con la chiave "x-frame-options" in target.resource.attribute.labels nell'UDM.
httpHeaders.x-request-id target.resource.attribute.labels.value Il valore di httpHeaders.x-request-id del log non elaborato viene mappato a un'etichetta con la chiave "x-request-id" in target.resource.attribute.labels nell'UDM.
httpStatus network.http.response_code Il valore di httpStatus del log non elaborato viene mappato a network.http.response_code in UDM.
httpUrl target.url Il valore di httpUrl del log non elaborato viene mappato a target.url in UDM.
insertId metadata.product_log_id Il valore di insertId del log non elaborato viene mappato a metadata.product_log_id in UDM.
job additional.fields.value.string_value Il valore di job del log non elaborato viene mappato a un campo con la chiave "job id" (ID offerta di lavoro) in additional.fields in UDM.
job_status additional.fields.value.string_value Il valore di job_status del log non elaborato viene mappato a un campo con la chiave "job_status" in additional.fields nell'UDM.
labels.compute.googleapis.com/resource_name target.resource.name Il valore di labels.compute.googleapis.com/resource_name del log non elaborato viene mappato a target.resource.name in UDM.
labels.k8s-pod/app_kubernetes_io/instance target.resource.attribute.labels.value Il valore di labels.k8s-pod/app_kubernetes_io/instance del log non elaborato viene mappato a un'etichetta con la chiave "Kubernetes IO Instance" in target.resource.attribute.labels nell'UDM.
labels.k8s-pod/app_kubernetes_io/name target.resource.attribute.labels.value Il valore di labels.k8s-pod/app_kubernetes_io/name del log non elaborato viene mappato a un'etichetta con la chiave "Kubernetes IO Instance Name" in target.resource.attribute.labels nell'UDM.
labels.k8s-pod/component target.resource.attribute.labels.value Il valore di labels.k8s-pod/component del log non elaborato viene mappato a un'etichetta con la chiave "component" in target.resource.attribute.labels nell'UDM.
labels.k8s-pod/controller-revision-hash target.resource.attribute.labels.value Il valore di labels.k8s-pod/controller-revision-hash del log non elaborato viene mappato a un'etichetta con la chiave "Controller Revision Hash" (Hash revisione controller) in target.resource.attribute.labels nell'UDM.
labels.k8s-pod/helm_sh/chart target.resource.attribute.labels.value Il valore di labels.k8s-pod/helm_sh/chart del log non elaborato viene mappato a un'etichetta con la chiave "Kubernetes IO Instance Manager SH" in target.resource.attribute.labels nell'UDM.
labels.k8s-pod/vault-active target.resource.attribute.labels.value Il valore di labels.k8s-pod/vault-active del log non elaborato viene mappato a un'etichetta con la chiave "Vault active" in target.resource.attribute.labels nell'UDM.
labels.k8s-pod/vault-initialized target.resource.attribute.labels.value Il valore di labels.k8s-pod/vault-initialized del log non elaborato viene mappato a un'etichetta con la chiave "Vault initialized" (Vault inizializzato) in target.resource.attribute.labels nell'UDM.
labels.k8s-pod/vault-perf-standby target.resource.attribute.labels.value Il valore di labels.k8s-pod/vault-perf-standby del log non elaborato viene mappato a un'etichetta con la chiave "vault perf standby" in target.resource.attribute.labels nell'UDM.
labels.k8s-pod/vault-sealed target.resource.attribute.labels.value Il valore di labels.k8s-pod/vault-sealed del log non elaborato viene mappato a un'etichetta con la chiave "Vault sealed" in target.resource.attribute.labels nell'UDM.
labels.k8s-pod/vault-version target.resource.attribute.labels.value Il valore di labels.k8s-pod/vault-version del log non elaborato viene mappato a un'etichetta con la chiave "Versione di Vault" in target.resource.attribute.labels nell'UDM.
maskedToken security_result.about.resource.attribute.labels.value Il valore di maskedToken del log non elaborato viene mappato a un'etichetta con la chiave "maskedToken" in security_result.about.resource.attribute.labels nell'UDM.
method network.http.method, operation Il valore di method del log non elaborato viene mappato a operation. Se operation non è vuoto, network.application_protocol è impostato su "HTTP". In base al valore di operation, viene derivato network.http.method.
msg metadata.description Il valore di msg del log non elaborato viene mappato a metadata.description in UDM.
pid target.process.pid Il valore di pid del log non elaborato viene mappato a target.process.pid in UDM.
request.client_token target.resource.attribute.labels.value Il valore di request.client_token del log non elaborato viene mappato a un'etichetta con la chiave "request_client_token" in target.resource.attribute.labels nell'UDM.
request.client_token_accessor target.resource.attribute.labels.value Il valore di request.client_token_accessor del log non elaborato viene mappato a un'etichetta con la chiave "request_client_token_accessor" in target.resource.attribute.labels nell'UDM.
request.data.role_id target.resource.attribute.labels.value Il valore di request.data.role_id del log non elaborato viene mappato a un'etichetta con la chiave "request_data_role_id" in target.resource.attribute.labels nell'UDM.
request.data.secret_id target.resource.attribute.labels.value Il valore di request.data.secret_id del log non elaborato viene mappato a un'etichetta con la chiave "request_data_secret_id" in target.resource.attribute.labels nell'UDM.
request.id network.session_id Il valore di request.id del log non elaborato viene mappato a network.session_id in UDM.
request.mount_accessor target.resource.attribute.labels.value Il valore di request.mount_accessor del log non elaborato viene mappato a un'etichetta con la chiave "request_mount_accessor" in target.resource.attribute.labels nell'UDM.
request.mount_type target.resource.attribute.labels.value Il valore di request.mount_type del log non elaborato viene mappato a un'etichetta con la chiave "request_mount_type" in target.resource.attribute.labels nell'UDM.
request.namespace.id target.namespace Il valore di request.namespace.id del log non elaborato viene mappato a target.namespace in UDM.
request.operation target.resource.attribute.labels.value, network.http.method, operation Il valore di request.operation del log non elaborato viene mappato a operation. Se operation non è vuoto, network.application_protocol è impostato su "HTTP". In base al valore di operation, viene derivato network.http.method. Il valore di request.operation viene mappato anche a un'etichetta con la chiave "capabilities" in target.resource.attribute.labels nell'UDM.
request.path target.url Il valore di request.path del log non elaborato viene mappato a target.url in UDM.
request.remote_address principal.ip Il valore di request.remote_address del log non elaborato viene mappato a principal.ip in UDM.
request.remote_port principal.port Il valore di request.remote_port del log non elaborato viene mappato a principal.port in UDM.
request.wrap_ttl target.resource.attribute.labels.value Il valore di request.wrap_ttl del log non elaborato viene mappato a un'etichetta con la chiave "request_wrap_ttl" in target.resource.attribute.labels nell'UDM.
resource.labels.container_name additional.fields.value.string_value Il valore di resource.labels.container_name del log non elaborato viene mappato a un campo con la chiave "container name" (nome contenitore) in additional.fields in UDM.
resource.labels.location target.location.name Il valore di resource.labels.location del log non elaborato viene mappato a target.location.name in UDM.
resource.labels.namespace_name target.namespace Il valore di resource.labels.namespace_name del log non elaborato viene mappato a target.namespace in UDM.
resource.labels.pod_name additional.fields.value.string_value Il valore di resource.labels.pod_name del log non elaborato viene mappato a un campo con la chiave "pod_name" in additional.fields in UDM.
resource.labels.project_id target.cloud.project.name Il valore di resource.labels.project_id del log non elaborato viene mappato a target.cloud.project.name in UDM.
response.data.num_uses target.resource.attribute.labels.value Il valore di response.data.num_uses del log non elaborato viene mappato a un'etichetta con la chiave "response_data_num_uses" in target.resource.attribute.labels nell'UDM.
response.data.orphan target.resource.attribute.labels.value Il valore di response.data.orphan del log non elaborato viene mappato a un'etichetta con la chiave "response_data_orphan" in target.resource.attribute.labels nell'UDM.
response.data.renewable target.resource.attribute.labels.value Il valore di response.data.renewable del log non elaborato viene mappato a un'etichetta con la chiave "response_data_renewable" in target.resource.attribute.labels nell'UDM.
response.data.ttl target.resource.attribute.labels.value Il valore di response.data.ttl del log non elaborato viene mappato a un'etichetta con la chiave "response_data_ttl" in target.resource.attribute.labels nell'UDM.
response.wrap_info.accessor target.resource.attribute.labels.value Il valore di response.wrap_info.accessor del log non elaborato viene mappato a un'etichetta con la chiave "response_wrap_info_accessor" in target.resource.attribute.labels nell'UDM.
response.wrap_info.token target.resource.attribute.labels.value Il valore di response.wrap_info.token del log non elaborato viene mappato a un'etichetta con la chiave "response_wrap_info_token" in target.resource.attribute.labels nell'UDM.
response.wrap_info.ttl target.resource.attribute.labels.value Il valore di response.wrap_info.ttl del log non elaborato viene mappato a un'etichetta con la chiave "response_wrap_info_ttl" in target.resource.attribute.labels nell'UDM.
response.wrap_info.wrapped_accessor target.resource.attribute.labels.value Il valore di response.wrap_info.wrapped_accessor del log non elaborato viene mappato a un'etichetta con la chiave "response_wrap_info_wrapped_accessor" in target.resource.attribute.labels nell'UDM.
runner principal.user.userid Il valore di runner del log non elaborato viene mappato a principal.user.userid in UDM.
status network.http.response_code Il valore di status del log non elaborato viene mappato a network.http.response_code in UDM.
streamingID target.resource.attribute.labels.value Il valore di streamingID del log non elaborato viene mappato a un'etichetta con la chiave "streamingID" in target.resource.attribute.labels nell'UDM.
time metadata.event_timestamp.seconds, metadata.event_timestamp.nanos Il valore di time del log non elaborato viene analizzato e utilizzato per compilare il campo metadata.event_timestamp nell'UDM.
type metadata.product_event_type Il valore di type del log non elaborato viene mappato a metadata.product_event_type in UDM.
url principal.url Il valore di url del log non elaborato viene mappato a principal.url in UDM. Il valore "MACHINE" viene assegnato a extensions.auth.type nell'UDM. Il valore "USER_LOGIN" viene assegnato a metadata.event_type in UDM. Il valore "HASHICORP" viene assegnato a metadata.log_type in UDM. Il valore "HASHICORP" viene assegnato a metadata.product_name in UDM. Il valore "HASHICORP" viene assegnato a metadata.vendor_name in UDM. Il valore "SERVICE_ACCOUNT" è assegnato a target.resource.attribute.roles.type in UDM.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.