Autenticación en Elasticsearch

Respuestas:

63

El complemento mencionado en esta respuesta ya no se admite activamente.


No hay control de acceso integrado en elasticsearch. Por lo tanto, necesitaría configurar un proxy inverso (aquí hay una publicación de blog sobre cómo configurar nginx), use uno de los complementos de elasticsearch de terceros como https://github.com/Asquera/elasticsearch-http-basic o use el plugin de seguridad oficial Shield .

imotov
fuente
Muchas gracias por la sugerencia. ¿Alguna experiencia con elasticsearch-http-basic? ¿Bueno o malo?
Robert Reiz
Un proxy inverso como nginx le brindará más opciones de seguridad, incluido el soporte SSL.
Andrew
4
Aquí también está el libro de cocina de Chef para ElasticSearch que proporciona una manera fácil de instalar ElasticSearch con un proxy inverso usando Nginx. github.com/elasticsearch/cookbook-elasticsearch
Tom Rogers
Algunas funciones de seguridad son gratuitas, a partir de las versiones 6.8.0 y 7.1.0 . Leer más: elastic.co/blog/security-for-elasticsearch-is-now-free
Aaron_ab
11

<shamelessPlug>

Lo siento, pero tengo serias dudas sobre todos estos complementos y proxies que solo intentan capturar consultas con expresiones regulares descuidadas a nivel HTTP.

¿Regex toda la sintaxis ES posible que pueda realizar una escritura? ¿Cómo se filtra por índice? ¿Qué hay de los alias de índice? ¿Consultas de índices múltiples?

La única forma limpia de hacer el control de acceso es DESPUÉS de que ElasticSearch haya analizado las consultas. ¡Esto es exactamente lo que hace Shield después de todo!

Escribí un complemento con licencia del MIT ( readonly-rest-plugin ) que hace exactamente esto.

Puede hacer coincidir la solicitud mediante:

  • ✔️ Nombre de host, IP e IP con máscara de red

  • ✔️ Los índices (se admiten comodines) y los alias de índice se resuelven

  • ✔️ Autenticación básica HTTP

También tiene soporte de primera clase para la autenticación Kibana :)

</shamelessPlug>

sscarduzio
fuente
6

Actualización : esto funciona bastante bien y es (para la mayoría de las funciones) gratuito y de código abierto: https://github.com/floragunncom/search-guard

NOTA: El complemento mencionado en este artículo ya no se mantiene


Quizás esto ayude: https://github.com/salyh/elasticsearch-security-plugin

Este complemento agrega la funcionalidad de seguridad http / rest a Elasticsearch en una especie de módulos separados. En lugar de Netty, se utiliza un Tomcat 7 integrado para procesar solicitudes http / rest.

Actualmente, para la autenticación y autorización basadas en el usuario, Kerberos y NTLM son compatibles con waffle de bibliotecas de terceros (solo en servidores Windows). Para servidores UNIX, Kerberos es compatible a través de la biblioteca de terceros tomcatspnegoad (funciona con cualquier implementación de kerberos. Para la autorización, se admite Active Directory y LDAP genérico).

Puede usar este complemento también sin Kerberos / NTLM, pero solo está disponible la autenticación basada en host.

salyh
fuente
4

La única forma preferible de habilitar la seguridad en Elasticsearch es a través del complemento X-Pack.

https://www.elastic.co/guide/en/x-pack/current/xpack-introduction.html

Este es un complemento multipropósito y se ajustará bien a los fines de seguridad, ya que también puede usar el monitoreo y configurar las alertas y notificaciones según sus necesidades.

Como ya es muy reconocido, estoy seguro de que Elasticsearch continuará con esto para iniciar sesión.

rohithnama
fuente
3

Si desea utilizar la autenticación básica con Kibana3, aquí está mi solución:

https://github.com/fangli/kibana-authentication-proxy

Admite no solo el backend basicAuth ES, sino también GoogleOAuth y BasicAuth para el cliente. Por favor, dale una estrella si te funciona, gracias.

Felix
fuente
¿Puede proporcionar algunos enlaces sobre cómo usar esto? Lo instalé e hice la aplicación, pero no encontré ninguna ayuda en línea sobre el uso.
Siddharth Trikha
3

Prueba Shield . Tiene Autenticación y Autorización. Por ahora necesita una licencia. No pasará mucho tiempo antes de que la gente cree complementos de código abierto similares.

Bharat Lakshman
fuente
3

