web-dev-qa-db-fra.com

Kafka Authentification zookeeper SASL

Je fais face à l'erreur suivante lors de l'activation de SASL sur Zookeeper et l'authentification du courtier.

[2017-04-18 15:54:10,476] DEBUG Size of client SASL token: 0 
(org.Apache.zookeeper.server.ZooKeeperServer)
[2017-04-18 15:54:10,476] ERROR cnxn.saslServer is null: cnxn object did not initialize its saslServer properly. (org.Apache.zookeeper.server.    ZooKeeperServer)
[2017-04-18 15:54:10,478] ERROR SASL authentication failed using login context 'Client'. (org.Apache.zookeeper.client.ZooKeeperSaslClient)
[2017-04-18 15:54:10,478] DEBUG Received event: WatchedEvent state:AuthFailed type:None path:null (org.I0Itec.zkclient.ZkClient)
[2017-04-18 15:54:10,478] INFO zookeeper state changed (AuthFailed) (org.I0Itec.zkclient.ZkClient)
[2017-04-18 15:54:10,478] DEBUG Leaving process event (org.I0Itec.zkclient.ZkClient)
[2017-04-18 15:54:10,478] DEBUG Closing ZkClient... (org.I0Itec.zkclient.ZkClient)
[2017-04-18 15:54:10,478] INFO Terminate ZkClient event thread. (org.I0Itec.zkclient.ZkEventThread)
[2017-04-18 15:54:10,478] DEBUG Closing ZooKeeper connected to localhost:2181 (org.I0Itec.zkclient.ZkConnection)
[2017-04-18 15:54:10,478] DEBUG Close called on already closed client (org.Apache.zookeeper.ZooKeeper)
[2017-04-18 15:54:10,478] DEBUG Closing ZkClient...done (org.I0Itec.zkclient.ZkClient)
[2017-04-18 15:54:10,480] FATAL Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
org.I0Itec.zkclient.exception.ZkAuthFailedException: Authentication failure
    at org.I0Itec.zkclient.ZkClient.waitForKeeperState(ZkClient.Java:947)
    at org.I0Itec.zkclient.ZkClient.waitUntilConnected(ZkClient.Java:924)
    at org.I0Itec.zkclient.ZkClient.connect(ZkClient.Java:1231)
    at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.Java:157)
    at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.Java:131)
    at kafka.utils.ZkUtils$.createZkClientAndConnection(ZkUtils.scala:79)
    at kafka.utils.ZkUtils$.apply(ZkUtils.scala:61)
    at kafka.server.KafkaServer.initZk(KafkaServer.scala:329)
    at kafka.server.KafkaServer.startup(KafkaServer.scala:187)
    at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:39)
    at kafka.Kafka$.main(Kafka.scala:67)
    at kafka.Kafka.main(Kafka.scala)
[2017-04-18 15:54:10,482] INFO shutting down (kafka.server.KafkaServer)

La configuration suivante est donnée dans le fichier JAAS, qui est passé comme KAFKA_OPTS pour le prendre comme paramètre JVM: -

  KafkaServer {
        org.Apache.kafka.common.security.plain.PlainLoginModule required
        username="admin"
        password="admin-secret"
        user_admin="admin-secret"
    };

    Client {
    org.Apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret";

    };

le serveur.properties du courtier kafka a les champs supplémentaires suivants définis: -

zookeeper.set.acl=true
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
ssl.client.auth=required
ssl.endpoint.identification.algorithm=HTTPS
ssl.keystore.location=path
ssl.keystore.password=anything
ssl.key.password=anything
ssl.truststore.location=path
ssl.truststore.password=anything

Les propriétés de Zookeeper sont les suivantes: -

authProvider.1=org.Apache.zookeeper.server.auth.DigestAuthenticationProvider
jaasLoginRenew=3600000
requireClientAuthScheme=sasl
16
sunder

J'ai trouvé le problème en augmentant le niveau de journalisation à DEBUG. Suivez les étapes ci-dessous. Je n'utilise pas SSL mais vous l'intégrerez sans aucun problème.

Voici mes fichiers de configuration:

server.properties

security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=true
auto.create.topics.enable=false
broker.id=0
listeners=SASL_PLAINTEXT://localhost:9092
advertised.listeners=SASL_PLAINTEXT://localhost:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600

