Endurecimiento de seguridad de Elasticsearch (security, TLS, roles, audit)
ElasticsearchNivel: AvanzadoDuración: 10 min (auditoría) – 2 horas (endurecimiento completo)No es una instalación ni una guía de operación diaria: runbook por escenarios para endurecer un cluster Elasticsearch en funcionamiento. Auditoría de seguridad de solo lectura, activación de la security desactivada junto con transport TLS (reinicio completo del cluster), paso rolling a HTTP TLS, roles DBA/aplicación, API key con caducidad, usuario de emergencia del file realm, retirada de elastic del uso diario, desactivación del acceso anonymous, network.host y filtrado por IP, audit logging (con comprobación de licencia), acceso al snapshot repository y token de service account de Kibana; al final se repite la auditoría para mostrar que los riesgos están cerrados. En las instalaciones RPM/DEB de 8.x/9.x la security y TLS ya vienen activados: empiece por la auditoría y aplique solo los escenarios que den RIESGO o AVISO. Las tareas de shards, disco y nodos están en la guía de operación; las copias, en la guía de snapshot.
Topología: Cluster Elasticsearch de 1–12 nodos (+ Kibana)
Escenarios
- Auditoría del estado de seguridad (solo lectura) — No cambia nada. Se informa como OK / AVISO / RIESGO si la security está activada, el acceso sin autenticación, TLS de HTTP/transport, el acceso anonymous, los usuarios y el uso de elastic, las API key sin caducidad, el audit logging, el filtrado por IP, las direcciones de escucha y el estado de la licencia. Elíjalo si no sabe por dónde empezar.
- Endurecimiento completo (todo en orden) — Auditoría → security + TLS de transport/HTTP (si está desactivada; reinicio completo del cluster) → usuarios/roles/API key, desactivar anonymous, retirar elastic del uso diario → red y filtrado por IP → audit logging (si la licencia lo permite) → acceso al snapshot repository → conexión de Kibana → auditoría final.
- Security desactivada: activar la seguridad y transport TLS — Cluster con xpack.security.enabled: false, o actualizado desde 7.x, al que se accede sin autenticación. Se generan certificados y se activa la security con TLS de transport (y opcionalmente de HTTP). Requiere un reinicio completo del cluster (interrupción): las conexiones con y sin TLS entre nodos no pueden convivir.
- Pasar el tráfico HTTP (REST) a TLS — La security está activada pero el puerto 9200 es HTTP sin cifrar: las contraseñas se pueden leer en la red. Se distribuyen certificados HTTP y los nodos se reinician de uno en uno; los clientes pasan a https://.
- Usuarios, roles, API key; elastic y acceso anonymous — Las aplicaciones se conectan con el superusuario elastic, el acceso anonymous está activado o hay API key sin caducidad. Roles/usuarios separados para DBA y aplicación, API key con caducidad para la aplicación, usuario de emergencia (file realm); se cambia la contraseña de elastic y se retira del uso diario.
- Activar el audit logging — Debe quedar registrado quién accedió a qué índice, los intentos de inicio de sesión fallidos, las denegaciones de autorización y los cambios de ajustes de seguridad. xpack.security.audit.enabled (estático, reinicio rolling) — requiere licencia (el paso comprueba la licencia).
- Acceso de red y filtrado por IP — 9200/9300 escuchan en todas las interfaces o están abiertos a todo el mundo. network.host se limita a la IP interna y, con el firewall y el filtrado por IP de Elasticsearch, solo se permiten los nodos, Kibana y la red de aplicaciones.
- Proteger el acceso al snapshot repository — El directorio de snapshots es legible por todos, el privilegio para gestionar el repository es demasiado amplio o las claves de acceso a la nube están en elasticsearch.yml. Permisos del directorio, rol de operador de snapshots, keystore y registro del repository de solo lectura en el segundo cluster.
- Proteger la conexión de Kibana — Kibana se conecta con el usuario elastic o sin cifrado, y la contraseña está en texto plano en kibana.yml. Token de service account, verificación de la CA, keystore y claves de cifrado.
Antes de empezar
- root/sudo en todos los nodos; SSH desde el primer nodo a los demás (distribución de certificados).
- El cluster está en green; las operaciones rolling no se hacen en un cluster con problemas.
- python3 (análisis de JSON), openssl y unzip instalados.
- Activar la security (transport TLS) requiere un reinicio completo del cluster: ventana de mantenimiento y snapshot tomado de antemano.
- Inventario de clientes (Kibana, Logstash, Beats, aplicaciones): al activar HTTP TLS y la autenticación, cada uno debe actualizarse con https + CA + usuario/API key.
- El audit logging y el filtrado por IP son funciones de licencia de pago (Gold o superior: Gold, Platinum, Enterprise o trial de 30 días; en las suscripciones self-managed nuevas, Platinum/Enterprise). Ninguno de los dos funciona con licencia Basic: el ajuste se acepta, pero no se generan registros de auditoría y el filtro de IP no bloquea ninguna conexión. Licencia: GET _license.
Fases de la guía
- Preparación: red de seguridad y herramientas auxiliares — Copia de configuración, keystore y certificados: … · Tomar un snapshot (recomendado) · PyYAML y herramientas: … · Permisos de los archivos de configuración: … · Escribir las credenciales de administrador en el archivo netrc
- Auditoría del estado (solo lectura) — Informe de seguridad: … · Relacionar los hallazgos con los escenarios
- Activar la security: diagnóstico y certificados — Diagnóstico: ¿está realmente desactivada la security? · Generar la CA y los certificados de los nodos · Distribuir los certificados a los nodos · Permisos de los certificados: … · elasticsearch.yml: ajustes de security y TLS: … · Detener el shard allocation y hacer flush
- Activar la security: reinicio completo del cluster — Detener: … · Iniciar: … · Establecer la contraseña de elastic · Escribir las credenciales de administrador en el archivo netrc (elastic) · Reactivar el shard allocation y esperar el estado · Contraseña de kibana_system …
- HTTP TLS: certificados — Estado actual · Generar los certificados HTTP · Distribución y permisos: …
- Usuarios, roles y API key — Usuarios, roles y API key existentes · Usuario administrador DBA (…) · Usuario de emergencia (file realm): … · Rol y usuario de la aplicación (…) · API key con caducidad para la aplicación · Verificar el mínimo privilegio (…) …
- Acceso de red y filtrado por IP — Firewall: … · ¿Está network.host en la IP interna?: … · Filtrado por IP de Elasticsearch
- Audit logging: licencia y ajustes — ¿Permite la licencia el audit logging?
- Audit logging: selección de eventos y verificación — Qué eventos registrar · ¿Se generan registros de audit?: …
- Acceso al snapshot repository — Permisos del directorio de snapshots: … · Lista de repositories, claves de nube y rol de operador de snapshots
- Conexión de Kibana — Token de service account de Kibana · kibana.yml y keystore · Verificar la conexión de Kibana
- Auditoría final (tras el endurecimiento) — Informe de seguridad: … (estado final)
- Limpieza y seguimiento — Borrar los archivos temporales de credenciales: … · Seguimiento