Soy muy novato en ElasticSearch, pero creo que el complemento X-Pack debería aparecer aquí como respuesta: https://www.elastic.co/guide/en/x-pack/current/index.html

Tengo entendido que X-Pack es ahora el estándar de facto para proteger ElasticSearch (y mucho más), incluida la autenticación.

Pinkasey
fuente
1
La licencia X-Pack cuesta miles de dólares por nodo. Elastic Cloud incluye X-Pack y comienza más barato. Otra opción son los complementos de terceros.
Marek Toman
2

Con respecto a una solución específica a este problema, encontré lo siguiente que es una implementación simple de un enfoque de proxy inverso como se menciona en otras respuestas:

https://gist.github.com/jpluscplusm/9227777

Como advertencia, parece que al menos algunos en Elasticsearch no consideran que nginx sea la solución óptima, pero creo que eso depende de las especificaciones de sus requisitos de autenticación (RBAC, recuento de usuarios, número de índices, frecuencia de modificaciones de la lista de acceso ). Para algunos usuarios (incluido yo mismo), el primer ejemplo es suficiente.

http://www.elasticsearch.org/blog/restricting-users-kibana-filtered-aliases/

Si encuentra que nginx no cumple con los requisitos específicos, algo como esto podría funcionar: https://github.com/lukas-vlcek/node.es

wjimenez5271
fuente
2

Como ElasticSearch es una especie de servicio de base de datos, probablemente no querrá que se exponga públicamente de todos modos.

No confío en que los complementos hagan eso por mí, así que lo hice con un proxy nginx.

Este tutorial es muy, muy útil:

http://www.minvolai.com/blog/2014/08/Setting-up-a-Secure-Single-Node-Elasticsearch-server-behind-Nginx/Setting-up-a-Secure-Single-Node-Elasticsearch- servidor detrás de Nginx /

Panthro
fuente
2
Entiendo que no confía en ellos, pero no puede estar seguro de que realiza un aislamiento de índice real si no tiene acceso al analizador interno de ElasticSearch :) Por eso escribí esto: github.com/sscarduzio/ elasticsearch-readonlyrest-plugin
sscarduzio
2

A partir de la Elasticversión 6.8 , algunas funciones de seguridad se volvieron gratuitas (lea: https://www.elastic.co/blog/security-for-elasticsearch-is-now-free )

Algunos pasos básicos para la autenticación básica

  1. El parámetro de configuración más básica de conjunto es: "xpack.security.enabled=true".

Por ejemplo, si está utilizando un docker-compose.ymlarchivo, agregue la línea debajo de environment:

elasticsearch:
    image: elastic:6.8.0
    environment:
      - "xpack.security.enabled=true"
  1. A continuación, tendrá que especificar elasicqué contraseña debe aceptar el usuario predeterminado (que se llama "elástica") para autenticarse. Lo haces con ELASTIC_PASSWORDla variable de entorno. En nuestro ejemplo:

elasticsearch:
    image: elastic:6.8.0
    environment:
      - "xpack.security.enabled=true"
      - "ELASTIC_PASSWORD=123456"

Ahora, estás listo para empezar. Cuando corres elástico:

docker run --rm --name elastic -p 9200:9200 -v ELASTIC_PASSWORD=123456 -v xpack.security.enabled=true elastic:6.8.0

Y haz:, curl localhost:9200obtendrás un error:

{"error": {"root_cause": [{"type": "security_exception", "why": "falta el token de autenticación para la solicitud REST [/]", "header": {"WWW-Authenticate": "Dominio básico = \ "security \" charset = \ "UTF-8 \" "}}]," tipo ":" security_exception "," motivo ":" falta el token de autenticación para la solicitud REST [/] "," encabezado ": {" WWW-Authenticate ":" Reino básico = \ "seguridad \" conjunto de caracteres = \ "UTF-8 \" "}}," estado ": 401}

Que es exactamente lo que quiere (sin nombre de usuario y contraseña, por lo que no se permite el acceso)

Muy importante tener en cuenta :

  1. Cuando Elasticcomienza, se preforma Bootstrap checks( https://www.elastic.co/guide/en/elasticsearch/reference/6.8/bootstrap-checks.html ).

  2. Hay una diferencia Elasticentre el modo de "desarrollo" y el de "producción" cuando se realizan esos controles.

  3. Si se elasticejecuta en productionmodo, esas configuraciones no son suficientes (la comprobación de Bootstrap fallará y la base de datos no funcionará). También debe agregar configuraciones de cifrado SSL entre nodos. Leer más: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-settings.html

Aaron_ab
fuente