HashiCorp Vault

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 configurar el campo prometheus_retention_time con un valor distinto de cero en tu archivo de configuración 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 un usuario raíz para habilitar la recopilación de registros de auditoría y crear una política de LCA de prometheus-metrics. Se usa un token raíz para agregar una política que tenga capacidades de lectura al extremo /sys/metrics. Esta política se usa para crear un token de Vault con los permisos suficientes para recopilar métricas de Vault.

Si estás inicializando Vault por primera vez, puedes usar la siguiente secuencia de comandos para generar un token raíz. De lo contrario, consulta Genera tokens raíz con claves para anulación de sellos y obtén 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.

# 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 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 a través de 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 Este contendrá una lista de 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 booleano 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

Para transferir métricas desde Vault, debes crear un receptor para las métricas que produce Vaulty, luego, crear una canalización para el receptor nuevo.

Este receptor no admite el uso de varias instancias en la configuración, por ejemplo, para supervisar varios extremos. Todas estas instancias escriben en las mismas series temporales, y Cloud Monitoring no tiene forma de distinguirlas.

Para 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
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
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
 

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 los registros de Vault se envíen a Cloud Logging, haz lo siguiente:

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

    Ir al Explorador de registros

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Logging.

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

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

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

    Dirígete al Explorador de métricas

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Monitoring.

  2. En la barra de herramientas del panel del compilador de consultas, selecciona el botón cuyo nombre sea MQL o MQL.
  3. Verifica que MQL esté seleccionado en el botón de activación MQL. El botón de activación de lenguaje se encuentra en la misma barra de herramientas que te permite dar formato a tu consulta.
  4. Ingresa la siguiente consulta en el editor y, luego, haz clic en Ejecutar consulta:
    fetch gce_instance
    | metric 'workload.googleapis.com/vault.memory.usage'
    | every 1m
    

Ver panel

Para ver tus métricas de Vault, debes tener configurado un gráfico o un panel. La integración de Vault incluye uno o más paneles. Cualquier panel se instala de forma automática después de que configuras la integración y de que el agente de operaciones comienza a recopilar datos de métricas.

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

Para ver un panel instalado, haz lo siguiente:

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

    Dirígete a Paneles de control

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Monitoring.

  2. Selecciona la pestaña Lista de paneles y, luego, la categoría Integraciones.
  3. Haz clic en el nombre del panel que quiera ver.

Si configuraste una integración, pero el panel no se instaló, verifica que el agente de operaciones se esté ejecutando. Cuando no hay datos de métricas para un gráfico en el panel, la instalación del panel falla. Una vez que el agente de operaciones comienza a recopilar métricas, el panel se instalará por ti.

Para obtener una vista previa estática del panel, haz lo siguiente:

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

    Dirígete a Integraciones

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Monitoring.

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

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

Para obtener más información del uso de la página Integraciones, consulta Administra integraciones.

Instala políticas de alertas

Las políticas de alertas le indican a Cloud Monitoring que te notifique cuando ocurren condiciones especificadas. La integración de Vault incluye una o más políticas de alertas para que uses. Puedes ver e instalar estas políticas de alertas desde la página Integraciones en Monitoring.

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

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

    Dirígete a Integraciones

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Monitoring.

  2. Ubica la entrada para Vault y haz clic en Ver detalles.
  3. Selecciona la pestaña Alertas. En esta pestaña, se proporcionan descripciones de las políticas de alertas disponibles y una interfaz para instalarlas.
  4. Instala las políticas de alertas. Las políticas de alertas deben saber a dónde enviar notificaciones que la alerta se activó, por lo que requieren información de ti para la instalación. Para instalar las políticas de alertas, haz lo siguiente:
    1. En la lista de políticas de alertas disponibles, elige las que deseas instalar.
    2. En la sección Configura notificaciones, elige uno o más canales de notificaciones. Tienes la opción de inhabilitar el uso de los canales de notificación, pero si lo haces, las políticas de alertas se activarán de forma silenciosa. Puedes verificar su estado en Monitoring, pero no recibirás notificaciones.

      Para obtener más información de los canales de notificaciones, consulta Administra canales de notificaciones.

    3. Haz clic en Crear políticas.

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

Para obtener más información del uso de la página Integraciones, consulta Administra integraciones.

¿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 aplicaciones de terceros] (https://www.youtube.com/watch?v=GQgNygd-XJU&t=7s).