Vault es un sistema de administración de encriptación y secretos basado en la identidad. Esta integración recopila los registros de auditoría de Vault. La integración también recopila métricas de token, memoria y almacenamiento.
Para obtener más información sobre Vault, consulta la documentación de Hashicorp Vault.
Requisitos previos
Para recopilar la telemetría de Vault, debes instalar el Agente de operaciones:
- Para las métricas, instala la versión 2.18.2 o una posterior.
- Para los registros, instala la versión 2.18.1 o una posterior.
Esta integración es compatible con Vault versión 1.6+.
Configura tu instancia de Vault
Para recopilar la telemetría de tu instancia de Vault, debes establecer el campo prometheus_retention_time
en un valor distinto de cero en tu archivo de configuración de HCL o JSON Vault.
Full configuration options can be found at https://www.vaultproject.io/docs/configuration telemetry { prometheus_retention_time = "10m" disable_hostname = false }
Además, se requiere que un usuario raíz habilite la recopilación de registros de auditoría y cree una política de LCA de métricas de Prometheus.
Se usa un token raíz para agregar una política que tenga capacidades de lectura al extremo /sys/metrics
.
Esta política se utiliza a fin de crear un token de Vault con los permisos necesarios para recopilar las métricas de Vault.
Si inicializas Vault por primera vez, puedes usar la siguiente secuencia de comandos para generar un token raíz. De lo contrario, consulta Cómo generar tokens raíz con claves de anulación de sellos si deseas obtener más información para generar un token raíz.
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 el Agente de operaciones para Vault
Sigue la guía Configura el Agente de operaciones, agrega los elementos necesarios para recopilar la telemetría de las instancias de Vault y reinicia el agente.
Configuración de ejemplo
El siguiente comando crea la configuración para recopilar y transferir la telemetría de transferencia para Vault y reinicia el Agente de operaciones.
Configura la recopilación de registros
A fin de transferir registros desde Vault, debes crear receptores para los registros que produce Vault y, luego, crear una canalización para los receptores nuevos.
A fin de configurar un receptor para tus registros vault_audit
, especifica los siguientes campos:
Campo | Predeterminado | Descripción |
---|---|---|
exclude_paths |
Una lista de patrones de ruta de acceso del sistema de archivos que se excluirán del conjunto que coincide con include_paths . |
|
include_paths |
Una lista de rutas de acceso del sistema de archivos que se leerán mediante la visualización del final de cada archivo. Se puede usar un comodín (* ) en las rutas. |
|
record_log_file_path |
false |
Si se configura como true , la ruta al archivo específico desde el que se obtuvo el registro aparece en la entrada de registro de salida como el valor de la etiqueta agent.googleapis.com/log_file_path . Cuando se usa un comodín, solo se registra la ruta de acceso del archivo del que se obtuvo el registro. |
type |
El valor debe ser vault_audit . |
|
wildcard_refresh_interval |
60s |
El intervalo en el que se actualizan las rutas de acceso de archivos comodín en include_paths . Se proporciona como una duración, por ejemplo, 30s o 2m . Esta propiedad puede ser útil en el caso de una capacidad de procesamiento de registro alta en la que los archivos de registro se rotan más rápido que el intervalo predeterminado. |
¿Qué se registra?
logName
se deriva de los ID de receptor especificados en la configuración. Los campos detallados dentro de LogEntry
son los siguientes.
Los registros vault_audit
contienen los siguientes campos en LogEntry
:
Campo | Tipo | Descripción |
---|---|---|
jsonPayload.auth |
struct | |
jsonPayload.auth.accessor |
string | Este es un HMAC del descriptor de acceso del token del cliente. |
jsonPayload.auth.client_token |
string | Este es un HMAC del ID del token del cliente. |
jsonPayload.auth.display_name |
string | Este es el nombre visible que establece el rol del método de autenticación o que se establece de forma explícita en el momento de la creación del secreto. |
jsonPayload.auth.entity_id |
string | Este es un identificador de entidad de token. |
jsonPayload.auth.metadata |
objeto | Esto contendrá una lista de los pares clave-valor de metadatos asociados con el client_token. |
jsonPayload.auth.policies |
objeto | Esto contendrá una lista de políticas asociadas con el client_token. |
jsonPayload.auth.token_type |
string | |
jsonPayload.error |
string | Si se produce un error con la solicitud, el mensaje de error se incluye en el valor de este campo. |
jsonPayload.request |
struct | |
jsonPayload.request.client_token |
string | Este es un HMAC del ID del token del cliente. |
jsonPayload.request.client_token_accessor |
string | Este es un HMAC del descriptor de acceso del token del cliente. |
jsonPayload.request.data |
objeto | El objeto de datos contendrá datos secretos en pares clave-valor. |
jsonPayload.request.headers |
objeto | Encabezados HTTP adicionales que el cliente especifica como parte de la solicitud. |
jsonPayload.request.id |
string | Este es el identificador único de la solicitud. |
jsonPayload.request.namespace.id |
string | |
jsonPayload.request.operation |
string | Este es el tipo de operación que corresponde a las capacidades de ruta de acceso y se espera que sea create , read , update , delete o list . |
jsonPayload.request.path |
string | La ruta de Vault solicitada para la operación. |
jsonPayload.request.policy_override |
booleano | Esto es true cuando se solicitó una anulación de política obligatoria. |
jsonPayload.request.remote_address |
string | La dirección IP del cliente que realiza la solicitud. |
jsonPayload.request.wrap_ttl |
string | Si el token está unido, se muestra el valor de TTL unido configurado como una string numérica. |
jsonPayload.response |
struct | |
jsonPayload.response.data.accessor |
string | Este es un HMAC del descriptor de acceso del token del cliente. |
jsonPayload.response.data.creation_time |
string | Marca de tiempo con formato RFC 3339 de la creación del token. |
jsonPayload.response.data.creation_ttl |
string | TTL de la creación del tokens en segundos. |
jsonPayload.response.data.display_name |
string | Este es el nombre visible que establece el rol del método de autenticación o que se establece de forma explícita en el momento de la creación del secreto. |
jsonPayload.response.data.entity_id |
string | Este es un identificador de entidad de token. |
jsonPayload.response.data.expire_time |
string | Marca de tiempo con formato RFC 3339 que representa el momento en el que vencerá este token. |
jsonPayload.response.data.explicit_max_ttl |
string | Valor máximo de TTL del token explícito como segundos (“0” cuando no está configurado). |
jsonPayload.response.data.id |
string | Este es el identificador de respuesta único. |
jsonPayload.response.data.issue_time |
string | Marca de tiempo con formato RFC 3339. |
jsonPayload.response.data.num_uses |
número | Si el token está limitado a una cantidad de usos, ese valor se representará aquí. |
jsonPayload.response.data.orphan |
boolean | Valor booleano que representa si el token es huérfano. |
jsonPayload.response.data.path |
string | La ruta de Vault solicitada para la operación. |
jsonPayload.response.data.policies |
objeto | Esto contendrá una lista de políticas asociadas con el client_token. |
jsonPayload.response.data.renewable |
booleano | Valor booleano que representa si el token es huérfano. |
jsonPayload.type |
string | El tipo de registro de auditoría. |
severity |
string | |
timestamp |
string (Timestamp ) |
Hora en que se recibió la solicitud |
Configura la recopilación de métricas
A fin de transferir métricas desde Vault, debes crear receptores para las métricas que produce Vault y, luego, una canalización para los receptores nuevos.
A fin de configurar un receptor para las métricas de vault
, especifica los siguientes campos:
Campo | Predeterminado | Descripción |
---|---|---|
ca_file |
Ruta al certificado de CA. Como cliente, esto verifica el certificado del servidor. Si está vacío, el receptor usa la CA raíz del sistema. | |
cert_file |
Ruta de acceso al certificado TLS que se usará para las conexiones requeridas por mTLS. | |
collection_interval |
60s |
Un valor time.Duration , como 30s o 5m |
endpoint |
localhost:8200 |
El “hostname:port” que usa vault |
insecure |
true |
Establece si se debe usar o no una conexión TLS segura. Si se configura como false , TLS está habilitado. |
insecure_skip_verify |
false |
Establece si se debe omitir la verificación del certificado. Si insecure se configura como true , no se usa el valor “insecure_skip_verify”. |
key_file |
Ruta de acceso a la clave TLS que se usará para las conexiones requeridas por mTLS. | |
metrics_path |
/v1/sys/metrics |
La ruta para la recopilación de métricas. |
token |
localhost:8200 |
Token usado para la autenticación. |
type |
Este valor debe ser vault . |
Qué se supervisa
En la siguiente tabla, se proporciona una lista de métricas que el Agente de operaciones recopila de la instancia Vault.
Tipo de métrica | |
---|---|
Categoría, tipo Recursos supervisados |
Etiquetas |
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 |
Panel de muestra
Para ver tus métricas de Vault, debes tener configurado un gráfico o un panel. Cloud Monitoring proporciona una biblioteca de paneles de muestra para integraciones, que contienen gráficos preconfigurados. Para obtener información sobre la instalación de estos paneles, consulta Instala paneles de muestra.
Verifica la configuración
En esta sección, se describe cómo verificar que hayas configurado correctamente el receptor de Vault. El agente de operaciones puede tardar uno o dos minutos en comenzar a recopilar telemetría.
Para verificar que se transfieran los registros, ve a Explorador de registros y ejecuta la siguiente consulta a fin de ver los registros de Vault:
resource.type="gce_instance"
log_id("vault_audit")
Para verificar que las métricas se transfieran, ve a Explorador de métricas y ejecuta la siguiente consulta en la pestaña MQL:
fetch gce_instance
| metric 'workload.googleapis.com/vault.memory.usage'
| every 1m
¿Qué sigue?
Para obtener una explicación sobre cómo usar Ansible a fin de instalar el agente de operaciones, configurar una aplicación de terceros y, luego, instalar un panel de muestra, consulta el video Instala el agente de operaciones para solucionar problemas de apps de terceros.