Configurar elasticsearch x-pack para autenticar via LDAP

Configurar elasticsearch x-pack para autenticar via LDAP

Con el plugin x-pack de elasticsearh es posible que tanto nuestro elasticsearch como kibana utilice usuarios externos, los cuales pueden ser de LDAP, Active Directory o archivos

En este caso configuraremos nuestro elasticsearch para que autentique a traves de LDAP para los usuarios clientes y que autentique también vía archivos para los usuarios genéricos tales como el logstash, de manera a que en caso de que nuestro servidor LDAP tenga problemas no perdamos los datos que estén tratando de insertar en ese momento.

Configurar autenticacion vía LDAP

Lo primero que tenemos que hacer es asegurarnos de que nuestro LDAP acepte consultas anonimas, luego debebemos obtener los datos que necesitaremos:

- base dn: El DN donde el elasticsearch ejecutara la busqueda cuando un usuario trate de conectarse
- ldap url: Nombre o Ip de nuestro servidor LDP
- group base dn: El DN donde el elasticesarch buscara los grupos
- atributo de usuario: el atributo LDAP de nombre de usuario, normalmente es "cn" o "uid"

Una vez que tenemos todos esos datos debemos agregar al final del archivo /etc/elasticsearch/elasticsearch.yml lo siguiente:

xpack:
  security:
    authc:
      realms:
        ldap1:
          type: ldap
          order: 1
          url: "ldap://ldap.infratic.com:389"
          user_search:
            base_dn: "ou=People,dc=infratic,dc=com"
            attribute: uid
          group_search:
            base_dn: "ou=Groups,dc=infratic,dc=com"
          files:
            role_mapping: "/etc/elasticsearch/x-pack/role_mapping.y
          unmapped_groups_as_roles: false

Configurar roles para los usuarios y grupos de LDAP

Una vez que tenemos configurada la autenticacion via LDAP solo nos queda asignar los roles correspondientes a los grupos o usuarios, esto se hace en el archivo /etc/elasticsearch/x-pack/role_mapping.yml, por ejemplo:

superuser:
        # Para asignar el role a un usuario especifico
        - "uid=supervisor,,ou=People,dc=infratic,dc=com"
        # Para asignar el role a un grupo
        - "cn=administradores,ou=Groups,dc=infratic,dc=com"

Configurar autenticacion vía archivos locales

Es importante contar con un medio de autenticacion que no dependa de otros equipos para usuarios genéricos como el del logstash, esto para evitar que el logstash deje de insertar a elasticsearch cuando nuestro LDAP tenga problemas, es por eso que configuraremos también el método de autenticacion vía archivos:

Lo unico que debemos hacer es agregar al final del archivo /etc/elasticsearch/elasticsearch.yml lo siguiente:

        file1:
          type: file
          order: 0

Administrar usuarios locales

Una vez que agregamos la configuracion para autenticar via archivos locales, podemos administrar los usuarios con la herramienta /usr/share/elasticsearch/bin/x-pack/users.

Para crear un usuario:

/usr/share/elasticsearch/bin/x-pack/users useradd logstash

Para agregar un role a un usuario ya creado:

/usr/share/elasticsearch/bin/x-pack/users roles logstash -a superuser

Con el comando anterior asignamos el role superuser al usuario creado previamente.

Aplicar los cambios

Debemos reiniciar nuestro elasticsearch para que aplique todos los cambios que hicimos:

systemctl restart elasticsearch

Finalmente tenemos nuestro elasticsearch con 2 metodos de autenticaion, uno el metodo de archivos locales y el otro un servidor LDAP, no esta de mas decir que estos metodos son para autenticar usuarios, la creacion de roles se debe seguir haciendo a traves de la api del x-pack

Para mas informacion:

https://www.elastic.co/guide/en/x-pack/current/ldap-realm.html
https://www.elastic.co/guide/en/x-pack/current/file-realm.html
https://www.elastic.co/guide/en/x-pack/current/security-api-roles.html

Deja un comentario