Raccogliere gli audit log di HashiCorp
Questo parser elabora gli audit log di HashiCorp in formati JSON, Syslog o combinati. Estrae i campi, esegue l'analisi di 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 con formato non corretto.
Prima di iniziare
- Assicurati di avere un'istanza Google Security Operations.
- Assicurati di avere Windows 2016 o versioni successive o un host Linux con systemd.
- Se il servizio è in esecuzione dietro un proxy, assicurati che le porte del firewall siano aperte.
- Assicurati di disporre dell'accesso con privilegi a HCP.
Recupera il file di autenticazione di importazione di Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione dell'importazione.
Ottenere l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
- Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.
Installa BindPlane Agent
- Per l'installazione su Windows, esegui il seguente script:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- 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
- Ulteriori opzioni di installazione sono disponibili in questa guida all'installazione.
Configurare l'agente BindPlane per importare i syslog e inviarli a Google SecOps
- Accedi al computer su cui è installato BindPlane.
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
Riavvia l'agente BindPlane per applicare le modifiche:
sudo systemctl restart bindplane
Attiva Syslog per HCP Vault
- Accedi al portale HCP.
- Vai a Cluster di Vault.
- Seleziona il cluster Vault dall'elenco dei cluster di cui è stato eseguito il deployment.
- In Panoramica del cluster, individua e copia l'indirizzo di Vault (ad esempio, https://vault-cluster-name.hashicorpcloud.com:8200).
- Vai alla sezione Dettagli accesso e copia il token principale.
Installa l'interfaccia a riga di comando 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 l'interfaccia a riga di comando per inviare gli audit log a BindPlane
- Apri il terminale o il prompt dei comandi.
Imposta l'indirizzo del server Vault utilizzando la variabile di ambiente:
export VAULT_ADDR="https://vault-cluster-name.hashicorpcloud.com:8200"
Accedi a Vault utilizzando il token principale:
vault login <root-token>
Configura il percorso syslog per una socket syslog esterna
Esegui il seguente comando per abilitare syslog e inviare a BindPlane:
vault audit enable socket address="udp://<bindplane-ip>:<bindplane-port>" socket_type="udp" tag="vault"
Conferma la nuova configurazione:
vault audit list
L'output dovrebbe mostrare la nuova configurazione del socket.
(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
Log per la risoluzione dei problemi non ricevuti
Verifica che il server syslog sia raggiungibile:
ping <syslog-server-ip>
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
auth.accessor |
security_result.about.resource.attribute.labels.value |
Il valore di auth.accessor dal log non elaborato viene mappato a un'etichetta con chiave "auth_accessor" in security_result.about.resource.attribute.labels nell'UDM. |
auth.client_token |
security_result.about.resource.attribute.labels.value |
Il valore di auth.client_token dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato è mappato a target.user.user_display_name nell'UDM. |
auth.entity_id |
target.resource.product_object_id |
Il valore di auth.entity_id dal log non elaborato è mappato a target.resource.product_object_id nell'UDM. |
auth.metadata.account_id |
target.user.userid |
Il valore di auth.metadata.account_id dal log non elaborato è mappato a target.user.userid nell'UDM. |
auth.metadata.auth_type |
security_result.about.resource.attribute.labels.value |
Il valore di auth.metadata.auth_type dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato è mappato a target.resource.attribute.roles.name nell'UDM. |
auth.token_ttl |
security_result.about.resource.attribute.labels.value |
Il valore di auth.token_ttl dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con chiave "auth_token_type" in security_result.about.resource.attribute.labels nell'UDM. |
cluster |
observer.resource.name |
Il valore di cluster dal log non elaborato è mappato a observer.resource.name nell'UDM. |
error |
security_result.description |
Il valore di error dal log non elaborato è mappato a security_result.description nell'UDM. |
headers.accept |
security_result.about.resource.attribute.labels.value |
Il valore di headers.accept dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato è mappato a un campo con chiave "controllo cache httpHeaders" in additional.fields nell'UDM. |
headers.snyk-acting-org-public-id |
principal.resource.attribute.labels.value |
Il valore di headers.snyk-acting-org-public-id dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal 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 dal log non elaborato è mappato a principal.hostname nell'UDM. |
headers.x-forwarded-port |
principal.port |
Il valore di headers.x-forwarded-port dal log non elaborato è mappato a principal.port nell'UDM. |
headers.x-real-ip |
principal.ip |
Il valore di headers.x-real-ip dal log non elaborato è mappato a principal.ip nell'UDM. |
hostname |
observer.hostname |
Il valore di hostname dal log non elaborato è mappato a observer.hostname nell'UDM. |
httpHeaders.cf-cache-status |
target.resource.attribute.labels.value |
Il valore di httpHeaders.cf-cache-status dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con chiave "gitlab-lb" in target.resource.attribute.labels nell'UDM. |
httpHeaders.gitlab-sv |
target.resource.attribute.labels.value |
Il valore di httpHeaders.gitlab-sv dal log non elaborato viene mappato a un'etichetta con chiave "gitlab-sv" in target.resource.attribute.labels nell'UDM. |
httpHeaders.ratelimit-limit |
target.resource.attribute.labels.value |
Il valore httpHeaders.ratelimit-limit del log non elaborato viene mappato a un'etichetta con chiave "ratelimit-limit" in target.resource.attribute.labels nell'UDM. |
httpHeaders.ratelimit-observed |
target.resource.attribute.labels.value |
Il valore httpHeaders.ratelimit-observed del log non elaborato viene mappato a un'etichetta con chiave "ratelimit-observed" in target.resource.attribute.labels nell'UDM. |
httpHeaders.ratelimit-remaining |
target.resource.attribute.labels.value |
Il valore httpHeaders.ratelimit-remaining del log non elaborato viene mappato a un'etichetta con chiave "ratelimit-remaining" in target.resource.attribute.labels nell'UDM. |
httpHeaders.ratelimit-reset |
target.resource.attribute.labels.value |
Il valore httpHeaders.ratelimit-reset del log non elaborato viene mappato a un'etichetta con chiave "ratelimit-reset" in target.resource.attribute.labels nell'UDM. |
httpHeaders.ratelimit-resettime |
target.resource.attribute.labels.value |
Il valore di httpHeaders.ratelimit-resettime dal log non elaborato viene mappato a un'etichetta con chiave "ratelimit-resettime" in target.resource.attribute.labels nell'UDM. |
httpHeaders.referrer-policy |
target.resource.attribute.labels.value |
Il valore di httpHeaders.referrer-policy dal log non elaborato viene mappato a un'etichetta con chiave "referrer-policy" in target.resource.attribute.labels nell'UDM. |
httpHeaders.server |
target.resource.attribute.labels.value |
Il valore di httpHeaders.server dal log non elaborato è mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato è mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con chiave "x-request-id" in target.resource.attribute.labels nell'UDM. |
httpStatus |
network.http.response_code |
Il valore di httpStatus dal log non elaborato è mappato a network.http.response_code nell'UDM. |
httpUrl |
target.url |
Il valore di httpUrl dal log non elaborato è mappato a target.url nell'UDM. |
insertId |
metadata.product_log_id |
Il valore di insertId dal log non elaborato è mappato a metadata.product_log_id nell'UDM. |
job |
additional.fields.value.string_value |
Il valore di job dal log non elaborato viene mappato a un campo con chiave "job id" in additional.fields nell'UDM. |
job_status |
additional.fields.value.string_value |
Il valore di job_status dal log non elaborato è mappato a un campo con 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 dal log non elaborato è mappato a target.resource.name nell'UDM. |
labels.k8s-pod/app_kubernetes_io/instance |
target.resource.attribute.labels.value |
Il valore di labels.k8s-pod/app_kubernetes_io/instance dal log non elaborato è mappato a un'etichetta con 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 dal log non elaborato è mappato a un'etichetta con chiave "Nome istanza IO Kubernetes" in target.resource.attribute.labels nell'UDM. |
labels.k8s-pod/component |
target.resource.attribute.labels.value |
Il valore di labels.k8s-pod/component dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con chiave "Controller Revision Hash" 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 dal log non elaborato è mappato a un'etichetta con 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 dal log non elaborato è mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con chiave "Vault version" in target.resource.attribute.labels nell'UDM. |
maskedToken |
security_result.about.resource.attribute.labels.value |
Il valore di maskedToken dal log non elaborato viene mappato a un'etichetta con chiave "maskedToken" in security_result.about.resource.attribute.labels nell'UDM. |
method |
network.http.method , operation |
Il valore method del log non elaborato è mappato a operation . Se operation non è vuoto, network.application_protocol viene impostato su "HTTP". In base al valore di operation , viene dedotto network.http.method . |
msg |
metadata.description |
Il valore di msg dal log non elaborato è mappato a metadata.description nell'UDM. |
pid |
target.process.pid |
Il valore di pid dal log non elaborato è mappato a target.process.pid nell'UDM. |
request.client_token |
target.resource.attribute.labels.value |
Il valore di request.client_token dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con chiave "request_data_secret_id" in target.resource.attribute.labels nell'UDM. |
request.id |
network.session_id |
Il valore di request.id dal log non elaborato è mappato a network.session_id nell'UDM. |
request.mount_accessor |
target.resource.attribute.labels.value |
Il valore di request.mount_accessor dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con chiave "request_mount_type" in target.resource.attribute.labels nell'UDM. |
request.namespace.id |
target.namespace |
Il valore di request.namespace.id dal log non elaborato è mappato a target.namespace nell'UDM. |
request.operation |
target.resource.attribute.labels.value , network.http.method , operation |
Il valore request.operation del log non elaborato è mappato a operation . Se operation non è vuoto, network.application_protocol viene impostato su "HTTP". In base al valore di operation , viene dedotto network.http.method . Il valore di request.operation viene mappato anche a un'etichetta con chiave "capabilities" in target.resource.attribute.labels nell'UDM. |
request.path |
target.url |
Il valore di request.path dal log non elaborato è mappato a target.url nell'UDM. |
request.remote_address |
principal.ip |
Il valore di request.remote_address dal log non elaborato è mappato a principal.ip nell'UDM. |
request.remote_port |
principal.port |
Il valore di request.remote_port dal log non elaborato è mappato a principal.port nell'UDM. |
request.wrap_ttl |
target.resource.attribute.labels.value |
Il valore di request.wrap_ttl dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato è mappato a un campo con chiave "nome contenitore" in additional.fields nell'UDM. |
resource.labels.location |
target.location.name |
Il valore di resource.labels.location dal log non elaborato è mappato a target.location.name nell'UDM. |
resource.labels.namespace_name |
target.namespace |
Il valore di resource.labels.namespace_name dal log non elaborato è mappato a target.namespace nell'UDM. |
resource.labels.pod_name |
additional.fields.value.string_value |
Il valore di resource.labels.pod_name dal log non elaborato viene mappato a un campo con chiave "pod_name" in additional.fields nell'UDM. |
resource.labels.project_id |
target.cloud.project.name |
Il valore di resource.labels.project_id dal log non elaborato è mappato a target.cloud.project.name nell'UDM. |
response.data.num_uses |
target.resource.attribute.labels.value |
Il valore di response.data.num_uses dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con 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 dal log non elaborato viene mappato a un'etichetta con chiave "response_wrap_info_wrapped_accessor" in target.resource.attribute.labels nell'UDM. |
runner |
principal.user.userid |
Il valore di runner dal log non elaborato è mappato a principal.user.userid nell'UDM. |
status |
network.http.response_code |
Il valore di status dal log non elaborato è mappato a network.http.response_code nell'UDM. |
streamingID |
target.resource.attribute.labels.value |
Il valore di streamingID dal log non elaborato viene mappato a un'etichetta con chiave "streamingID" in target.resource.attribute.labels nell'UDM. |
time |
metadata.event_timestamp.seconds , metadata.event_timestamp.nanos |
Il valore di time dal 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 dal log non elaborato è mappato a metadata.product_event_type nell'UDM. |
url |
principal.url |
Il valore di url dal log non elaborato è mappato a principal.url nell'UDM. Il valore "MACCHINA" viene assegnato a extensions.auth.type nell'UDM. Il valore "USER_LOGIN" viene assegnato a metadata.event_type nell'UDM. Il valore "HASHICORP" viene assegnato a metadata.log_type nell'UDM. Il valore "HASHICORP" viene assegnato a metadata.product_name nell'UDM. Il valore "HASHICORP" viene assegnato a metadata.vendor_name nell'UDM. Il valore "SERVICE_ACCOUNT" è assegnato a target.resource.attribute.roles.type nell'UDM. |
Modifiche
2023-10-26
- È stato aggiunto un pattern Grok per gestire i log SYSLOG+JSON.
2023-09-22
- Mappatura modificata per "request.remote_port" da "target.port" a "principal.port".
- Mappatura modificata per "request.remote_address" da "target.ip" a "principal.ip".
- "error" è stato mappato a "security_result.description".
- "resource.labels.namespace_name" è stato mappato a "target.namespace".
- "resource.labels.pod_name" e "resource.labels.container_name" sono stati mappati a "additional.fields".
- "resource.labels.project_id" è stato mappato a "target.cloud.project.name".
- "resource.labels.location" è stato mappato a "target.location.name".
- "insertId" è stato mappato a "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" e "labels.k8s-pod/vault-active" sono stati mappati a "target.resource.attribute.labels".
- "labels.compute.googleapis.com/resource_name" è stato mappato a "target.resource.name".
2023-04-26
- È stato aggiunto un pattern Grok per gestire i log syslog.
- "status" è stato mappato a "network.http.response_code".
- "runner" mappato a "principal.user.userid"
- "job_id" e "job_status" sono stati mappati a "additional.fields".
2023-03-24
- "host" è stato mappato a "observer.hostname".
- "cluster" è stato mappato a "observer.resource.name".
- Se il log contiene cluster, "cluster" viene mappato a "observer.resource.resource_type".
- È stato aggiunto un blocco JSON per recuperare i dati dal campo "_raw".
- "httpStatus" mappato a "network.http.response_code".
- "httpUrl" mappato a "target.url".
- "pid" mappato a "target.process.pid".
- "msg" mappato a "metadata.description".
- "url" mappato a "principal.url".
- "hostname" mappato a "observer.hostname".
- "streamingID", "requestId", "httpHeaders.cf-cache-status", "httpHeaders.cf-ray", "httpHeaders.gitlab-lb", "httpHeaders.gitlab-sv", "httpHeaders.x-request-id", "httpHeaders.x-content-type-options", "httpHeaders.x-frame-options", "httpHeaders.ratelimit-limit", "httpHeaders.ratelimit-observed", "httpHeaders.ratelimit-remaining", "httpHeaders.ratelimit-reset", "httpHeaders.ratelimit-resettime", "httpHeaders.server", "httpHeaders.referrer-policy" mappati a "target.resource.attribute.labels".
- "method" mappato a "network.application_protocol".
- "headers.user-agent" mappato a "network.http.parsed_user_agent".
- "httpHeaders.cache-control" mappato a "additional.fields".
- "httpHeaders.content-type", "httpHeaders.content-length", "maskedToken", "headers.accept" mappati a "security_result.about.resource.attribute.labels".
- "headers.x-real-ip" mappato a "principal.ip".
- "headers.x-forwarded-host" mappato a "principal.hostname".
- "headers.x-forwarded-port" mappato a "principal.port".
- "headers.snyk-acting-org-public-id", "headers.snyk-flow-name", "headers.snyk-request-id" mappati a "principal.resource.attribute.labels".
2023-02-09
- Parser appena creato.