HashiCorp Vault

Vault es un sistema de gestión de secretos y cifrado basado en identidades. Esta integración recoge los registros de auditoría de Vault. La integración también recoge métricas de tokens, memoria y almacenamiento.

Para obtener más información sobre Vault, consulta la documentación de HashiCorp Vault.

Requisitos previos

Para recoger datos de telemetría de Vault, debes instalar el agente de operaciones:

  • En el caso de 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 1.6 y versiones posteriores.

Configurar la instancia de Vault

Para recoger datos de telemetría de tu instancia de Vault, debes asignar al campo prometheus_retention_time un valor distinto de cero en tu archivo de configuración de Vault HCL o JSON.

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

Además, se necesita un usuario root para habilitar la recogida de registros de auditoría y para crear una política de ACL de métricas de Prometheus. Se usa un token raíz para añadir una política que tenga funciones de lectura al endpoint /sys/metrics. Esta política se usa para crear un token de Vault con permisos suficientes para recoger métricas de Vault.

Si vas a inicializar Vault por primera vez, puedes usar la siguiente secuencia de comandos para generar un token raíz. De lo contrario, consulta Generar tokens raíz con claves de desprecintado para obtener información sobre cómo 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

Configurar el agente de operaciones para Vault

Siga la guía para configurar el agente de operaciones, añada los elementos necesarios para recoger telemetría de las instancias de Vault y reinicie el agente.

Configuración de ejemplo

Los siguientes comandos crean la configuración para recoger e ingerir telemetría de Vault:

# Configures Ops Agent to collect telemetry from the app. You must restart the agent for the configuration to take effect.

set -e

# Check if the file exists
if [ ! -f /etc/google-cloud-ops-agent/config.yaml ]; then
  # Create the file if it doesn't exist.
  sudo mkdir -p /etc/google-cloud-ops-agent
  sudo touch /etc/google-cloud-ops-agent/config.yaml
fi

# 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

Para que estos cambios se apliquen, debes reiniciar el agente de Ops:

Linux

  1. Para reiniciar el agente, ejecuta el siguiente comando en tu instancia:
    sudo systemctl restart google-cloud-ops-agent
    
  2. Para confirmar que el agente se ha reiniciado, ejecuta el siguiente comando y verifica que los componentes "Metrics Agent" y "Logging Agent" se han iniciado:
    sudo systemctl status "google-cloud-ops-agent*"
    

Windows

  1. Conéctate a tu instancia mediante RDP o una herramienta similar e inicia sesión en Windows.
  2. Abre un terminal de PowerShell con privilegios de administrador haciendo clic con el botón derecho en el icono de PowerShell y seleccionando Ejecutar como administrador.
  3. Para reiniciar el agente, ejecuta el siguiente comando de PowerShell:
    Restart-Service google-cloud-ops-agent -Force
    
  4. Para confirmar que el agente se ha reiniciado, ejecuta el siguiente comando y verifica que los componentes "Metrics Agent" y "Logging Agent" se han iniciado:
    Get-Service google-cloud-ops-agent*
    

Configurar la recogida de registros

Para ingerir registros de Vault, debe crear un receptor para los registros que genere Vault y, a continuación, crear una canalización para el nuevo receptor.

Para configurar un receptor de tus registros vault_audit, especifica los siguientes campos:

Campo Predeterminado Descripción
exclude_paths Lista de patrones de rutas del sistema de archivos que se excluirán del conjunto que coincida con include_paths.
include_paths Lista de rutas del sistema de archivos que se van a leer siguiendo cada archivo. Se puede usar un comodín (*) en las rutas.
record_log_file_path false Si se asigna el valor true, la ruta al archivo específico del que se ha obtenido el registro de log aparece en la entrada de log de salida como valor de la etiqueta agent.googleapis.com/log_file_path. Cuando se usa un comodín, solo se registra la ruta del archivo del que se ha obtenido el registro.
type El valor debe ser vault_audit.
wildcard_refresh_interval 60s Intervalo en el que se actualizan las rutas de archivos con comodines en include_paths. Se indica como duración; por ejemplo, 30s o 2m. Esta propiedad puede ser útil cuando el volumen de registros es alto y los archivos de registro se rotan más rápido que el intervalo predeterminado.

Qué se registra

El logName se deriva de los IDs de receptor especificados en la configuración. Los campos detallados de LogEntry son los siguientes.

Los registros de vault_audit contienen los siguientes campos en LogEntry:

