Configuração de Autenticação Kerberos para Kafka e Zookeeper

Listagem de Chaves com klist

O comando klist pode ser usado para listar as chaves presentes no arquivo keytab. Aqui está um exemplo:

[root@servidor krb5kdc]# klist -t -e -k kafka.keytab
Keytab name: FILE:kafka.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
 1   2022-01-17T14:08:11 kafka/servidor@DOMINIO.EXAMPLE (aes256-cts-hmac-sha1-96)
 1   2022-01-17T14:08:11 kafka/servidor@DOMINIO.EXAMPLE (aes128-cts-hmac-sha1-96)
 1   2022-01-17T14:08:11 kafka/servidor@DOMINIO.EXAMPLE (des3-cbc-sha1)

Este comando exibe os detalhes dos principais registrados no arquivo kafka.keytab.

Configuração do Zookeeper com SASL

Para habilitar a autenticação SASL no Zookeeper, você precisa configurar o arquivo jaas.conf. Abaixo está um exemplo modificado:

Server {
    org.apache.zookeeper.server.auth.KerberosLoginModule required
    useKeyTab=true
    keyTab="/caminho/para/zk-server.keytab"
    storeKey=true
    useTicketCache=false
    principal="zk-servidor/host.example.com";
};

No código acima, substitua os caminhos e nomes conforme necessário. Certifique-se de que o principal (principal) corresponda ao nome do host na sua infraestrutura.

Habilitando Requisição SASL no Zookeeper

Adicione ou modifique a seguinte linha no arquivo de configuração do Zookeeper:

sessionRequireClientSASLAuth=true

Essa confiugração obriga os clientes a passarem pela autenticação SASL antes de acessarem o Zookeeper.

Exemplo de Script Java para Conexão Segura

Aqui está um exemplo simplificado de como conectar-se ao Zookeeper usando SASL em Java:

import java.io.IOException;
import org.apache.zookeeper.ZooKeeper;

public class SecureZooKeeperConnection {
    public static void main(String[] args) throws IOException, InterruptedException {
        String connectString = "host.example.com:2181";
        int sessionTimeout = 3000;

        System.setProperty("java.security.auth.login.config", "/caminho/para/jaas.conf");
        System.setProperty("zookeeper.sasl.client", "true");

        ZooKeeper zk = new ZooKeeper(connectString, sessionTimeout, event -> {});
        System.out.println("Conectado ao Zookeeper!");
        Thread.sleep(10000); // Mantém a conexão ativa por 10 segundos
        zk.close();
    }
}

Este script demonstra como configurar uma conexão segura com o Zookeeper utilizando propriedades de segurança.

Configurando ACLs no Zookeeper

Você pode definir permissões específicas para nós no Zookeeper usando o comando addAcl:

addAcl /meu_no sasl:usuario/meu_host@DOMINIO.EXAMPLE:cdrwa

Isto concede privilégios completos (cdrwa) ao usuário especificado.

Tags: kafka zookeeper kerberos

Publicado em 8-26 17:12