Hashicorp Vault

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Vault è un sistema di gestione dei secret e della crittografia basato su identità. Questa integrazione raccoglie gli audit log di Vault. L'integrazione raccoglie anche le metriche relative a token, memoria e archiviazione.

Per ulteriori informazioni su Vault, consulta la documentazione di Hashicorp Vault.

Prerequisiti

Per raccogliere la telemetria di Vault, devi installare l'agente Ops:

  • Per le metriche, installa la versione 2.18.2 o successive.
  • Per i log, installa la versione 2.18.1 o successive.

Questa integrazione supporta Vault 1.6 o versioni successive.

Configura l'istanza di Vault

Per raccogliere la telemetria dall'istanza di Vault, devi impostare un valore diverso da zero nel file di configurazione di HCL o JSON Vault per prometheus_retention_time.

Full configuration options can be found at https://www.vaultproject.io/docs/configuration
telemetry {
  prometheus_retention_time = "10m"
  disable_hostname = false
}

Inoltre, è necessario un utente root per abilitare la raccolta dei log di controllo e creare un criterio ACL per Prometheus. Un token root viene utilizzato per aggiungere un criterio con funzionalità di lettura all'endpoint /sys/metrics. Questo criterio viene utilizzato per creare un token di Vault con l'autorizzazione necessaria a raccogliere le metriche di Vault.

Se stai inizializzando Vault per la prima volta, puoi utilizzare il seguente script per generare un token radice. In caso contrario, consulta l'articolo Generare token radice che utilizzano chiavi non sigillate per informazioni sulla generazione di un token radice.

export VAULT_ADDR=http://localhost:8200
# Create simple Vault initialization with 1 key share and a key threshold of 1.
vault operator init -key-shares=1 -key-threshold=1 | head -n3 | cat > .vault-init
VAULT_KEY=$(grep 'Unseal Key 1'  .vault-init | awk '{print $NF}')
VAULT_TOKEN=$(grep 'Initial Root Token:' .vault-init | awk '{print $NF}')
export VAULT_TOKEN
vault operator unseal $VAULT_KEY

# Enable audit logs.
vault audit enable file file_path=/var/log/vault_audit.log

# Create Prometheus ACL policy to access metrics endpoint.
vault policy write prometheus-metrics - << EOF
path "/sys/metrics" {
  capabilities = ["read"]
}
EOF

# Create an example token with the prometheus-metrics policy to access Vault metrics.
# This token is used as `$VAULT_TOKEN` in your Ops Agent configuration for Vault.
vault token create -field=token -policy prometheus-metrics > prometheus-token

Configura l'agente Ops per Vault

Segui la guida per la configurazione dell'agente Ops, aggiungi gli elementi richiesti per raccogliere la telemetria dalle istanze Vault e riavvia l'agente.

Configurazione di esempio

Il comando seguente crea la configurazione per raccogliere e importare la telemetria per Vault e riavvia l'agente operativo.

# Configures Ops Agent to collect telemetry from the app and restart Ops Agent.

set -e

# Create a back up of the existing file so existing configurations are not lost.
sudo cp /etc/google-cloud-ops-agent/config.yaml /etc/google-cloud-ops-agent/config.yaml.bak

# Create a Vault token that has read capabilities to /sys/metrics policy.
# For more information see: https://developer.hashicorp.com/vault/tutorials/monitoring/monitor-telemetry-grafana-prometheus?in=vault%2Fmonitoring#define-prometheus-acl-policy
VAULT_TOKEN=$(cat prometheus-token)

sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
metrics:
  receivers:
    vault:
      type: vault
      token: $VAULT_TOKEN
      endpoint: 127.0.0.1:8200
  service:
    pipelines:
      vault:
        receivers:
          - vault
logging:
  receivers:
    vault_audit:
      type: vault_audit
      include_paths: [/var/log/vault_audit.log]
  service:
    pipelines:
      vault:
        receivers:
          - vault_audit
EOF

sudo service google-cloud-ops-agent restart

Configura raccolta di log

Per importare i log da Vault, devi creare destinatari per i log generati da Vault e quindi creare una pipeline per i nuovi destinatari.

Per configurare un destinatario per i log vault_audit, specifica i seguenti campi:

