Protegendo o ElasticSearch

Protegendo o ElasticSearch

Parece haver uma grave falta de informação sobre isso, apesar do fato de que o elasticsearch instalado é extremamente explorável.

Meu principal medo em usá-lo é que, como não especialista, não tenho ideia de quais são as possíveis vulnerabilidades e como fechá-las.

Alguém pode me explicar um método de bloquear o elasticsearch para que eu possa fazer o seguinte em um ambiente seguro:

  • Vários índices por usuário. Suponha que eu possa criar isso para eles com antecedência, um usuário não deve ser capaz de realizar operações nos índices de outros usuários, exceto possivelmente consultá-los se tiver permissão. (Possivelmente alguma forma de chave secreta na URL de cada usuário?)

  • Os usuários podem adicionar e excluir objetos de seus índices à vontade, mas não podem eliminar seus índices.

  • Alguma forma de limitação do tamanho da memória do usuário, para que se algo der errado ele não sobrecarregue o serviço.

Suponho que parte disso deve ser feito no nível do aplicativo e não posso esperar que você escreva isso para mim, no entanto, a configuração padrão é muito aberta e mesmo se eu fornecer uma camada de API personalizada para isso, alguém poderia facilmente ignore-o e comunique-se diretamente com o servidor.

Responder1

Na minha opinião, a única maneira de proteger o ES da maneira que você pede é bloqueá-lo atrás de outra camada de aplicativo e fazer com que essa camada lide com transporte https/ssl, autenticação e controle de autorização.

No lado ES, foi desenvolvido um plugin de segurança jetty ES, não sei se foi bem-sucedido, quando eu estava implantando o ES pela primeira vez, o plugin estava prestes a ser lançado, então dê uma olhada:

PLUGIN ES JETTY

Responder2

Eu acho que você precisaria criar um proxy HTTP intermediário com toda essa "lógica de negócios" e permitir apenas o acesso ao ElasticSearch do host local. Dessa forma, o acesso direto ao ES é bloqueado e você pode determinar e aplicar as políticas que desejar (oba! ;)

"mesmo que eu forneça uma camada de API personalizada para isso, alguém poderá ignorá-la facilmente": eles não poderão se o ES aceitar apenas conexões do host local.

Não acho que limites de uso de memória sejam possíveis. Talvez você possa pré-aprovar consultas na camada de proxy?

Responder3

Fiz algo semelhante usando o Nginx rodando na frente do ES. É possível configurar “autorização” no Nginx com base nas palavras-chave da URL. Consulte o caso de uso definido neste documento:http://www.elasticsearch.org/blog/playing-http-tricks-nginx/

Responder4

Liguei o elasticsearch a um túnel openvpn:

Em /etc/elasticsearch/elasticsearch.yml:

network.host: 172.16.xxx.xxx

Onde 172.16.xxx.xxx são os endereços IP atribuídos pelo openvpn.

informação relacionada