Ativando a autenticação do Elasticsearch e 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"
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]yEnter 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
Vamos rodar o mesmo comando via CURL executado no inicio no tutorial:
curl -X GET "127.0.0.1:9200/?pretty"
E…
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"
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"
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.
Agora que configuramos a autenticação no Elasticsearch o Kibana que apontava pra ele sem senha está fora, pode conferir.
Se você olhar nos logs do Kibana vai encontrar isso:
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:
Lembra que criamos um user Kibana? Então, vamos colocar ele ai descomentando os campos elasticsearch.username e elasticsearch.password. Vai ficar assim:
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:
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:
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!
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.