Campo Predefinito Descrizione
exclude_paths Un elenco di pattern di percorsi del file system da escludere dal set corrispondente a include_paths.
include_paths Un elenco di percorsi del filesystem da leggere aggiungendo in coda ogni file. Nei percorsi è possibile utilizzare un carattere jolly (*).
record_log_file_path false Se è impostato su true, il percorso del file specifico da cui è stato ottenuto il record di log viene visualizzato nella voce di log di output come valore dell'etichetta agent.googleapis.com/log_file_path. Quando utilizzi un carattere jolly, viene registrato solo il percorso del file da cui è stato ottenuto il record.
type Il valore deve essere vault_audit.
wildcard_refresh_interval 60s L'intervallo con cui vengono aggiornati i percorsi dei file con caratteri jolly in include_paths. Specificato come durata, ad esempio 30s o 2m. Questa proprietà potrebbe essere utile in velocità effettiva di logging elevata in cui i file di log vengono ruotati più velocemente dell'intervallo predefinito.

Cosa viene registrato

logName deriva dagli ID ricevitore specificati nella configurazione. I campi dettagliati all'interno di LogEntry sono i seguenti.

I log vault_audit contengono i seguenti campi in LogEntry:

Campo Tipo Descrizione
jsonPayload.auth struct
jsonPayload.auth.accessor string Questo è un HMAC della funzione di accesso al token client.
jsonPayload.auth.client_token string Questo è un HMAC dell'ID token del client.
jsonPayload.auth.display_name string Si tratta del nome visualizzato impostato dal ruolo metodo di autenticazione o esplicitamente al momento della creazione del secret.
jsonPayload.auth.entity_id string Si tratta di un identificatore di entità del token.
jsonPayload.auth.metadata oggetto Contiene un elenco di coppie chiave-valore dei metadati associate al client_token.
jsonPayload.auth.policies oggetto Questo conterrà un elenco dei criteri associati al client_token.
jsonPayload.auth.token_type string
jsonPayload.error string Se si è verificato un errore con la richiesta, il messaggio di errore viene incluso nel valore di questo campo.
jsonPayload.request struct
jsonPayload.request.client_token string Questo è un HMAC dell'ID token del client.
jsonPayload.request.client_token_accessor string Questo è un HMAC della funzione di accesso al token client.
jsonPayload.request.data oggetto L'oggetto dati conterrà dati secret in coppie chiave/valore.
jsonPayload.request.headers oggetto Intestazioni HTTP aggiuntive specificate dal client come parte della richiesta.
jsonPayload.request.id string Questo è l'identificatore univoco della richiesta.
jsonPayload.request.namespace.id string
jsonPayload.request.operation string Questo è il tipo di operazione che corrisponde alle funzionalità del percorso e dovrebbe essere create, read, update, delete o list.
jsonPayload.request.path string Il percorso di Vault richiesto per l'operazione.
jsonPayload.request.policy_override boolean Questo è il true quando è stata richiesta la sostituzione del criterio soft-obbligatoria.
jsonPayload.request.remote_address string L'indirizzo IP del client che effettua la richiesta.
jsonPayload.request.wrap_ttl string Se il token è inserito nel codice, viene visualizzato il valore TTL configurato come stringa numerica.
jsonPayload.response struct
jsonPayload.response.data.accessor string Questo è un HMAC della funzione di accesso al token client.
jsonPayload.response.data.creation_time string Timestamp del formato RFC 3339 della creazione del token.
jsonPayload.response.data.creation_ttl string La creazione di token TTL in pochi secondi.
jsonPayload.response.data.display_name string Si tratta del nome visualizzato impostato dal ruolo metodo di autenticazione o esplicitamente al momento della creazione del secret.
jsonPayload.response.data.entity_id string Si tratta di un identificatore di entità del token.
jsonPayload.response.data.expire_time string Timestamp del formato RFC 3339 che rappresenta il momento in cui scade il token.
jsonPayload.response.data.explicit_max_ttl string Valore TTL massimo del token esplicito in secondi ("0" se non impostato).
jsonPayload.response.data.id string Questo è l'identificatore univoco della risposta.
jsonPayload.response.data.issue_time string Timestamp del formato RFC 3339.
jsonPayload.response.data.num_uses number Se il token è limitato a un certo numero di utilizzi, tale valore sarà rappresentato qui.
jsonPayload.response.data.orphan boolean Valore booleano che rappresenta se il token è un orfano.
jsonPayload.response.data.path string Il percorso di Vault richiesto per l'operazione.
jsonPayload.response.data.policies oggetto Questo conterrà un elenco dei criteri associati al client_token.
jsonPayload.response.data.renewable boolean Valore booleano che rappresenta se il token è un orfano.
jsonPayload.type string Il tipo di audit log.
severity string
timestamp stringa (Timestamp) Ora in cui è stata ricevuta la richiesta.

