Ativando a autenticação do Elasticsearch e Kibana

Anselmo Borges
Rescue Point
Published in
6 min readOct 21, 2020
Em 5 minutos você vai aprender como habilitar a autenticação no ElasticSearch e no Kibana

Vamos lá, precisamos ser rápidos e objetivos! rs

Até a versão 6 o Elasticsearch para ativar a autenticação, precisaria ser licenciado e o modulo de security fazia parte do pack da Elastic chamado X-pack que além de segurança tem vários outros módulos, como Machine Learning, Watcher, Grafos e outros.

A partir da versão 7 o módulo de security é gratuito, portanto no seu Elasticsearch e Kibana free, você já pode ativar a autenticação, o que inibe que pessoas realizem um nmap na sua rede e descubram que sua porta 9200 (Elasticsearch) ou 5601 (Kibana) estejam expostas a qualquer tipo de consulta as vezes até indevida.

Sendo assim vou usar um exemplo com uma instalação do fonte apenas para exemplo, mas instalações RPM, DEB e Windows seguem o mesmo princípio. Vamos partir do princípio que já temos o Elasticsearch e o Kibana instalados, estou usando no exemplo a versão 7.5.1 configurados com o server sendo localhost mesmo.

Sendo assim já temos:

  • Elasticsearch 7.5.1 — Cluster de 1 node configurado para o localhost 127.0.0.1, instalado a partir do fonte (tar.gz)
  • Kibana 7.5.1 — No mesmo node configurado para o localhost 127.0.0.1, instalado a partir do fonte (tar.gz)
  • Ambas as instalações sem autenticação ativadas.

Primeiramente vamos ativar a autenticação no Elasticsearch:

Vamos validar a autenticação do ambiente instalado, tentando fazer uma conexão via CURL sem senha:

Rode esse comando aqui:

curl -X GET "127.0.0.1:9200/?pretty"
Nosso Cluster “birijim” já no ar!

Com essa validação fizemos uma conexão sem usar senha e cantou, o resultado são as informações do cluster.

Agora vamos ativar a autenticação no Elasticsearch:

Dentro do diretório bin do fonte do Elasticsearch tem um binário chamado “elasticsearch-setup-passwords” esse é o cara que vai criar nossos usuários e senhas, primeiro vamos no arquivo de configuração do Elasticsearch (elasticsearch.yml) e vamos adicionar a linha abaixo que ativa o módulo security do X-pack:

xpack.security.enabled: true

Feito isso paramos e subimos novamente o Elasticsearch, pode variar dependendo de como você instalou. No meu caso pra startar denovo, rodo o comando abaixo:

elasticsearch-7.5.1/bin/elasticsearch -p elastic.pid

Bom com isso o módulo security foi iniciado, sendo assim vamos rodar o comando para criar os usuários e senhas.

elasticsearch-7.5.1/bin/elasticsearch-setup-passwords interactive

Esse comando vai pedir uma interação falando que vai criar os seguintes users:

  • elastic
  • apm_system
  • kibana
  • logstash_system
  • beats_system
  • remote_monitoring_user

Pressione “Y” para prosseguir e atribua a senha que achar necessária, para esse exemplo, vou colocar a senha “elastic” pra todos os usuários:

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

Nesse momento já criei todos os usuários e senhas, agora vamos testar né?

Testando a autenticação no Elasticsearch

Vamô v se funciona!

Vamos rodar o mesmo comando via CURL executado no inicio no tutorial:

curl -X GET "127.0.0.1:9200/?pretty"

E…

Toma esse 401 na cara parça!

Ele reclama que você precisa de credentials para autenticação do Elasticsearch agora, sendo assim vamos customizar o CURL colocando o user e senha no comando (não é uma boa prática mas é apenas para fins didáticos). Esse CURL pode ser feito de 2 formas:

1: Com o usuário e senha chumbado na requisição (inseguro)

curl -X GET "elastic:elastic@127.0.0.1:9200/?pretty"
Atenticou com o user e senha elastic:elastic chumbados na requisição

