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.
- 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
- 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.
- 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.
- 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
- 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