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 há verificações de segurança habilitadas. Embora isso seja útil para exploração e desenvolvimento, as implantações de produção devem seradevidamente protegidas 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 a criptografia de tráfego TLS e autenticação SASL para fornecer um fluxo de login padrão de 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 por meio de uma interface baseada na web, fácil de usar, fornecida pelo AKHQ.
Pré-requisitos
Para completar este tutorial, você precisará de:
- Uma Droplet com pelo menos 4GB de RAM e 2 CPUs. No caso de um servidor Ubuntu, siga a Configuração Inicial do Servidor para obter instruções de configuração.
- O Apache Kafka está instalado e configurado em sua droplet. Para obter instruções de configuração, siga o tutorial Introdução ao Kafka. Você deve completar apenas o Passo 1 e o Passo 2.
- Uma compreensão de como o Java lida com chaves e certificados. Para mais informações, visite o tutorial Java Keytool Essentials: Trabalhando com Java Keystores.
- O Grafana instalado no seu servidor ou máquina local. Por favor, visite o tutorial Como Instalar e Proteger o Grafana no Ubuntu para obter instruções. Você precisa completar apenas os primeiros quatro passos.
- Um nome de domínio registrado em pleno está apontado para sua droplet. Este tutorial usará
seu_dominio
ao longo e se referirá ao mesmo nome de domínio como pré-requisito do Grafana. Você pode comprar um nome de domínio no Namecheap, obter um de graça no Freenom ou usar o registrador de domínio de sua escolha.
Passo 1 – Configurando os Protocolos de Segurança do Kafka
Na sua configuração padrão, Kafka permite que qualquer pessoa se conecte a ele sem verificar a origem da solicitação. Isso significa que seu cluster é acessível a todos por padrão. Embora isso seja adequado para testes, pois reduz a carga de manutenção em máquinas locais e instalações privadas, instalações de Kafka em produção e voltadas para o público devem ter recursos de segurança habilitados para prevenir acessos não autorizados.
Neste passo, você configurará seu broker Kafka para usar criptografia TLS para o tráfego entre o broker e os consumidores. Você também configurará SASL como o framework de autenticação para verificar credenciais ao se conectar ao cluster.
Gerando Certificados TLS e Stores
Para gerar os certificados e chaves necessários para configurar TLS, você usará o script do repositório Confluent Platform Security Tools. Primeiro, clone-o para o seu diretório home executando o seguinte comando:
Navegue até ele:
Você vai usar o script chamado kafka-generate-ssl-automatic.sh
, e ele exige que você forneça seus país, estado, organização e cidade como variáveis de ambiente. esses parâmetros são usados para criar os certificados, mas seu conteúdo é não importante. Você também precisará fornecer uma senha, que é usada para segurar o Java trust e key store que serão gerados.
Execute os seguintes comandos para configurar as variáveis de ambiente necessárias, substituindo your_tls_password
com seu valor de preferência:
Note que a PASSWORD
deve ter pelo menos seis caracteres de comprimento.
Dê permissões executáveis ao script executando:
Em seguida, execute-o para gerar os arquivos necessários:
Haverá muita saída. Quando estiver pronto, liste os arquivos no diretório:
A saída deve se parecer com isto:
Você verá que o certificado, de confiança e key store 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á Kafka para usá-los e autenticar usuários usando SASL.
Você modificará o arquivo server.properties
localizado na pasta config/kraft
no diretório de instalação. Você instalou ele na pasta kafka
do diretório pessoal como parte dos pré-requisitos. Navigue até ele executando:
Abra o arquivo de configuração principal para edição:
nano config/kraft/server.properties
Localize as seguintes linhas:
Altere-os para parecerem com isto, substituindo PLAINTEXT
por BROKER
:
Então, localize a linha listener.security.protocol.map
:
Mapeie BROKER
para SASL_SSL
adicionando a definição no início do valor:
Aqui, você definiu o alias BROKER
que usou nos ouvintes e o mapeou para SASL_SSL
, o que significa que tanto SSL (um nome antigo para TLS) quanto SASL devem ser usados.
A seguir, navegue até o final do arquivo e adicione as seguintes linhas:
Primeiro, você define os locais e senhas para os armazéns de chaves e confiança gerados. Você define o parâmetro ssl.client.auth
como required
, instruindo o Kafka a não permitir conexões que não apresentem um certificado TLS válido. Em seguida, você define o mecanismo SASL como PLAIN
, habilitando-o. PLAIN
é diferente de PLAINTEXT
pois requer o uso de uma conexão criptografada, e ambos dependem de uma combinação de credenciais de nome de usuário e senha.
Finalmente, você define StandardAuthorizer
como a classe de autorização, que verifica as credenciais contra um arquivo de configuração que você criará em breve. Então, você define o parâmetro allow.everyone.if.no.acl.found
como false
, restringindo o acesso para conexões com credenciais inadequadas. Você também denota o usuário admin
como superusuário, pois deve haver pelo menos um para realizar tarefas administrativas no cluster.
Lembre-se de substituir your_tls_password
pela senha que você passou para o script na seção anterior,然后 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 framework para implementar fluxos de autenticação, e aceita definições de credenciais no formato JAAS.
Você as armazenará 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 credenciais principais 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 a 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 ela fique assim:
Com isso, 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. Quando terminar, salve e feche o arquivo. Recarregue a definição do serviço executando:
Em seguida, reinicie o Kafka:
Agora, você configurou tanto a criptografia TLS quanto a autenticação SASL para sua instalação do Kafka, e agora aprenderá como se conectar a ele com os scripts de console fornecidos.
Passo 2 – Conectando a um Cluster Seguro
Neste passo, você aprenderá como se conectar a um cluster Kafka seguro usando arquivos de configuração JAAS com os scripts de console fornecidos.
Os scripts fornecidos para manipulação de tópicos, produção e consumo de mensagens também usam Java internamente, e portanto aceitam uma configuração JAAS detalhando as localizações da loja de chaves e de confiança, bem como as credenciais SASL.
Você armazenará essa configuração em um arquivo chamado client-jaas.conf
no seu diretório home. Crie e abra-o para edição:
Adicione as seguintes linhas:
Assim como antes, você define o protocolo como SASL_SSL
e fornece os caminhos e senhas para as lojas de chaves e de confiança que você criou. Em seguida, você define o mecanismo SASL como PLAIN
e fornece as credenciais do usuário admin
. Você explicitamente limpa o parâmetro ssl.endpoint.identification.algorithm
para evitar problemas de conexão, já que os scripts iniciais definem o nome de host da máquina em que eles são executados como o ponto final do certificado, o que pode não ser correto.
Substitua your_tls_password
pelo valor correto, depois salve e feche o arquivo.
Para passar este arquivo para os scripts, você pode usar o parâmetro --command-config
. Tente criar um novo tópico no cluster com o comando a seguir:
O comando deve executar com sucesso:
Para verificar se foi criado, liste todos os tópicos no cluster executando:
A saída mostrará que new_topic
está presente:
Nesta seção, você configurou sua instalação do Kafka para usar criptografia TLS para 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 do Kafka através do JMX usando o Prometheus.
Passo 3 – Monitoramento de Métricas JMX do Kafka Usando o 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 de 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 é 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 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.
Após a instalação, você precisará adicionar a biblioteca do exportador JMX para o Prometheus à sua instalação do Kafka. Navegue até a página de releases e selecione o último lançamento 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á detectada pelo Kafka.
Antes de ativar o exportador, você precisa definir quais métricas ele relatará ao Prometheus, e você armazenará essa configuração em um arquivo chamado jmx-exporter.yml
sob config/
da instalação do Kafka. O projeto do exportador JMX fornece uma configuração padrão adequada, então execute o seguinte comando para armazená-lo como jmx-exporter.yml
sob config/
da sua instalação do Kafka:
Em seguida, para ativar o exportador, você precisará modificar o serviço systemd do Kafka. Você precisará modificar a variável de ambiente KAFKA_OPTS
para incluir o exportador, além de sua configuração. Execute o seguinte comando para editar o serviço:
Modifique a linha Environment
para que ela fique assim:
Aqui, você utiliza o argumento -javaagent
para inicializar o exportador JMX com sua configuração.
Salve e feche o arquivo quando terminar,然后 reinicie o Kafka executando:
Após um minuto, verifique se o exportador JMX está em execução consultando se a porta 7075
está sendo usada:
Esta linha mostra que o porto 7075
está em uso por um processo Java iniciado pelo serviço Kafka, o que se refere ao exportador JMX.
Agora você configurará o Prometheus para supervisionar 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 ponto final do exporter JMX.
Lembre-se de substituir your_domain
pelo seu nome de domínio, então salve e feche o arquivo. Em seguida, reinicie o Prometheus executando:
No seu navegador, navegue até a porta 9090
em seu domínio. Você terá acesso à interface do usuário do Prometheus. Na Status, clique em Alvos para listar os trabalhos:
Note que o Prometheus aceitou o trabalho kafka
e começou a raspagem de suas métricas. Agora você vai aprender a 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, na área de Conexões da 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 Novo provedor de Dados no canto superior direito. Você será solicitado a preencher o endereço de uma instância do Prometheus:
Insira http://your_domain_name:9090
, substituindo por seu domínio real, depois role para baixo e clique em Salvar & testar. Você deveria 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, como mostrado:
Por exemplo, selecione a métrica kafka_log_log_size
, que mostra a quantidade de espaço ocupado pelo 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 tópico disponível:
Neste passo, você configurou a exportação de métricas JMX fornecidas pelo 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ê aprenderá a gerenciar um cluster Kafka usando uma interface web.
Passo 4 – Gerenciando Clusters Kafka Com AKHQ
Neste passo, você aprenderá como configurar e usar o AKHQ, uma aplicação web para gerenciar clusters Kafka. Ele permite listar e manipular tópicos, partições, grupos de consumidores e parâmetros de configuração, além de produzir e consumir mensagens de tópicos de um único local.
Você armazenará o executável e sua configuração em um diretório chamado akhq
. Crie-o no seu diretório home executando:
Navegue até ele:
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 home:
Agora você baixou o AKHQ e está pronto para definir sua configuração para 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:
should be translated to:
Esta é uma configuração básica do AKHQ, especificando um cluster em localhost:9092
com os parâmetros de SASL e TLS correspondentes especificados. Multiplos 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 maneira 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 automaticamente reiniciado se sair.
A seção [Install]
ordena ao systemd para iniciar este serviço quando você se conecta 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 sendo executado 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:
O 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:
O AKHQ preencherá automaticamente o nome do tópico para você. No campo Valor, digite Hello World!
,然后 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, o 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. No momento, o cluster consiste em apenas um nó:
Clicar 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 alterações, você pode aplicá-las pressionando o botão Atualizar configurações no canto inferior direito. Similarmente, você pode visualizar e modificar as configurações de qualquer tópico acessando-o e mudando para a aba Configurações.
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 nós e tópicos de Kafka remotamente. Ele permite que você produza e consome mensagens em tópicos e atualize os parâmetros de configuração de tópicos e nós em tempo real.
Conclusão
Neste tutorial, você aplicou segurança em sua instalação de Kafka configurando TLS para criptografia e SASL para autenticação de usuário. Você também configurou o exporte de métricas usando Prometheus e as visualizou em Grafana. Em seguida, você aprendera a usar o AKHQ, uma aplicação web para gerenciar clusters de 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