ProHoster > Blog > administração > Elastic sob bloqueio e chave: habilitando opções de segurança de cluster do Elasticsearch para acesso interno e externo
Elastic sob bloqueio e chave: habilitando opções de segurança de cluster do Elasticsearch para acesso interno e externo
Elastic Stack é uma ferramenta bastante conhecida no mercado de sistemas SIEM (na verdade, não só eles). Ele pode coletar muitos dados de tamanhos diferentes, tanto sensíveis quanto não muito sensíveis. Não é totalmente correto se o acesso aos próprios elementos do Elastic Stack não estiver protegido. Por padrão, todos os elementos prontos para uso do Elastic (coletores Elasticsearch, Logstash, Kibana e Beats) são executados em protocolos abertos. E no próprio Kibana a autenticação está desabilitada. Todas essas interações podem ser protegidas e neste artigo explicaremos como fazer isso. Por conveniência, dividimos a narrativa em 3 blocos semânticos:
Modelo de acesso a dados baseado em funções
Segurança de dados em um cluster Elasticsearch
Protegendo dados fora de um cluster Elasticsearch
Detalhes sob o corte.
Modelo de acesso a dados baseado em funções
Se você instalar o Elasticsearch e não ajustá-lo de forma alguma, o acesso a todos os índices estará aberto a todos. Bem, ou aqueles que podem usar curl. Para evitar isso, o Elasticsearch possui um modelo que está disponível a partir de uma assinatura Básica (que é gratuita). Esquematicamente é algo assim:
O que está na foto
Usuários são todos que podem fazer login usando suas credenciais.
Os recursos são índices, documentos, campos, usuários e outras entidades de armazenamento (o modelo de função para alguns recursos só está disponível com assinaturas pagas).
Por padrão, o Elasticsearch tem usuários de caixa, ao qual estão anexados papéis de caixa. Depois de ativar as configurações de segurança, você poderá começar a usá-las imediatamente.
Para ativar a segurança nas configurações do Elasticsearch, você precisa adicioná-lo ao arquivo de configuração (por padrão, é elasticsearch/config/elasticsearch.yml) nova linha:
xpack.security.enabled: true
Após alterar o arquivo de configuração, inicie ou reinicie o Elasticsearch para que as alterações tenham efeito. A próxima etapa é atribuir senhas aos usuários do box. Vamos fazer isso de forma interativa usando o comando abaixo:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
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]
Verificamos:
[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Enter host password for user 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1
Você pode dar um tapinha nas costas - as configurações do lado do Elasticsearch estão concluídas. Agora é hora de configurar o Kibana. Se você executá-lo agora, erros aparecerão, por isso é importante criar um armazenamento de chaves. Isso é feito em dois comandos (user quibana e a senha inserida na etapa de criação de senha no Elasticsearch):
Se tudo estiver correto, o Kibana começará a pedir login e senha. A assinatura Básica inclui um modelo baseado em usuários internos. Começando com Gold, você pode conectar sistemas de autenticação externa - LDAP, PKI, Active Directory e sistemas de logon único.
Os direitos de acesso a objetos dentro do Elasticsearch também podem ser limitados. Porém, para fazer o mesmo com documentos ou campos, você precisará de uma assinatura paga (esse luxo começa com o nível Platinum). Essas configurações estão disponíveis na interface do Kibana ou via API de segurança. Você pode verificar através do já familiar menu Dev Tools:
Quando o Elasticsearch é executado em um cluster (o que é comum), as configurações de segurança dentro do cluster tornam-se importantes. Para comunicação segura entre nós, o Elasticsearch usa o protocolo TLS. Para configurar uma interação segura entre eles, você precisa de um certificado. Geramos um certificado e uma chave privada no formato PEM:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem
Após executar o comando acima, no diretório /../elasticsearch arquivo aparecerá pilha elástica-ca.zip. Dentro dele você encontrará um certificado e uma chave privada com extensões crt и chave respectivamente. É aconselhável colocá-los em um recurso compartilhado, que deve ser acessível a partir de todos os nós do cluster.
Cada nó agora precisa de seus próprios certificados e chaves privadas com base naqueles do diretório compartilhado. Ao executar o comando, você será solicitado a definir uma senha. Você pode adicionar opções adicionais -ip e -dns para verificação completa de nós em interação.
Como resultado da execução do comando, receberemos um certificado e uma chave privada no formato PKCS#12, protegidos por senha. Só falta mover o arquivo gerado p12 para o diretório de configuração:
Existe outra opção de segurança - filtragem de endereço IP (disponível em assinaturas do nível Gold). Permite criar listas brancas de endereços IP a partir dos quais você tem permissão para acessar nós.
Protegendo dados fora de um cluster Elasticsearch
Fora do cluster significa conectar ferramentas externas: Kibana, Logstash, Beats ou outros clientes externos.
Para configurar o suporte para https (em vez de http), adicione novas linhas ao elasticsearch.yml:
Depois de adicionar as chaves, os nós do Elasticsearch estão prontos para se conectar via https. Agora eles podem ser lançados.
A próxima etapa é criar uma chave para conectar o Kibana e adicioná-la à configuração. Com base no certificado que já está localizado no diretório compartilhado, geraremos um certificado no formato PEM (PKCS#12 Kibana, Logstash e Beats ainda não suportam):
As chaves estão aí, então só falta alterar a configuração do Kibana para que ele comece a utilizá-las. No arquivo de configuração kibana.yml, altere http para https e adicione linhas com configurações de conexão SSL. As últimas três linhas configuram a comunicação segura entre o navegador do usuário e o Kibana.
Assim, as configurações são concluídas e o acesso aos dados do cluster Elasticsearch é criptografado.
Se você tiver dúvidas sobre os recursos do Elastic Stack em assinaturas gratuitas ou pagas, monitoramento de tarefas ou criação de um sistema SIEM, deixe uma solicitação para formulário de feedback no nosso site.
Mais de nossos artigos sobre Elastic Stack em Habré: