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

  1. 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.).

  1. 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:

xpack.security.enabled: true

Paso 2: Crear Usuarios

Puedes crear usuarios utilizando la herramienta de línea de comandos elasticsearch-users:

bin/elasticsearch-users useradd <username> -p <password> -r <role>

Por ejemplo, para crear un usuario llamado admin con la contraseña admin123 y el rol superuser:

bin/elasticsearch-users useradd admin -p admin123 -r 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:

curl -X GET "localhost:9200/_cluster/health" -H "Authorization: Bearer <access_token>"

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

  1. Habilita la seguridad en Elasticsearch modificando el archivo elasticsearch.yml.
  2. Crea un usuario llamado user1 con la contraseña password1 y el rol superuser.
  3. Verifica que puedes autenticarte con el usuario user1 utilizando la autenticación básica.

Ejercicio 2: Crear y Asignar Roles

  1. Crea un rol llamado read_only con permisos de lectura en todos los índices.
  2. Crea un usuario llamado user2 con la contraseña password2 y asigna el rol read_only.
  3. Verifica que el usuario user2 puede leer datos pero no puede escribir datos en los índices.

Soluciones

Solución al Ejercicio 1

  1. Modifica el archivo elasticsearch.yml:

    xpack.security.enabled: true
    
  2. Crea el usuario user1:

    bin/elasticsearch-users useradd user1 -p password1 -r superuser
    
  3. Verifica la autenticación:

    curl -u user1:password1 -X GET "localhost:9200/_cluster/health"
    

Solución al Ejercicio 2

  1. 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"]
        }
      ]
    }'
    
  2. Crea el usuario user2 y asigna el rol read_only:

    bin/elasticsearch-users useradd user2 -p password2 -r read_only
    
  3. 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.

© Copyright 2024. Todos los derechos reservados