¿Cómo defino el acceso de seguridad en Elasticsearch? Tengo el complemento elasticsearch-head pero su acceso no requiere ninguna seguridad.
Respuestas:
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 .
<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>
Elasticsearch ahora tiene un complemento de seguridad http://www.elasticsearch.org/blog/shield-know-security-coming-soon/
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.
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.
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.
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.
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.
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
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:
A partir de la Elastic
versión 6.8 , algunas funciones de seguridad se volvieron gratuitas (lea: https://www.elastic.co/blog/security-for-elasticsearch-is-now-free )
"xpack.security.enabled=true"
.Por ejemplo, si está utilizando un docker-compose.yml
archivo, agregue la línea debajo de environment
:
elasticsearch:
image: elastic:6.8.0
environment:
- "xpack.security.enabled=true"
A continuación, tendrá que especificar elasic
qué contraseña debe aceptar el usuario predeterminado (que se llama "elástica") para autenticarse. Lo haces con ELASTIC_PASSWORD
la 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:9200
obtendrá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 :
Cuando Elastic
comienza, se preforma Bootstrap checks
( https://www.elastic.co/guide/en/elasticsearch/reference/6.8/bootstrap-checks.html ).
Hay una diferencia Elastic
entre el modo de "desarrollo" y el de "producción" cuando se realizan esos controles.
Si se elastic
ejecuta en production
modo, 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