Parece haber una gran falta de información al respecto a pesar de que, una vez instalado, elasticsearch es extremadamente explotable.
Mi principal temor al usarlo es que, como no experto, no tengo idea de cuáles son las posibles vulnerabilidades y cómo cerrarlas.
¿Alguien puede explicarme un método para bloquear elasticsearch para que pueda hacer lo siguiente dentro de un entorno seguro?
Múltiples índices por usuario. Supongamos que puedo crear esto para ellos con anticipación, un usuario no debería poder realizar operaciones en los índices de otros usuarios, excepto posiblemente consultarlos si se le otorga permiso. (¿Posiblemente algún tipo de clave secreta en la URL para cada usuario?)
Los usuarios pueden agregar y eliminar objetos de sus índices a voluntad, pero no eliminarlos.
Alguna forma de limitación del tamaño de la memoria para el usuario, de modo que si algo sale mal no pueda sobrecargar el servicio.
Supongo que parte de esto debe hacerse a nivel de aplicación y no puedo esperar que escribas esto por mí; sin embargo, la configuración predeterminada es demasiado abierta e incluso si le proporciono una capa API personalizada, alguien podría fácilmente evítelo y comuníquese directamente con el servidor.
Respuesta1
En mi opinión, la única forma de proteger ES de la forma que usted solicita es bloquearlo detrás de otra capa de aplicación y hacer que esa capa maneje el transporte https/ssl, la autenticación y el control de autorización.
En el lado de ES, se desarrolló un complemento de seguridad Jetty ES, no sé si tuvo éxito, cuando estaba implementando ES por primera vez, el complemento estaba a punto de ser lanzado, así que mírelo:
Respuesta2
Supongo que necesitaría crear un proxy HTTP intermedio con toda esta "lógica empresarial" y solo permitir el acceso a ElasticSearch desde el host local. De esta manera se bloquea el acceso directo a ES y usted puede determinar y hacer cumplir las políticas que desee (¡yay!;)
"Incluso si le proporciono una capa API personalizada, alguien podría omitirla fácilmente": no pueden si ES solo acepta conexiones desde el host local.
No creo que sean posibles límites de uso de memoria, ¿tal vez podría aprobar previamente las consultas dentro de la capa de proxy?
Respuesta3
Hice algo similar usando Nginx ejecutándose frente a ES. Es posible configurar la "autorización" en Nginx en función de las palabras clave en la URL. Consulte el caso de uso definido en este documento:http://www.elasticsearch.org/blog/playing-http-tricks-nginx/
Respuesta4
Vinculé elasticsearch a un túnel openvpn:
En /etc/elasticsearch/elasticsearch.yml:
network.host: 172.16.xxx.xxx
Donde 172.16.xxx.xxx son las direcciones IP asignadas por openvpn.