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.
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
|
|
GAUGE , DOUBLE gce_instance |
|
workload.googleapis.com/vault.core.request.count
|
|
GAUGE , INT64 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
|
|
CUMULATIVE , INT64 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
|
|
CUMULATIVE , INT64 gce_instance |
storage
|
workload.googleapis.com/vault.storage.operation.put.time
|
|
CUMULATIVE , DOUBLE gce_instance |
storage
|
workload.googleapis.com/vault.token.count
|
|
GAUGE , INT64 gce_instance |
namespace cluster
|
workload.googleapis.com/vault.token.lease.count
|
|
GAUGE , INT64 gce_instance |
|
workload.googleapis.com/vault.token.renew.time
|
|
GAUGE , INT64 gce_instance |
|
workload.googleapis.com/vault.token.revoke.time
|
|
GAUGE , INT64 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.