ProHoster > Blog > administración > Elastic under lock and key: habilitando las opciones de seguridad del clúster de Elasticsearch para el acceso desde dentro y desde fuera
Elastic under lock and key: habilitando las opciones de seguridad del clúster de Elasticsearch para el acceso desde dentro y desde fuera
Elastic Stack es una herramienta muy conocida en el mercado de sistemas SIEM (en realidad, no solo ellos). Puede recopilar una gran cantidad de datos de diferentes tamaños, tanto confidenciales como no muy confidenciales. No es del todo correcto si el acceso a los propios elementos del Elastic Stack no está protegido. De forma predeterminada, todos los elementos listos para usar de Elastic (recolectores Elasticsearch, Logstash, Kibana y Beats) se ejecutan en protocolos abiertos. Y en el propio Kibana, la autenticación está deshabilitada. Todas estas interacciones se pueden proteger y en este artículo le diremos cómo hacerlo. Por conveniencia, dividimos la narrativa en 3 bloques semánticos:
Modelo de acceso a datos basado en roles
Seguridad de datos dentro de un clúster de Elasticsearch
Proteger datos fuera de un clúster de Elasticsearch
Detalles bajo el corte.
Modelo de acceso a datos basado en roles
Si instala Elasticsearch y no lo ajusta de ninguna manera, el acceso a todos los índices estará abierto para todos. Bueno, o aquellos que saben usar curl. Para evitar esto, Elasticsearch tiene un modelo a seguir que está disponible a partir de una suscripción Básica (que es gratuita). Esquemáticamente se parece a esto:
¿Qué hay en la imagen?
Los usuarios son todas aquellas personas que pueden iniciar sesión con sus credenciales.
Los recursos son índices, documentos, campos, usuarios y otras entidades de almacenamiento (el modelo a seguir para algunos recursos solo está disponible con suscripciones pagas).
Por defecto Elasticsearch tiene usuarios de caja, al que están unidos roles de caja. Una vez que habilite la configuración de seguridad, podrá comenzar a usarla inmediatamente.
Para habilitar la seguridad en la configuración de Elasticsearch, debe agregarla al archivo de configuración (de forma predeterminada, esto es elasticsearch/config/elasticsearch.yml) nueva línea:
xpack.security.enabled: true
Después de cambiar el archivo de configuración, inicie o reinicie Elasticsearch para que los cambios surtan efecto. El siguiente paso es asignar contraseñas a los usuarios del box. Hagamos esto de forma interactiva usando el siguiente comando:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
Comprobamos:
[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Enter host password for user 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1
Puede darse una palmadita en la espalda: la configuración en el lado de Elasticsearch está completa. Ahora es el momento de configurar Kibana. Si lo ejecuta ahora, aparecerán errores, por lo que es importante crear un almacén de claves. Esto se hace en dos comandos (usuario kibana y la contraseña ingresada en el paso de creación de contraseña en Elasticsearch):
Si todo es correcto, Kibana comenzará a solicitar un nombre de usuario y contraseña. La suscripción Básica incluye un modelo a seguir basado en usuarios internos. A partir de Gold, puede conectar sistemas de autenticación externos: LDAP, PKI, Active Directory y sistemas de inicio de sesión único.
Los derechos de acceso a objetos dentro de Elasticsearch también pueden ser limitados. Sin embargo, para hacer lo mismo con documentos o campos, necesitarás una suscripción paga (este lujo comienza con el nivel Platino). Estas configuraciones están disponibles en la interfaz de Kibana o mediante API de seguridad. Puede consultar el ya familiar menú Herramientas de desarrollo:
Seguridad de datos dentro de un clúster de Elasticsearch
Cuando Elasticsearch se ejecuta en un clúster (lo cual es común), la configuración de seguridad dentro del clúster se vuelve importante. Para una comunicación segura entre nodos, Elasticsearch utiliza el protocolo TLS. Para configurar una interacción segura entre ellos, necesita un certificado. Generamos un certificado y clave privada en formato PEM:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem
Después de ejecutar el comando anterior, en el directorio /../búsqueda elástica aparecerá el archivo pila-elastica-ca.zip. En su interior encontrarás un certificado y una clave privada con extensiones. crt и clave respectivamente. Es recomendable colocarlos en un recurso compartido, al que se debe poder acceder desde todos los nodos del clúster.
Cada nodo ahora necesita sus propios certificados y claves privadas basadas en las del directorio compartido. Al ejecutar el comando, se le pedirá que establezca una contraseña. Puede agregar opciones adicionales -ip y -dns para una verificación completa de los nodos que interactúan.
Como resultado de ejecutar el comando recibiremos un certificado y una clave privada en formato PKCS#12, protegida por contraseña. Ya sólo queda mover el archivo generado. p12 al directorio de configuración:
Existe otra opción de seguridad: el filtrado de direcciones IP (disponible en suscripciones del nivel Gold). Le permite crear listas blancas de direcciones IP desde las que puede acceder a los nodos.
Proteger datos fuera de un clúster de Elasticsearch
Fuera del clúster significa conectar herramientas externas: Kibana, Logstash, Beats u otros clientes externos.
Para configurar la compatibilidad con https (en lugar de http), agregue nuevas líneas a elasticsearch.yml:
Después de agregar las claves, los nodos de Elasticsearch están listos para conectarse a través de https. Ahora se pueden lanzar.
El siguiente paso es crear una clave para conectar Kibana y agregarla a la configuración. Basándonos en el certificado que ya se encuentra en el directorio compartido, generaremos un certificado en formato PEM (PKCS#12 Kibana, Logstash y Beats aún no son compatibles):
Las claves están ahí, así que solo queda cambiar la configuración de Kibana para que empiece a utilizarlas. En el archivo de configuración kibana.yml, cambie http a https y agregue líneas con la configuración de conexión SSL. Las últimas tres líneas configuran la comunicación segura entre el navegador del usuario y Kibana.
De este modo, se completa la configuración y se cifra el acceso a los datos en el clúster de Elasticsearch.
Si tiene preguntas sobre las capacidades de Elastic Stack en suscripciones gratuitas o pagas, tareas de monitoreo o creación de un sistema SIEM, deje una solicitud a formulario de comentarios en nuestro sitio web.
Más de nuestros artículos sobre Elastic Stack en Habré: