Engenharia

Uma introdução à segurança no Elasticsearch

A partir do Elastic Stack 6.8 e 7.1, recursos de segurança, como comunicação criptografada por TLS, controle de acesso por função (RBAC) e muitos outros passaram a estar disponíveis de forma gratuita dentro da distribuição padrão. Neste post, vamos falar de como começar a usar esses recursos para manter seus clusters seguros.

Para termos um exemplo prático de segurança em uma implantação do Elastic Stack, vamos criar e proteger um cluster Elasticsearch de 2 nós em uma máquina local. Para fazer isso, primeiro vamos configurar uma comunicação em TLS entre os dois nós. Depois, vamos habilitar a segurança para a instância do Kibana que está sendo usada para analisar e visualizar os dados no cluster. Depois disso, vamos configurar o controle de acesso por função dentro do Kibana para que os usuários só possam ver dados que estejam autorizados a ver.

Embora muito mais possa ser dito sobre a segurança, neste momento vamos contemplar o que você precisa saber para começar. Depois deste post, recomendamos a nossa documentação sobre segurança do Elastic Stack, que inclui exemplos práticos muito úteis. Um detalhe importante é que faremos todo o processo em um cluster local porque, embora esses recursos tenham se tornado disponíveis por padrão nas versões 6.8 e no 7.1, eles sempre fizeram parte do Elasticsearch Service.

Instale o Elasticsearch e o Kibana

Para este exemplo, vou instalar os dois em um laptop com Linux. Ajuste as etapas abaixo para o seu ambiente.

Etapa 1: baixe o Elasticsearch e o Kibana

A primeira coisa que você precisa fazer é baixar a distribuição padrão do Elasticsearch e do Kibana, versão 6.8+ ou 7.1+. A segurança passou a estar na distribuição padrão nas versões 7.1 e 6.8, por isso você precisará fazer o upgrade se estiver usando uma versão mais antiga.

Etapa 2: extraia o Elasticsearch e o Kibana

Para este exemplo, baixei o elasticsearch-7.1.0-linux-x86_64.tar.gz e o kibana-7.1.0-linux-x86_64.tar.gz. Uma vez baixados, seus conteúdos precisam ser extraídos.

Etapa 3: crie dois nós Elasticsearch

Para criar um cluster de dois nós, faça duas cópias do diretório Elasticsearch, uma chamada master e outra chamada . Depois, você terá os seguintes arquivos e pastas:

elasticsearch-7.1.0                      elasticsearch-7.1.0-node
elasticsearch-7.1.0-linux-x86_64.tar.gz kibana-7.1.0-linux-x86_64
elasticsearch-7.1.0-master kibana-7.1.0-linux-x86_64.tar.gz

Configure o TLS e a autenticação

A primeira coisa que temos que fazer é gerar alguns certificados que permitam que os nós se comuniquem de forma segura. Você pode fazer isso com uma autoridade certificadora empresarial, mas, para esta demonstração, vamos usar um comando chamado elasticsearch-certutil que vai facilitar o processo.

Etapa 1: TLS no Elasticsearch master

Você pode fazer cd no diretório master e depois executar este comando:

bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""

Depois, abra o arquivo config/elasticsearch.yaml no editor de texto que desejar. Cole as linhas abaixo no final do arquivo.

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

Salve o arquivo e estaremos prontos para começar o nó master. Execute o comando bin/elasticsearch. Este executável precisa continuar sendo executado, por isso deixe esse terminal de lado por enquanto.

Etapa 2: senhas do cluster Elasticsearch

Depois que o nó master estiver sendo executado, é hora de definir as senhas para o cluster. Em um novo terminal, temos que fazer o cd em nosso diretório de nós master. Depois, executamos o comando bin/elasticsearch-setup-passwords auto. Isso gerará senhas aleatórias para os diversos usuários internos do stack. Você também pode pular o parâmetro auto para definir de forma manual suas senhas com o parâmetro interativo. Guarde essas senhas. Vamos precisar delas em breve.

Etapa 3: TLS no nó Elasticsearch

Agora, vamos abrir outro terminal novo e fazer cd no nosso diretório do nó. No meu caso, ele se chamava elasticsearch-7.1.0-node.

O mais fácil é copiar tudo do diretório config do master para o diretório config do nó.