advertised.Host.name=localhost
num.partitions=1
num.recovery.threads.per.data.dir=1
log.flush.interval.messages=30000000
log.flush.interval.ms=1800000
log.retention.minutes=30
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
delete.topic.enable=true
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
super.users=User:admin

zookeeper.properties

dataDir=/tmp/zookeeper
clientPort=2181
maxClientCnxns=0
authProvider.1=org.Apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000

producteur.properties

security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
bootstrap.servers=localhost:9092
compression.type=none

consumer.properties

security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
group.id=test-consumer-group

Voici maintenant les fichiers les plus importants pour faire démarrer votre serveur sans aucun problème:

zookeeper_jaas.conf

Server {
   org.Apache.kafka.common.security.plain.PlainLoginModule required
   username="admin"
   password="admin-secret"
   user_admin="admin-secret";
};

kafka_server_jaas.conf

KafkaServer {
   org.Apache.kafka.common.security.plain.PlainLoginModule required
   username="admin"
   password="admin-secret"
   user_admin="admin-secret";
};

Client {
   org.Apache.kafka.common.security.plain.PlainLoginModule required
   username="admin"
   password="admin-secret";
};

Après avoir fait toutes ces configurations, sur une première fenêtre de terminal:

Terminal 1

Depuis kafka répertoire racine

$ export KAFKA_OPTS="-Djava.security.auth.login.config=/home/usename/Documents/kafka_2.11-0.10.1.0/config/zookeeper_jaas.conf"
$ bin/zookeeper-server-start.sh config/zookeeper.properties

Terminal 2

Depuis kafka répertoire racine

$ export KAFKA_OPTS="-Djava.security.auth.login.config=/home/usename/Documents/kafka_2.11-0.10.1.0/config/kafka_server_jaas.conf"
$ bin/kafka-server-start.sh config/server.properties

[COMMENCER LA MISE À JOUR]

kafka_client_jaas.conf

KafkaClient {
  org.Apache.kafka.common.security.plain.PlainLoginModule required
  username="admin"
  password="admin-secret";
};

Terminal

Sur un terminal client, exportez le fichier conf du client jaas et démarrez le consommateur:

$ export KAFKA_OPTS="-Djava.security.auth.login.config=/home/username/Documents/kafka_2.11-0.10.1.0/kafka_client_jaas.conf"
$ ./bin/kafka-console-consumer.sh --new-consumer --zookeeper localhost:2181 --topic test-topic --from-beginning --consumer.config=config/consumer.properties  --bootstrap-server=localhost:9092

Terminal 4

Si vous souhaitez également produire, faites-le sur une autre fenêtre de terminal:

$ export KAFKA_OPTS="-Djava.security.auth.login.config=/home/username/Documents/kafka_2.11-0.10.1.0/kafka_client_jaas.conf"
$ ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic --producer.config=config/producer.properties

[FIN DE MISE À JOUR]

36
Maximilien Belinga

Vous devez créer un fichier de configuration JAAS pour Zookeeper et le faire l'utiliser.

Créez un fichier de configuration JAAS pour Zookeeper avec un contenu comme celui-ci:

Server {
    org.Apache.zookeeper.server.auth.DigestLoginModule required
    user_admin="admin-secret";
};

Où l'utilisateur (admin) et le mot de passe (admin-secret) doivent correspondre au nom d'utilisateur et au mot de passe que vous avez dans la section Client du fichier de configuration JAAS Kafka).

Pour que Zookeeper utilise le fichier de configuration JAAS, passez l'indicateur JVM suivant à Zookeeper pointant vers le fichier créé auparavant.

-Djava.security.auth.login.config=/path/to/server/jaas/file.conf"

Si vous utilisez Zookeeper inclus avec Kafka package, vous pouvez lancer Zookeeper comme ceci, en supposant que votre fichier de configuration Jook Zookeeper se trouve dans ./config/zookeeper_jaas.conf

EXTRA_ARGS=-Djava.security.auth.login.config=./config/zookeeper_jaas.conf ./bin/zookeeper-server-start.sh ./config/zookeeper.properties 
5
Luciano Afranllie