Introdução
Apache Kafka suporta vários protocolos de segurança e fluxos de autenticação para garantir que apenas pessoal e aplicações autorizados possam se conectar ao cluster. Na sua configuração padrão, Kafka permite o acesso de todos, mas não tem verificações de segurança habilitadas. Embora isso seja útil para exploração e desenvolvimento, as implantações de produção devem ser adequadamente seguras antes de serem expostas ao mundo exterior. Além disso, esses ambientes devem ser monitorados para garantir a operação suave e prevenir possíveis falhas.
Neste tutorial, você fortalecerá sua instalação do Kafka, configurando criptografia de tráfego TLS e autenticação SASL para fornecer um fluxo de login padrão com nome de usuário e senha. Você verá como configurar os scripts de produtor e consumidor fornecidos para se conectar a um cluster seguro. Em seguida, você aprenderá como exportar métricas do Kafka e visualizá-las no Grafana. Você também aprenderá como acessar os nós e tópicos do seu cluster através de uma interface web fácil de usar, fornecida pelo AKHQ.
Pré-requisitos
Para completar este tutorial, você precisará:
- Uma Droplet com pelo menos 4GB de RAM e 2 CPUs. No caso de um servidor Ubuntu, siga as instruções de Configuração Inicial do Servidor.
- O Apache Kafka está instalado e configurado na sua droplet. Para instruções de configuração, siga o tutorial Introdução ao Kafka. Você deve concluir apenas Passo 1 e Passo 2.
- Um entendimento de como o Java gerencia chaves e certificados. Para obter informações adicionais, acesse o tutorial Java Keytool Essentials: Working with Java Keystores.
- O Grafana instalado no seu servidor ou computador local. Por favor, visite o tutorial Como Instalar e Segurar o Grafana no Ubuntu para as instruções. Você precisa concluir apenas os primeiros quatro passos.
- Um nome de domínio totalmente registrado que está apontado para sua droplet. Este tutorial usará
your_domain
ao longo e referir-se-á ao mesmo nome de domínio que o pré-requisito do Grafana. Você pode comprar um nome de domínio em Namecheap, obter um grátis em Freenom ou usar o registrador de domínios de sua escolha.
Passo 1 – Configurando Protocolos de Segurança do Kafka
Na configuração padrão do Kafka, é permitido que qualquer pessoa se conecte a ele sem verificar a origem da solicitação. Isso significa que seu cluster está acessível a todos por padrão. Apesar de bom para testes, pois reduz a sobrecarga de manutenção em máquinas locais e instalações privadas, instalações de produção e de acesso público do Kafka devem ter funcionalidades de segurança habilitadas para evitar acesso não autorizado.
Neste passo, você configurará o broker do Kafka para usar criptografia TLS para o tráfego entre o broker e os consumidores. Você também configurará o SASL como o framework de autenticação para verificar as credenciais quando se conecta ao cluster.
Gerando Certificado TLS e Armazenamentos
Para gerar os certificados e chaves necessários para configurar o TLS, você usará o script do repositório Ferramentas de Segurança do Confluent Platform. Primeiro, clonar para o diretório pessoal executando o seguinte comando:
Navegue até ele:
O script que você usará é chamado kafka-generate-ssl-automatic.sh
, e ele requer que você forneça seu país, estado, organização e cidade como variáveis de ambiente. Esses parâmetros são usados para criar os certificados, mas o conteúdo deles não é importante. Você também precisará fornecer uma senha, que será usada para proteger a loja de chaves e confiança Java que será gerada.
Execute os seguintes comandos para configurar as variáveis de ambiente necessárias, substituindo your_tls_password
pelo valor desejado:
Observe que a PASSWORD
deve ter pelo menos seis caracteres.
Dê permissões executáveis ao script executando:
Então, execute-o para gerar os arquivos necessários:
Haverá muita saída. Quando estiver completo, liste os arquivos no diretório:
A saída deve ser semelhante a esta:
Você verá que o certificado, confiança e loja de chaves foram criados com sucesso.
Configurando Kafka para TLS e SASL
Agora que você tem os arquivos necessários para habilitar a criptografia TLS, você configurará o Kafka para usá-los e autenticará os usuários usando SASL.
Você modificará o arquivo server.properties
localizado na pasta config/kraft
no diretório de instalação. Você instalou isso na pasta kafka
no diretório de usuário principal como parte dos pré-requisitos. Use o comando abaixo para navegar até ele:
Abra o arquivo de configuração principal para edição:
nano config/kraft/server.properties
Procure as seguintes linhas:
Altere-os para parecerem com este exemplo, substituindo PLAINTEXT
por BROKER
:
Em seguida, procure a linha listener.security.protocol.map
:
Mapeie BROKER
para SASL_SSL
adicionando a definição no início do valor:
Aqui, você adicionou a definição do alias BROKER
que você usou nos listeners e mapeado para SASL_SSL
, o que significa que tanto o SSL (um nome anterior para TLS) quanto o SASL serão usados.
A seguir, navegue até o final do arquivo e adicione as seguintes linhas:
Você define primeiro as localizações e as senhas para os trust e key stores gerados. Você define o parâmetro ssl.client.auth
para required
, instruindo o Kafka a negar quaisquer conexões que não apresentem um certificado TLS válido. Em seguida, você define o mecanismo SASL para PLAIN
, o que o habilita. PLAIN
é diferente de PLAINTEXT
em que exige o uso de uma conexão encriptada, e ambos dependem de uma combinação de credenciais de nome de usuário e senha.
Finalmente, você define a classe StandardAuthorizer
como a classe autorizadora, que verifica as credenciais contra um arquivo de configuração que você criará em breve. Em seguida, você define o parâmetro allow.everyone.if.no.acl.found
para false
, restringindo o acesso para conexões com credenciais inadequadas. Você também marca o usuário admin
como superusuário, pois deve haver pelo menos um para executar tarefas administrativas no cluster.
Lembre-se de substituir your_tls_password
pela senha passada no script da seção anterior, então salve e feche o arquivo.
Depois de configurar o Kafka, você precisará criar um arquivo que define as credenciais permitidas para a conexão. O Kafka suporta o Java Authentication and Authorization Service (JAAS), uma estrutura para implementar fluxos de autenticação, e aceita definições de credenciais no formato JAAS.
Você irá armazená-los em um arquivo chamado kafka-server-jaas.conf
sob config/kraft
. Crie e abra-o para edição executando:
Adicione as seguintes linhas:
A username
e password
definem as principais credenciais que são usadas para comunicação entre brokers no cluster, quando múltiplos nós estão presentes. A linha user_admin
define um usuário cujo nome de usuário é admin
com senha admin
, que pode se conectar ao broker de fora. Salve e feche o arquivo quando terminar.
O Kafka precisa estar ciente do arquivo kafka-server-jaas.conf
pois ele complementa a configuração principal. Você precisará modificar a configuração do serviço systemd kafka
e passar uma referência para ele. Execute o seguinte comando para abrir o serviço para edição:
Passando --full
, você obtém acesso aos conteúdos completos do serviço. Encontre a linha ExecStart
:
Adicione a seguinte linha acima dela, para que fique assim:
Com isto, você define o parâmetro java.security.auth.login.config
na configuração para o caminho do arquivo de configuração JAAS, desacoplando-o da configuração principal do Kafka. Depois disso, salve e feche o arquivo. Recarregue a definição do serviço executando:
Então, reinicie o Kafka:
Você agora configurou tanto o criptografia TLS quanto a autenticação SASL para sua instalação do Kafka, e vai aprender a conectar-se a ela usando os scripts de console fornecidos.
Passo 2 – Conectando the um Cluster Seguro
Neste passo, você aprenderá a conectar-se the the um cluster do Kafka seguro usando arquivos de configuração JAAS com os scripts de console fornecidos.
Os scripts fornecidos para manipular os tópicos, produzindo e consumindo mensagens, também usam Java internamente, e portanto, aceitam uma configuração JAAS que detalha as localizações dos depósitos de confiança e chaves, bem como as credenciais SASL.
Você armazenará essa configuração em um arquivo chamado client-jaas.conf
no diretório de usuário. Crie e abra-o para edição:
Adicione as seguintes linhas:
Configura o protocolo como SASL_SSL
e fornece os caminhos e a senha para os armazéns de chaves e confiança que você criou. Em seguida, define o mecanismo SASL como PLAIN
e fornece as credenciais para o usuário admin
. Especificamente, limpa o parâmetro ssl.endpoint.identification.algorithm
para evitar problemas de conexão, pois os scripts iniciais definem o nome do host da máquina em que está sendo executado como o ponto final do certificado, o que pode não ser correto.
Substitua sua_senha_tls
pelo valor apropriado,然后 salve e feche o arquivo.
Para passar esse arquivo para os scripts, você pode usar o parâmetro --command-config
. Tente criar um novo tópico no cluster com o seguinte comando:
O comando deve ser executado com sucesso:
Para verificar se foi criado, liste todos os tópicos no cluster executando:
A saída mostrará que o new_topic
está presente:
Nesta seção, você configurou sua instalação Kafka para usar criptografia TLS para o tráfego e SASL para autenticação com combinações de nome de usuário e senha. Agora, você aprenderá como exportar várias métricas Kafka através de JMX usando Prometheus.
Passo 3 – Monitorando Métricas JMX do Kafka Usando Prometheus
Nesta seção, você vai usar o Prometheus para coletar métricas de Kafka e torná-las consultáveis no Grafana. Isso envolve configurar o exportador JMX para Kafka e conectá-lo ao Prometheus.
[Extensões de Gerenciamento Java (JMX) é um framework para aplicações Java que permite que desenvolvedores coletem métricas gerais e personalizadas sobre a operação da aplicação em tempo de execução em um formato padrão. Como o Kafka está escrito em Java, ele suporta o protocolo JMX e expõe suas métricas personalizadas através dele, como o status de tópicos e broker.
Configurando Kafka e o Prometheus
Antes de prosseguir, você precisará instalar o Prometheus. Em máquinas Ubuntu, você pode usar o apt
. Atualize seus repositórios executando:
Então, instale o Prometheus:
Para outros plataformas, siga as instruções de instalação no site oficial.
Uma vez instalado, você precisará adicionar a biblioteca do exportador JMX para Prometheus à sua instalação do Kafka. Navegue até a página de lançamentos e selecione a versão mais recente com javaagent
no nome. No momento da escrita, a versão mais recente disponível era 0.20.0
. Use o seguinte comando para baixá-lo para o diretório libs/
onde o Kafka está instalado:
A biblioteca do exportador JMX agora será carregada pelo Kafka.
Antes de ativar o exportador, você precisa definir quais métricas ele vai relatar para o Prometheus, e você armazenará essa configuração em um arquivo chamado jmx-exporter.yml
na config/
da instalação do Kafka. O projeto do exportador JMX fornece uma configuração padrão apropriada, portanto, execute o seguinte comando para armazená-lo como jmx-exporter.yml
na config/
da sua instalação do Kafka:
A seguir, para ativar o exportador, você precisará modificar o serviço de sistema do Kafka. você precisará modificar a variável de ambiente KAFKA_OPTS
para incluir o exportador, bem como sua configuração. Execute o seguinte comando para editar o serviço:
Modifique a linha Environment
para parecer assim:
Aqui, você utiliza o argumento -javaagent
para inicializar o exportador JMX com sua configuração.
Salve e feche o arquivo quando terminar, então reinicie o Kafka executando:
Após um minuto, verifique se o exportador JMX está sendo executado consultando se a porta 7075
está em uso:
Esta linha mostra que o porto 7075
está em uso por um processo Java iniciado pelo serviço Kafka, que se reflete no exportador JMX.
Agora você vai configurar o Prometheus para monitorar as métricas JMX exportadas. O arquivo de configuração principal está localizado em /etc/prometheus/prometheus.yml
, portanto, abra-o para edição:
Localize as seguintes linhas:
Abaixo das scrape_configs
, que especifica quais endpoints o Prometheus deve monitorar, adicione uma nova seção para a coleta de métricas do Kafka:
O trabalho kafka
tem um alvo, que aponta para o endpoint do exporter JMX.
Lembre-se de substituir seu_dominio
pelo seu nome de domínio,然后 salve e feche o arquivo. Em seguida, reinicie o Prometheus executando:
No seu navegador, navegue até a porta 9090
no seu domínio. Você acessará a UI do Prometheus. Sob Status, clique em Targets para listar os trabalhos:
Observe que o Prometheus aceitou o trabalho kafka
e começou a raspar suas métricas. Agora, você aprenderá como acessá-las no Grafana.
Consultar Métricas no Grafana
Como parte dos pré-requisitos, você instalou o Grafana em sua Droplet e o expôs em your_domain
. Navegue até ele no seu navegador, e em Conexões na barra lateral, clique em Adicionar Nova Conexão, depois digite Prometheus no campo de busca.
Clique em Prometheus, em seguida, clique no botão Adicionar Nova Fonte de Dados no canto superior direito. Você será solicitado a preencher o endereço de uma instância do Prometheus:
Digite http://your_domain_name:9090
, substituindo pelo seu domínio real, em seguida, scroll para baixo e clique em Salvar & testar. Você deve receber uma mensagem de sucesso:
A conexão do Prometheus foi adicionada ao Grafana. Clique em Explorar na barra lateral, e você será solicitado a selecionar um métrica. Você pode digitar kafka_
para listar todas as métricas relacionadas ao cluster, conforme mostrado:
Por exemplo, selecione a métrica kafka_log_log_size
, que mostra quão grande o log interno no disco é por partição, em seguida, clique em Executar consulta no canto superior direito. Você verá os tamanhos resultantes ao longo do tempo para cada um dos tópicos disponíveis:
Neste passo, você configurou a exportação de métricas JMX fornecidas por Kafka e configurou o Prometheus para coletá-las. Em seguida, você se conectou a ele a partir do Grafana e executou uma consulta nas métricas do Kafka. Agora, você vai aprender a gerenciar um cluster Kafka usando uma interface web.
Passo 4 – Gerenciando clusters Kafka com AKHQ
Neste passo, você vai aprender a configurar e usar AKHQ, uma aplicação web para gerenciar clusters Kafka. Ela permite que você liste e manipule tópicos, partições, grupos de consumidores e parâmetros de configuração, bem como produzir e consumir mensagens de tópicos em um único local.
Você armazenará o executável e sua configuração em um diretório chamado akhq
. Crie-o em seu diretório pessoal executando:
Abra-o:
No seu navegador, visite a página de lançamentos oficiais e copie o link para o arquivo JAR da versão mais recente. No momento da escrita, a versão mais recente era 0.24.0
. Execute o seguinte comando para baixá-lo para o seu diretório pessoal:
Agora você baixou o AKHQ e está pronto para definir sua configuração para se conectar ao seu cluster. Você armazenará isso em um arquivo chamado akhq-config.yml
. Crie e abra-o para edição executando:
Adicione as seguintes linhas:
Esta é uma configuração básica do AKHQ, especificando um cluster em localhost:9092
com os parâmetros SASL e TLS correspondentes especificados. Múltiplos clusters simultâneos também são suportados, pois você pode definir quantas conexões quiser. Isso torna o AKHQ versátil para gerenciar o Kafka. Quando terminar, salve e feche o arquivo.
Em seguida, você precisará definir um serviço systemd
para executar o AKHQ em segundo plano. Serviços systemd
podem ser iniciados, parados e reiniciados de forma consistente.
Você armazenará a configuração do serviço em um arquivo chamado code-server.service
, no diretório /lib/systemd/system
, onde o systemd armazena seus serviços. Crie usando seu editor de texto:
Adicione as seguintes linhas:
Primeiro, especifique a descrição do serviço. Em seguida, na seção [Service]
, defina o tipo do serviço (simple
significa que o comando deve simplesmente ser executado) e forneça o comando que será executado. Você também especifica que o usuário sob o qual ele é executado é kafka
e que o serviço deve ser reiniciado automaticamente se ele for encerrado.
A seção [Install]
ordena ao systemd para iniciar este serviço quando você se conectar ao seu servidor. Salve e feche o arquivo quando terminar.
Carregue a configuração do serviço executando:
Inicie o serviço AKHQ executando o seguinte comando:
Em seguida, verifique se foi iniciado corretamente observando seu status:
A saída deve ser assim:
AKHQ está agora em execução em segundo plano. Por padrão, ele está exposto na porta 8080
. No seu navegador, navegue até o seu domínio com essa porta para acessá-lo. Você verá a visualização padrão, mostrando a lista de tópicos:
Você pode clicar duas vezes na linha correspondente do tópico na tabela para acessá-lo e obter uma visualização detalhada:
AKHQ permite que você veja as mensagens no tópico, bem como partições, grupos de consumidores e suas configurações. Você também pode esvaziar ou copiar o tópico usando os botões no canto inferior direito.
Como o tópico new_topic
está vazio, pressione o botão Produzir para o tópico, que abrirá a interface para selecionar os parâmetros da nova mensagem:
AKHQ preencherá automaticamente o nome do tópico para você. No campo Valor, digite Olá Mundo!
,然后 pressione Produzir. A mensagem será enviada para Kafka, e você a verá na aba Dados:
Como o conteúdo de uma mensagem pode ser muito grande, AKHQ mostra apenas a primeira linha. Para ver a mensagem completa, pressione na área escura após a linha para revelá-la.
Na barra lateral esquerda, você também pode listar os brokers no cluster pressionando em Nós. Atualmente, o cluster consiste em apenas um nó:
Clicando duas vezes em um nó abrirá sua configuração, permitindo que você altere qualquer uma das configurações de forma remota:
Após fazer as mudanças, você pode aplicá-las clicando no botão Atualizar configs no canto inferior direito. Similarmente, você pode visualizar e modificar a configuração de qualquer dos tópicos acessando-os e mudando para a aba Configs.
Nesta seção, você configurou o AKHQ, uma aplicação web que fornece uma interface de usuário fácil de usar para gerenciar e observar remotamente os nós e tópicos do Kafka. Ele permite que você produza e consome mensagens em tópicos e atualize os parâmetros de configuração dos tópicos e nós em tempo real.
Conclusão
Neste tutorial, você garantiu sua instalação do Kafka configurando o TLS para criptografia e o SASL para autenticação de usuário. Você também configurou o exporte de métricas usando o Prometheus e visualizou-as no Grafana. Em seguida, você aprendeu a usar o AKHQ, uma aplicação web para gerenciar clusters do Kafka.
O autor selecionou Apache Software Foundation para receber uma doação como parte do programa Write for DOnations..
Source:
https://www.digitalocean.com/community/developer-center/how-to-secure-and-monitor-kafka