cp ../elasticsearch-7.1.0-master/config/* config/

Você também precisa adicionar a opção de configuração node.master: false ao arquivo config/elasticsearch.yml. Não vou entrar em detalhes aqui, mas você encontra mais informações na documentação de clusters. Em vez de só copiar os arquivos config integralmente, você pode copiar somente os arquivos de certificado e depois configurar as chaves do xpack.security.* do mesmo jeito que no nó master.

Depois, iniciamos o nó executando bin/elasticsearch. Ele, então, se unirá ao cluster. E, se olharmos a janela do terminal do nó master, poderemos ver uma mensagem de que um nó se uniu ao cluster. Agora, temos um cluster de dois nós.

Etapa 4: segurança no Kibana

A última coisa que faremos é configurar o Kibana. Abra novamente outra janela do terminal (é a última, prometo). Vamos precisar adicionar a senha para o usuário do Kibana. Podemos pegar a mesma que geramos no comando de geração de senhas.

Vamos fazer cd no diretório do Kibana e abrir o arquivo config/kibana.yml no editor de texto. Procure as linhas como estas:

#elasticsearch.username: "user"
#elasticsearch.password: "pass"

Remova o caractere # no começo das linhas para “descomentar” os campos username e password. Mude "user" para "kibana" e "pass" para a senha que o comando setup-passwords definir como senha do Kibana. Salve o arquivo e poderemos iniciar o Kibana executando o código bin/kibana.

Configure o controle de acesso por função (RBAC) com o Kibana

Depois que o Kibana estiver sendo executado, podemos abrir o http://localhost:5601 no navegador. Ele vai pedir um login e vamos usar o superuser elastic com as senhas do setup-passwords.

Faça login no Kibana

O Kibana perguntará se queremos carregar amostras de dados no caso de uma nova instalação como esta.

Carregar amostra de dados no Kibana

Vamos carregar a amostra de dados de voo e web para este exemplo. Depois, clique no ícone de engrenagem de configuração.

Entre no gerenciamento dentro do Kibana

Agora, vamos criar nossas funções. Encontre e clique na opção roles.

Funções dentro do Kibana

Clique em Create role.

Criar uma nova função

Vamos chamar a primeira função de read_logs.

Crie a função read_logs

Desça até o campo dos privilégios do índice e selecione o índice do registro. Dê a ele o privilégio de read.

Configuração dos privilégios da função

Esta seção a respeito dos espaços vai ser interessante depois que você tiver a segurança funcionando, mas vamos pular esta parte por agora. Para saber mais sobre os espaços, que são ótimos para organizar e proteger os dados dentro do Kibana, leia a nossa documentação do Kibana Spaces ou este post introdutório do Kibana Spaces.

Agora, vamos criar outra função chamada read_flight.

Criar função read_flight

E vamos dar o privilégio de read ao índice de voo.

Configure a função

Agora, vamos criar dois usuários e atribuir a eles essas funções. Selecione o link Users à esquerda e clique no botão Create new user.

Criar um novo usuário

Vamos chamá-lo de flight_user e definir a senha. Não precisamos definir o nome completo e o endereço de e-mail. Precisamos atribuir a nossa função read_flight e a função kibana_user já que esse usuário vai visualizar dados no Kibana.

Crie o usuário flight

Clique em criar e vamos fazer tudo de novo para o log_user. Desta vez, vamos adicionar as funções read_logs e kibana_user.

Criar o usuário do registro

Está tudo pronto com os dois novos usuários. Agora, podemos fazer log out como o usuário elastic.

Fazer logout como elastic

Depois podemos fazer login comolog_user. Se conseguirmos clicar no ícone dashboards, veremos dois painéis, um para flights e outro para logs.

Veja seus painéis

No painel Logs, você verá os dados de registro de demonstração. Se voltarmos para tentar ver o painel de voos, veremos o painel, mas sem dados. É aqui que você pode usar o Kibana Spaces para fins de segurança e permitir somente que certos usuários vejam determinados painéis.

Agora, podemos sair como log_user e entrar novamente como flight_user.

Se abrirmos o painel de registros, não veremos nenhum dado. Vemos até uma mensagem de erro porque o Kibana não pode acessar o índice de registros.

Dados restritos pelo RBAC

Agora, quando vemos o painel de voos, conseguimos ver que temos acesso aos dados.

Acesso aos dados fornecido pelo RBAC

Parabéns! Agora temos um cluster de dois nós configurado e dois usuários com acesso restrito aos dados do índice.

Resumo

A segurança no Elastic Stack é muito versátil. Existe muito mais do que falamos aqui neste post. Nosso objetivo hoje foi ajudar você a começar. No futuro, teremos muito conteúdo sobre todos os recursos de segurança e como usá-los. Enquanto isso, temos mais documentação e posts sobre como funciona a segurança no Elastic Stack e o que mais você pode conquistar com nossos recursos.

Você também pode pedir ajuda em nosso fórum público.

Boa pesquisa!