Configuração e Implementação do Apache Kafka com Autenticação SASL_PLAINTEXT

Preparação e Instalação do Apache Kafka

Este guia detalha o processo de configuração e implantação de um cluster Apache Kafka com autenticação SASL_PLAINTEXT, garantindo a segurança das comunicações entre o broker e os clientes, bem como com o ZooKeeper.

  1. Obtenção e Descompactação do Kafka

Para iniciar, faça o download da versão desejada do Apache Kafka e extraia os arquivos para um diretório de sua escolha.

# Baixar o arquivo tarball do Kafka
wget https://downloads.apache.org/kafka/3.5.1/kafka_2.12-3.5.1.tgz

# Descompactar o arquivo
tar -zxvf kafka_2.12-3.5.1.tgz

# Renomear o diretório para facilitar o acesso
mv kafka_2.12-3.5.1 kafka-broker

# Entrar no diretório recém-criado
cd kafka-broker

  1. Configuração do Apache ZooKeeper

O Kafka depende do ZooKeeper para gerenciar metadados de cluster. Assegurar a segurança do ZooKeeper é crucial para a integridade do cluster Kafka.

2.1. Modificação do Arquivo de Propriedades do ZooKeeper

Edite o arquivo de configuração principal do ZooKeeper para habilitar o suporte a autenticação SASL.

# Abrir o arquivo de configuração do ZooKeeper
vim config/zookeeper.properties

2.2. Ajustes nas Configurações do ZooKeeper

Adicione ou modifique as seguintes propriedades em config/zookeeper.properties para ativar a autenticação SASL_PLAINTEXT:

# Diretório para armazenamento de dados do ZooKeeper
dataDir=/tmp/zookeeper_data
# Porta onde os clientes se conectarão ao ZooKeeper
clientPort=2181
# Desabilita o limite de conexões por IP para configurações não-produtivas
maxClientCnxns=0
# Desabilita o admin server por padrão para evitar conflitos de porta
admin.enableServer=false
# Define o provedor de autenticação SASL
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
# Exige que os clientes utilizem o esquema de autenticação SASL
requireClientAuthScheme=sasl
# Tempo de renovação do login JAAS em milissegundos
jaasLoginRenew=3600000

2.3. Criação do Arquivo JAAS para ZooKeeper

Crie um arquivo JAAS (Java Authentication and Authorization Service) para definir as credenciais de usuários permitidos no ZooKeeper.

cat > config/zookeeper_jaas_config.conf << EOF
Server {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="zk_admin"
    password="zk_admin_secret_pass"
    user_kafka_broker="kafka_broker_pass_123";
};
EOF

2.4. Atualização do Script de Inicialização do ZooKeeper

Para que o ZooKeeper utilize o arquivo JAAS recém-criado, é necessário adicioná-lo às opções da JVM no script de inicialização.

# Abrir o script de inicialização do ZooKeeper
vim bin/zookeeper-server-start.sh

Insira a seguinte linha antes da execução da JVM, preferencialmente no início do script onde outras variáveis de ambiente são definidas:

# Configura o arquivo JAAS para a autenticação do ZooKeeper
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka-broker/config/zookeeper_jaas_config.conf"

Nota: Certifique-se de que o caminho /opt/kafka-broker/config/zookeeper_jaas_config.conf corresponde ao local real do seu arquivo e à raiz da sua instalação Kafka.

  1. Configuração do Apache Kafka

Agora, configure o broker Kafka para se comunicar com o ZooKeeper usando SASL e para aceitar conexões de clientes também com SASL_PLAINTEXT.

3.1. Modificação do Arquivo de Propriedades do Kafka

Edite o arquivo de propriedades do servidor Kafka.

# Abrir o arquivo de configuração do Kafka Broker
vim config/server.properties

3.2. Ajustes nas Propriedades do Kafka

Altere ou adicione as seguintes configurações em config/server.properties para ativar a segurança SASL_PLAINTEXT e a autorização ACL:

# Define os listeners para o broker Kafka, habilitando SASL_PLAINTEXT
listeners=SASL_PLAINTEXT://0.0.0.0:9092
# Endereço que os clientes usarão para se conectar ao broker
advertised.listeners=SASL_PLAINTEXT://192.168.1.100:9092
# Protocolo de segurança usado para comunicação inter-brokers
security.inter.broker.protocol=SASL_PLAINTEXT
# Mecanismos SASL permitidos (PLAIN é para SASL_PLAINTEXT)
sasl.enabled.mechanisms=PLAIN
# Mecanismo SASL usado para comunicação inter-brokers
sasl.mechanism.inter.broker.protocol=PLAIN

# Habilita a classe de autorização ACL do Kafka
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
# Se não houver ACLs definidas, não permite nenhuma operação (mais seguro)
allow.everyone.if.no.acl.found=false
# Define usuários super-administradores que podem realizar qualquer operação
super.users=User:super_admin

Nota: Substitua 192.168.1.100 pelo endereço IP real do seu servidor Kafka.

3.3. Criação do Arquivo JAAS para Kafka

Crie um arquivo JAAS separado para o servidor Kafka, que definirá as credenciais para o broker (para comunicação interna e com ZooKeeper) e para clientes que tentarão se conectar.

cat > config/kafka_server_jaas_config.conf << EOF
KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="broker_internal"
    password="broker_internal_secure_pass"
    user_super_admin="super_admin_secure_pass"
    user_consumer="consumer_secure_pass";
};
KafkaClient {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="broker_client"
    password="broker_client_secret_pass";
};
EOF

3.4. Atualização do Script de Inicialização do Kafka

Adicione o caminho para o arquivo JAAS do Kafka às opções da JVM no script de inicialização do broker.

# Abrir o script de inicialização do Kafka
vim bin/kafka-server-start.sh

Adicione a seguinte configuração antes da execução da JVM:

# Se KAFKA_OPTS não estiver definido, atribui o arquivo JAAS do Kafka
if [ -z "$KAFKA_OPTS" ]; then
    export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka-broker/config/kafka_server_jaas_config.conf"
fi

Nota: Verifique e ajuste o caminho /opt/kafka-broker/config/kafka_server_jaas_config.conf conforme necessário.

  1. Inicialização do ZooKeeper

Após todas as configurações, inicie o serviço ZooKeeper em modo daemon.

# Iniciar o ZooKeeper em segundo plano
./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties

  1. Inicialização do Kafka

Com o ZooKeeper em execução, inicie o broker Kafka, que agora usará as configurações de segurança SASL_PLAINTEXT.

# Iniciar o Kafka Broker em segundo plano
./bin/kafka-server-start.sh -daemon config/server.properties

Tags: kafka zookeeper SASL_PLAINTEXT autenticacao SegurançaKafka

Publicado em 7-20 02:56