En este módulo, aprenderemos cómo asegurar Elasticsearch mediante la implementación de autenticación y autorización de usuarios. Estos conceptos son fundamentales para proteger los datos y garantizar que solo los usuarios autorizados puedan acceder y modificar la información.
Conceptos Clave
- Autenticación
La autenticación es el proceso de verificar la identidad de un usuario. En Elasticsearch, esto se puede lograr mediante varios métodos, como autenticación básica, autenticación basada en tokens, y autenticación mediante proveedores externos (LDAP, Active Directory, etc.).
- Autorización
La autorización es el proceso de determinar qué acciones puede realizar un usuario autenticado. Esto se gestiona mediante roles y permisos que definen qué operaciones están permitidas en qué recursos.
Configuración de Autenticación
Autenticación Básica
La autenticación básica utiliza nombres de usuario y contraseñas para verificar la identidad de los usuarios. Elasticsearch proporciona un mecanismo sencillo para configurar la autenticación básica.
Paso 1: Habilitar la Seguridad
Para habilitar la seguridad en Elasticsearch, debes modificar el archivo de configuración elasticsearch.yml
:
Paso 2: Crear Usuarios
Puedes crear usuarios utilizando la herramienta de línea de comandos elasticsearch-users
:
Por ejemplo, para crear un usuario llamado admin
con la contraseña admin123
y el rol superuser
:
Autenticación Basada en Tokens
La autenticación basada en tokens es más segura y escalable que la autenticación básica. Elasticsearch soporta tokens de acceso que pueden ser generados y utilizados para autenticar solicitudes.
Paso 1: Generar un Token de Acceso
Para generar un token de acceso, primero debes autenticarte con un usuario válido:
curl -u admin:admin123 -X POST "localhost:9200/_security/oauth2/token" -H "Content-Type: application/json" -d' { "grant_type": "password", "username": "admin", "password": "admin123" }'
Esto devolverá un token de acceso que puedes usar en futuras solicitudes.
Paso 2: Usar el Token de Acceso
Para usar el token de acceso en una solicitud, inclúyelo en el encabezado Authorization
:
Configuración de Autorización
Roles y Permisos
Los roles en Elasticsearch definen un conjunto de permisos que pueden ser asignados a los usuarios. Puedes crear y gestionar roles mediante la API de seguridad.
Crear un Rol
Para crear un rol, utiliza la siguiente solicitud:
curl -X POST "localhost:9200/_security/role/<role_name>" -H "Content-Type: application/json" -d' { "cluster": ["all"], "indices": [ { "names": ["*"], "privileges": ["read", "write"] } ] }'
Por ejemplo, para crear un rol llamado data_analyst
con permisos de lectura y escritura en todos los índices:
curl -X POST "localhost:9200/_security/role/data_analyst" -H "Content-Type: application/json" -d' { "cluster": ["all"], "indices": [ { "names": ["*"], "privileges": ["read", "write"] } ] }'
Asignar un Rol a un Usuario
Para asignar un rol a un usuario, utiliza la siguiente solicitud:
curl -X POST "localhost:9200/_security/user/<username>/_roles" -H "Content-Type: application/json" -d' { "roles": ["<role_name>"] }'
Por ejemplo, para asignar el rol data_analyst
al usuario john
:
curl -X POST "localhost:9200/_security/user/john/_roles" -H "Content-Type: application/json" -d' { "roles": ["data_analyst"] }'
Ejercicio Práctico
Ejercicio 1: Configurar Autenticación Básica
- Habilita la seguridad en Elasticsearch modificando el archivo
elasticsearch.yml
. - Crea un usuario llamado
user1
con la contraseñapassword1
y el rolsuperuser
. - Verifica que puedes autenticarte con el usuario
user1
utilizando la autenticación básica.
Ejercicio 2: Crear y Asignar Roles
- Crea un rol llamado
read_only
con permisos de lectura en todos los índices. - Crea un usuario llamado
user2
con la contraseñapassword2
y asigna el rolread_only
. - Verifica que el usuario
user2
puede leer datos pero no puede escribir datos en los índices.
Soluciones
Solución al Ejercicio 1
-
Modifica el archivo
elasticsearch.yml
:xpack.security.enabled: true
-
Crea el usuario
user1
:bin/elasticsearch-users useradd user1 -p password1 -r superuser
-
Verifica la autenticación:
curl -u user1:password1 -X GET "localhost:9200/_cluster/health"
Solución al Ejercicio 2
-
Crea el rol
read_only
:curl -X POST "localhost:9200/_security/role/read_only" -H "Content-Type: application/json" -d' { "cluster": ["all"], "indices": [ { "names": ["*"], "privileges": ["read"] } ] }'
-
Crea el usuario
user2
y asigna el rolread_only
:bin/elasticsearch-users useradd user2 -p password2 -r read_only
-
Verifica los permisos:
curl -u user2:password2 -X GET "localhost:9200/_cluster/health" curl -u user2:password2 -X POST "localhost:9200/test/_doc/1" -H "Content-Type: application/json" -d' { "field": "value" }'
Conclusión
En esta sección, hemos aprendido cómo configurar la autenticación y autorización de usuarios en Elasticsearch. Estos mecanismos son esenciales para asegurar que solo los usuarios autorizados puedan acceder y modificar los datos. En el próximo módulo, exploraremos cómo implementar el control de acceso basado en roles para gestionar permisos de manera más granular.
Curso de Elasticsearch
Módulo 1: Introducción a Elasticsearch
- ¿Qué es Elasticsearch?
- Instalando Elasticsearch
- Conceptos Básicos: Nodos, Clústeres e Índices
- Arquitectura de Elasticsearch
Módulo 2: Empezando con Elasticsearch
Módulo 3: Técnicas Avanzadas de Búsqueda
Módulo 4: Modelado de Datos y Gestión de Índices
- Mapeo y Analizadores
- Plantillas de Índices
- Alias y Reindexación
- Gestión del Ciclo de Vida del Índice
Módulo 5: Rendimiento y Escalabilidad
- Optimizando el Rendimiento de Búsqueda
- Escalando Elasticsearch
- Monitoreo y Mantenimiento
- Respaldo y Restauración
Módulo 6: Seguridad y Control de Acceso
- Asegurando Elasticsearch
- Autenticación y Autorización de Usuarios
- Control de Acceso Basado en Roles
- Auditoría y Cumplimiento
Módulo 7: Integraciones y Ecosistema
- Elasticsearch con Logstash
- Elasticsearch con Kibana
- Elasticsearch con Beats
- Elasticsearch con Otras Herramientas