Configurazione della raccolta di metriche

Per importare metriche da Vault, devi creare destinatari per le metriche prodotte da Vault e quindi creare una pipeline per i nuovi destinatari.

Per configurare un destinatario per le metriche vault, specifica i seguenti campi:

Campo Predefinito Descrizione
ca_file Percorso del certificato CA. In qualità di client, viene verificato il certificato del server. Se il campo è vuoto, il destinatario utilizza la CA radice di sistema.
cert_file Percorso del certificato TLS da utilizzare per le connessioni richieste mTLS.
collection_interval 60s Un valore time.Duration, ad esempio 30s o 5m.
endpoint localhost:8200 Il "nomehost:porta" utilizzato da Vault
insecure true Consente di stabilire se utilizzare o meno una connessione TLS sicura. Se il criterio è impostato su false, TLS è attivato.
insecure_skip_verify false Consente di specificare se saltare o meno la verifica del certificato. Se insecure è impostato su true, il valore "insecure_skip_verify" non viene utilizzato.
key_file Percorso della chiave TLS da utilizzare per le connessioni richieste mTLS.
metrics_path /v1/sys/metrics Il percorso di raccolta delle metriche.
token localhost:8200 Token utilizzato per l'autenticazione.
type Questo valore deve essere vault.

Che cosa viene monitorato

La tabella seguente fornisce l'elenco delle metriche che l'agente operativo raccoglie dall'istanza di Vault.

Tipo di metrica
Tipo, tipo
Risorse monitorate
Etichette
workload.googleapis.com/vault.audit.request.failed
CUMULATIVE, INT64
gce_instance
 
workload.googleapis.com/vault.audit.response.failed
CUMULATIVE, INT64
gce_instance
 
workload.googleapis.com/vault.core.leader.duration
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/vault.core.request.count
GAUGEINT64
gce_instance
cluster
workload.googleapis.com/vault.memory.usage
GAUGE, DOUBLE
gce_instance
 
workload.googleapis.com/vault.storage.operation.delete.count
CUMULATIVE, INT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.delete.time
CUMULATIVE, DOUBLE
gce_instance
storage
workload.googleapis.com/vault.storage.operation.get.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.get.time
CUMULATIVE, DOUBLE
gce_instance
storage
workload.googleapis.com/vault.storage.operation.list.count
CUMULATIVE, INT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.list.time
CUMULATIVE, DOUBLE
gce_instance
storage
workload.googleapis.com/vault.storage.operation.put.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.put.time
CUMULATIVEDOUBLE
gce_instance
storage
workload.googleapis.com/vault.token.count
GAUGEINT64
gce_instance
namespace
cluster
workload.googleapis.com/vault.token.lease.count
GAUGEINT64
gce_instance
 
workload.googleapis.com/vault.token.renew.time
GAUGEINT64
gce_instance
 
workload.googleapis.com/vault.token.revoke.time
GAUGEINT64
gce_instance
 

Dashboard di esempio

Per visualizzare le metriche di Vault, devi aver configurato un grafico o una dashboard. Cloud Monitoring offre una libreria di dashboard di esempio per le integrazioni, che contengono grafici preconfigurati. Per informazioni sull'installazione di queste dashboard, consulta Installazione di dashboard di esempio.

Verificare la configurazione

Questa sezione descrive come verificare di aver configurato correttamente il destinatario di Vault. L'agente Ops potrebbe richiedere uno o due minuti per iniziare a raccogliere la telemetria.

Per verificare che i log siano importati, vai a Esplora log ed esegui la query seguente per visualizzare i log di Vault:

resource.type="gce_instance"
log_id("vault_audit")

Per verificare che le metriche siano importate, vai a Metrics Explorer ed esegui la seguente query nella scheda MQL:

fetch gce_instance
| metric 'workload.googleapis.com/vault.memory.usage'
| every 1m

Passaggi successivi

Per una procedura dettagliata su come utilizzare Ansible per installare l'agente Ops, configurare un'applicazione di terze parti e installare una dashboard di esempio, guarda il video Installare l'agente Ops per risolvere i problemi delle applicazioni di terze parti.