Campo Tipo Descripción
jsonPayload.auth tipo STRUCT
jsonPayload.auth.accessor cadena Es un HMAC del accessor del token de cliente.
jsonPayload.auth.client_token cadena Es un HMAC del ID de token del cliente.
jsonPayload.auth.display_name cadena Es el nombre visible definido por el rol del método de autenticación o explícitamente en el momento de la creación del secreto.
jsonPayload.auth.entity_id cadena Es un identificador de entidad de token.
jsonPayload.auth.metadata objeto Contendrá una lista de pares clave-valor de metadatos asociados al client_token.
jsonPayload.auth.policies objeto Contendrá una lista de las políticas asociadas al client_token.
jsonPayload.auth.token_type cadena
jsonPayload.error cadena Si se ha producido un error con la solicitud, el mensaje de error se incluye en el valor de este campo.
jsonPayload.request tipo STRUCT
jsonPayload.request.client_token cadena Es un HMAC del ID de token del cliente.
jsonPayload.request.client_token_accessor cadena Es un HMAC del accessor del token de cliente.
jsonPayload.request.data objeto El objeto de datos contendrá datos secretos en pares clave-valor.
jsonPayload.request.headers objeto Encabezados HTTP adicionales especificados por el cliente como parte de la solicitud.
jsonPayload.request.id cadena Es el identificador único de la solicitud.
jsonPayload.request.namespace.id cadena
jsonPayload.request.operation cadena Es el tipo de operación que corresponde a las funciones de ruta y debe ser uno de los siguientes: create, read, update, delete o list.
jsonPayload.request.path cadena Ruta de Vault solicitada para la operación.
jsonPayload.request.policy_override booleano Es true cuando se ha solicitado una anulación de una política de obligatoriedad flexible.
jsonPayload.request.remote_address cadena La dirección IP del cliente que hace la solicitud.
jsonPayload.request.wrap_ttl cadena Si el token está envuelto, se muestra el valor de TTL envuelto configurado como una cadena numérica.
jsonPayload.response tipo STRUCT
jsonPayload.response.data.accessor cadena Es un HMAC del accessor del token de cliente.
jsonPayload.response.data.creation_time cadena Marca de tiempo en formato RFC 3339 de la creación del token.
jsonPayload.response.data.creation_ttl cadena Tiempo de vida del token de creación en segundos.
jsonPayload.response.data.display_name cadena Es el nombre visible definido por el rol del método de autenticación o explícitamente en el momento de la creación del secreto.
jsonPayload.response.data.entity_id cadena Es un identificador de entidad de token.
jsonPayload.response.data.expire_time cadena Marca de tiempo en formato RFC 3339 que representa el momento en el que caducará este token.
jsonPayload.response.data.explicit_max_ttl cadena Valor máximo explícito del TTL del token en segundos ("0" si no se ha definido).
jsonPayload.response.data.id cadena Es el identificador único de la respuesta.
jsonPayload.response.data.issue_time cadena Marca de tiempo en formato RFC 3339.
jsonPayload.response.data.num_uses número Si el token está limitado a un número de usos, ese valor se representará aquí.
jsonPayload.response.data.orphan booleano Valor booleano que representa si el token es huérfano.
jsonPayload.response.data.path cadena Ruta de Vault solicitada para la operación.
jsonPayload.response.data.policies objeto Contendrá una lista de las políticas asociadas al client_token.
jsonPayload.response.data.renewable booleano Valor booleano que representa si el token es huérfano.
jsonPayload.type cadena El tipo de registro de auditoría.
severity cadena (LogSeverity) Nivel de entrada de registro (traducido).

Configurar recogida de métricas

Para ingerir métricas de Vault, debe crear un receptor para las métricas que genera Vault y, a continuación, crear una canalización para el nuevo receptor.

Este receptor no admite el uso de varias instancias en la configuración, por ejemplo, para monitorizar varios endpoints. Todas estas instancias escriben en la misma serie temporal y Cloud Monitoring no tiene forma de distinguirlas.

Para configurar un receptor de sus métricas de vault, especifique los siguientes campos:

Campo Predeterminado Descripción
ca_file Ruta al certificado de la AC. Como cliente, esto verifica el certificado del servidor. Si está vacío, el receptor usa la CA raíz del sistema.
cert_file Ruta al certificado TLS que se va a usar en las conexiones que requieren mTLS.
collection_interval 60s Un valor de duración, como 30s o 5m.
endpoint localhost:8200 El formato "nombre_de_host:puerto" que usa Vault.
insecure true Define si se debe usar una conexión TLS segura. Si se le asigna el valor false, TLS se habilita.
insecure_skip_verify false Define si se debe omitir la verificación del certificado. Si insecure se define como true, no se utiliza el valor de insecure_skip_verify.
key_file Ruta a la clave TLS que se va a usar en las conexiones que requieren mTLS.
metrics_path /v1/sys/metrics Ruta de recogida de métricas.
token localhost:8200 Token usado para la autenticación.
type Este valor debe ser vault.

Qué se monitoriza

En la siguiente tabla se muestra la lista de métricas que recoge el agente de operaciones de la instancia de Vault.

Tipo de métrica 
Tipo
Recursos monitorizados
Etiquetas
workload.googleapis.com/vault.audit.request.failed
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/vault.audit.response.failed
CUMULATIVEINT64
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
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/vault.storage.operation.delete.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.delete.time
CUMULATIVEDOUBLE
gce_instance
storage
workload.googleapis.com/vault.storage.operation.get.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.get.time
CUMULATIVEDOUBLE
gce_instance
storage
workload.googleapis.com/vault.storage.operation.list.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.list.time
CUMULATIVEDOUBLE
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
cluster
namespace
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
 