2: Executando o CURL com o parâmetro -u assim ele pede a senha (mas poderia colocar o -u elastic:elastic que funcionaria)

curl -u elastic -X GET "elastic:elastic@127.0.0.1:9200/?pretty"
Veja que eu colocando o -u elastic ele pede a senha na sequencia.

A vantagem da segunda opção é que ele não deixa a senha exposta.

Ativando a autenticação no Kibana

Por padrão você loga no Kibana e dá de cara com a console sem autenticação nem nada.

Tela inicial do Kibana

Agora que configuramos a autenticação no Elasticsearch o Kibana que apontava pra ele sem senha está fora, pode conferir.

Kibana fora do ar

Se você olhar nos logs do Kibana vai encontrar isso:

Erros de autenticação no Elasticsearch

Teóricamente é o mesmo erro que tomamos quando tentamos conectar via CURL sem autenticação. Para corrigir isso e fazer com que o Kibana autentique no Elasticsearch temos 2 módulos, um que considero inseguro, pois deixa o password exposto em texto e outro mais seguro pois usa um Keystore para realizar a autenticação. Vamos ao primeiro.

Autenticação pelo arquivo kibana.yml

Vamos no arquivo de configuração do Kibana (kibana.yml) e achar a entrada de conexão com o cluster Elasticsearch:

vim kibana-7.5.1-linux-x86_64/config/kibana.yml

A entrada que devemos mexer é essa:

Onde vamos configurar o login do Kibana no Elasticsearch (comentado)

Lembra que criamos um user Kibana? Então, vamos colocar ele ai descomentando os campos elasticsearch.username e elasticsearch.password. Vai ficar assim:

User e senha configurados no Kibana.yml

Agora vamos iniciar o Kibana e ver o que acontece:

kibana-7.5.1-linux-x86_64/bin/kibana

Com o Kibana no ar vamos pra tela inicial do Kibana:

Autenticação meus amigos e amigas! =)

Agora uma autenticação é mostrada na tela inicial do Kibana, não é simples?

Vou mostrar a segunda forma de como realizar a autenticação que na minha opinião é a forma mais segura usando keystores.

Autenticação do Kibana usando Keystores

Keystores são arquivos criptografados onde você pode colocar a informação que deseja sem que alguém descubra com certa facilidade, ideal para usuários e senhas, o Kibana tem um utilitário que cria esses caras chamado “kibana-keystore”. Primeiramente paramos o Kibana e voltamos o kibana.yml para o modo que estava antes:

Voltando para o modo sem autenticação. Basta comentar os 2

Agora vamos rodar os seguintes comandos, um para criação do keystore, um pro usuário e outro pra senha:

Criação do Keystore:

kibana-7.5.1-linux-x86_64/bin/kibana-keystore createCreated Kibana keystore in /home/gsw.anselmoj/kibana-7.5.1-linux-x86_64/data/kibana.keystore

Adicionar a entrada do username (coloquei kibana):

kibana-7.5.1-linux-x86_64/bin/kibana-keystore add elasticsearch.usernameEnter value for elasticsearch.username: ******

Adicionando a entrada do password (coloquei a senha elastic):

kibana-7.5.1-linux-x86_64/bin/kibana-keystore add elasticsearch.passwordEnter value for elasticsearch.password: *******

Em resumo, todo parâmetro do kibana que você queira mascarar e colocar nesse keystore é possivel fazer assim. Agora vamos iniciar o Kibana novamente:

kibana-7.5.1-linux-x86_64/bin/kibana

Feito!

Autenticando sem brechas de segurança, pelo menos de senha porque falta o TLS rs

Bom basta logar com o user Kibana e senha elastic e boa, você já está na console. Em outros posts vou mostrar como criar grupos de administração e roles de restrição de acesso e como ativar o TLS no Kibana (que é o ideal depois que tudo esteja configurado e monitoramentos já ativos).

Espero que seja útil e até o próximo.

Anselmo Borges.

--

--

Anselmo Borges
Rescue Point

Bigdata Engineer, Cloud Architect, Nerd, Alcoholic, Brazilian Jiujitsu Black belt and hide and seek World champion.