Verificar la configuración

En esta sección se describe cómo verificar que ha configurado correctamente el receptor de Vault. El agente de Ops puede tardar uno o dos minutos en empezar a recoger datos de telemetría.

Para comprobar que los registros de Vault se envían a Cloud Logging, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página Explorador de registros:

    Ve al Explorador de registros.

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.

  2. Introduce la siguiente consulta en el editor y haz clic en Ejecutar consulta:
    resource.type="gce_instance"
    log_id("vault_audit")
    

Para verificar que las métricas de Vault se envían a Cloud Monitoring, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página  Explorador de métricas:

    Ve al explorador de métricas.

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Monitorización.

  2. En la barra de herramientas del panel de creación de consultas, selecciona el botón cuyo nombre sea  MQL o  PromQL.
  3. Verifica que PromQL esté seleccionado en el interruptor Idioma. El interruptor de idioma se encuentra en la misma barra de herramientas que te permite dar formato a tu consulta.
  4. Introduce la siguiente consulta en el editor y haz clic en Ejecutar consulta:
    {"workload.googleapis.com/vault.memory.usage", monitored_resource="gce_instance"}
    

Ver panel de control

Para ver las métricas de Vault, debe tener configurado un gráfico o un panel de control. La integración de Vault incluye uno o varios paneles de control. Los paneles de control se instalan automáticamente después de configurar la integración y cuando el agente de Ops ha empezado a recoger datos de métricas.

También puedes ver vistas previas estáticas de los paneles de control sin instalar la integración.

Para ver un panel de control instalado, siga estos pasos:

  1. En la Google Cloud consola, ve a la página  Paneles de control:

    Ve a Paneles.

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Monitorización.

  2. Seleccione la pestaña Lista de paneles de control y, a continuación, elija la categoría Integraciones.
  3. Haga clic en el nombre del panel de control que quiera ver.

Si has configurado una integración, pero el panel de control no se ha instalado, comprueba que el agente de operaciones se esté ejecutando. Si no hay datos de métricas para un gráfico del panel de control, no se podrá instalar el panel. Una vez que el agente de Ops empiece a recoger métricas, se instalará el panel de control.

Para ver una vista previa estática del panel de control, siga estos pasos:

  1. En la Google Cloud consola, ve a la página  Integraciones:

    Ve a Integraciones.

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Monitorización.

  2. Haz clic en el filtro de plataforma de implementación Compute Engine.
  3. Busca la entrada de Vault y haz clic en Ver detalles.
  4. Seleccione la pestaña Paneles para ver una vista previa estática. Si el panel de control está instalado, puedes acceder a él haciendo clic en Ver panel de control.

Para obtener más información sobre los paneles de control de Cloud Monitoring, consulta Paneles de control y gráficos.

Para obtener más información sobre cómo usar la página Integraciones, consulta el artículo Gestionar integraciones.

Instalar políticas de alertas

Las políticas de alertas indican a Cloud Monitoring que te envíe una notificación cuando se produzcan las condiciones especificadas. La integración de Vault incluye una o varias políticas de alertas que puedes usar. Puedes ver e instalar estas políticas de alertas desde la página Integraciones de Monitoring.

Para ver las descripciones de las políticas de alertas disponibles e instalarlas, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página  Integraciones:

    Ve a Integraciones.

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Monitorización.

  2. Busca la entrada de Vault y haz clic en Ver detalles.
  3. Selecciona la pestaña Alertas. En esta pestaña se ofrecen descripciones de las políticas de alertas disponibles y se proporciona una interfaz para instalarlas.
  4. Instala las políticas de alertas. Las políticas de alertas necesitan saber dónde enviar las notificaciones de que se ha activado una alerta, por lo que requieren información para la instalación. Para instalar políticas de alertas, haz lo siguiente:
    1. En la lista de políticas de alertas disponibles, selecciona las que quieras instalar.
    2. En la sección Configurar notificaciones, selecciona uno o varios canales de notificación. Puedes inhabilitar el uso de canales de notificación, pero si lo haces, tus políticas de alertas se activarán de forma silenciosa. Puedes consultar su estado en Monitorización, pero no recibirás ninguna notificación.

      Para obtener más información sobre los canales de notificación, consulta el artículo Gestionar canales de notificación.

    3. Haz clic en Crear políticas.

Para obtener más información sobre las políticas de alertas en Cloud Monitoring, consulta la introducción a las alertas.

Para obtener más información sobre cómo usar la página Integraciones, consulta el artículo Gestionar integraciones.

Siguientes pasos

Para ver una guía sobre cómo usar Ansible para instalar el Agente de operaciones, configurar una aplicación de terceros e instalar un panel de control de ejemplo, consulta el vídeo Instalar el Agente de operaciones para solucionar problemas con aplicaciones de terceros.