Made a small mistake, in zk_server_jaas.conf provided, > Server{ > org.apache.zookeeper.server.auth.DigestLoginModule required > username="super" > password="adminsecret";
}; Instead of, > Server{ > org.apache.zookeeper.server.auth.DigestLoginModule required > user_super="adminsecret"; }; Now after making this change, I can make the kafka nodes as world-readable and modifiable only by brokers (as mentioned in kafka doc) Thanks and regards Arjun S V On Thu, Nov 23, 2023 at 10:57 AM arjun s v <arjun.cs...@gmail.com> wrote: > Hi Alex Brekken, > > Sorry for the delayed response, I tried your fix, > At first I got > >> Fatal error during KafkaServer startup. Prepare to shutdown" >> "org.apache.kafka.common.KafkaException: Exception while determining if >> ZooKeeper is secure >> [java.security.auth.login.config=./../config/kafka_server_jaas.conf, >> zookeeper.sasl.client=false, zookeeper.sasl.clientconfig=default:Client] >> at >> org.apache.kafka.common.security.JaasUtils.isZkSaslEnabled(JaasUtils.java:75) >> at kafka.server.KafkaServer.initZkClient(KafkaServer.scala:441) >> at kafka.server.KafkaServer.startup(KafkaServer.scala:191) >> at kafka.Kafka$.main(Kafka.scala:109) >> at kafka.Kafka.main(Kafka.scala) > > > Then I set zookeeper.sasl.client=true > >> - 10.91.21.142 arjun-8481 - - - 23 >> org.apache.zookeeper.client.ZooKeeperSaslClient respondToServer SEVERE >> "23-11-2023 10:49:21:770" - "SASL authentication failed using login context >> 'Client' with exception: {}" "javax.security.sasl.SaslException: Error in >> authenticating with a Zookeeper Quorum member: the quorum member's >> saslToken is null. >> at >> org.apache.zookeeper.client.ZooKeeperSaslClient.createSaslToken(ZooKeeperSaslClient.java:312) >> at >> org.apache.zookeeper.client.ZooKeeperSaslClient.respondToServer(ZooKeeperSaslClient.java:275) >> at >> org.apache.zookeeper.ClientCnxn$SendThread.readResponse(ClientCnxn.java:882) >> at >> org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:103) >> at >> org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:365) >> at >> org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1223) >> - 10.91.21.142 arjun-8481 - - - 23 >> org.apache.zookeeper.ClientCnxn$SendThread run INFO "23-11-2023 >> 10:49:21:771" - "Unable to read additional data from server sessionid >> 0x100147c3ccb0000, likely server has closed socket, closing socket >> connection and attempting reconnect" - - - - - - 1700716761771 - - - - - - >> - - logger_name=org.apache.zookeeper.ClientCnxn >> - 10.91.21.142 arjun-8481 - - - 24 kafka.utils.Logging error SEVERE >> "23-11-2023 10:49:21:771" - "[ZooKeeperClient Kafka server] Auth failed." - >> - - - - - 1700716761771 - - - - - - - - logtype=application >> logger_name=kafka.zookeeper.ZooKeeperClient >> - 10.91.21.142 arjun-8481 - - - 24 >> org.apache.zookeeper.ClientCnxn$EventThread run INFO "23-11-2023 >> 10:49:21:773" - "EventThread shut down for session: 0x100147c3ccb0000" - - >> - - - - 1700716761773 - - - - - - - - logtype=application >> thread_name=main-EventThread logger_name=org.apache.zookeeper.ClientCnxn >> - 10.91.21.142 arjun-8481 - - - 1 kafka.utils.Logging fatal SEVERE >> "23-11-2023 10:49:21:887" - "Fatal error during KafkaServer startup. >> Prepare to shutdown" >> "org.apache.zookeeper.KeeperException$AuthFailedException: KeeperErrorCode >> = AuthFailed for /kafka/1/kafka/1 >> at >> org.apache.zookeeper.KeeperException.create(KeeperException.java:130) >> at >> org.apache.zookeeper.KeeperException.create(KeeperException.java:54) >> at >> kafka.zookeeper.AsyncResponse.maybeThrow(ZooKeeperClient.scala:583) >> at >> kafka.zk.KafkaZkClient.createRecursive(KafkaZkClient.scala:1729) >> at >> kafka.zk.KafkaZkClient.makeSurePersistentPathExists(KafkaZkClient.scala:1627) >> at >> kafka.server.KafkaServer.$anonfun$initZkClient$2(KafkaServer.scala:451) >> at >> kafka.server.KafkaServer.$anonfun$initZkClient$2$adapted(KafkaServer.scala:448) >> at scala.Option.foreach(Option.scala:437) >> at kafka.server.KafkaServer.initZkClient(KafkaServer.scala:448) >> at kafka.server.KafkaServer.startup(KafkaServer.scala:191) >> at kafka.Kafka$.main(Kafka.scala:109) >> at kafka.Kafka.main(Kafka.scala) > > > Please advice. > > On Mon, Nov 13, 2023 at 4:11 AM Alex Brekken <brek...@gmail.com> wrote: > >> I see a couple of things that look wrong. First, remove this line from >> your >> ZK config: >> >> zookeeper.authProvider.1=org.apache.zookeeper.server.auth.DigestAuthenticationProvider. >> And replace it with this: >> >> authProvider.sasl=org.apache.zookeeper.server.auth.SASLAuthenticationProvider. >> >> Additionally, I think you need to add these lines to the ZK config if you >> want ZK to ZK authentication: >> quorum.auth.enableSasl=true >> quorum.auth.learnerRequireSasl=true >> quorum.auth.serverRequireSasl=true >> >> The rest looks OK. >> >> On Sat, Nov 11, 2023 at 9:12 PM arjun s v <arjun.cs...@gmail.com> wrote: >> >> > A small correction, I'm not trying to enable mTLS, just a simple >> > authentication(Digest or Plain) is enough, >> > Sharing the jaas files and config files, >> > kafka_server_jaas.conf >> > >> > > admin.KafkaServer{ >> > > >> > > org.apache.kafka.common.security.plain.PlainLoginModule required >> > > >> > > username="USERNAME" >> > > >> > > password="PASSWORD"; >> > > >> > > }; >> > > >> > > KafkaServer{ >> > > >> > > org.apache.kafka.common.security.plain.PlainLoginModule required >> > > >> > > username="USERNAME" >> > > >> > > password="PASSWORD"; >> > > >> > > }; >> > > >> > > Client{ >> > > >> > > org.apache.zookeeper.server.auth.DigestLoginModule required >> > > >> > > username="super" >> > > >> > > password="adminsecret"; >> > > >> > > }; >> > > >> > server properties >> > >> > > zookeeper.sasl.client=false >> > >> > >> java.security.auth.login.config=$base_dir/../config/kafka_server_jaas.conf >> > >> > zookeeper.connection.timeout.ms=6000 >> > >> > zookeeper.sync.time.ms=2000 >> > >> > zookeeper.set.acl=true >> > >> > >> > zk_server_jaas.conf >> > >> > > QuorumServer{ >> > > org.apache.zookeeper.server.auth.DigestLoginModule required >> > > user_test="test"; >> > > }; >> > > QuorumLearner{ >> > > org.apache.zookeeper.server.auth.DigestLoginModule required >> > > username="test" >> > > password="test"; >> > > }; >> > > Server{ >> > > org.apache.zookeeper.server.auth.DigestLoginModule required >> > > username="super" >> > > password="adminsecret"; >> > >> > }; >> > >> > >> > zoo.cfg >> > >> > > >> > > >> > >> zookeeper.authProvider.1=org.apache.zookeeper.server.auth.DigestAuthenticationProvider >> > >> > >> > env >> > >> > > SERVER_JVMFLAGS="$SERVER_JVMFLAGS >> > > -Djava.security.auth.login.config=$ZOOCFGDIR/zk_server_jaas.conf" >> > > >> > On Fri, Nov 10, 2023 at 7:03 PM Alex Brekken <brek...@gmail.com> wrote: >> > >> > > Ok, so you're trying to enable both SASL authentication (digest) and >> TLS, >> > > using mTLS for Zookeeper? I'm just trying to understand the bigger >> > > picture. The error you're getting regarding the Sasl token sounds >> like >> > > either the jaas config on the Kafka broker side is wrong/missing, or >> the >> > > jaas config on the ZK side is wrong/missing. (you need both - in this >> > case >> > > the broker is the "client" and ZK is the "server"). Are you able to >> share >> > > the jaas config you're using for both Kafka and ZK? Without seeing >> that >> > > it's tough to know. Also, to make troubleshooting easier you might >> want >> > to >> > > leave TLS out of it for now and get SASL working first. (or >> vice-versa) >> > > >> > > >> > > >> > > On Thu, Nov 9, 2023 at 11:26 PM arjun s v <arjun.cs...@gmail.com> >> wrote: >> > > >> > > > "Digest-MD5 is SASL authentication, so not sure what you mean here." >> > > > If I set zookeeper.sasl.client=true, zookeeper expects a "saslToken" >> > and >> > > > throws the following error, >> > > > >> > > > "SASL authentication failed using login context 'Client' with >> > exception: >> > > > {}" "javax.security.sasl.SaslException: Error in authenticating >> with a >> > > > Zookeeper Quorum member: the quorum member's saslToken is null. >> > > > >> > > > at >> > > > >> > > > >> > > >> > >> org.apache.zookeeper.client.ZooKeeperSaslClient.createSaslToken(ZooKeeperSaslClient.java:312) >> > > > >> > > > at >> > > > >> > > > >> > > >> > >> org.apache.zookeeper.client.ZooKeeperSaslClient.respondToServer(ZooKeeperSaslClient.java:275) >> > > > >> > > > at >> > > > >> > > > >> > > >> > >> org.apache.zookeeper.ClientCnxn$SendThread.readResponse(ClientCnxn.java:882) >> > > > >> > > > at >> > > > >> > > >> > >> org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:103) >> > > > >> > > > at >> > > > >> > > > >> > > >> > >> org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:365) >> > > > >> > > > at >> > > > org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1223) >> > > > >> > > > >> > > > "Hmm, that config shouldn't have anything to do with TLS. You can >> set >> > > ACL's >> > > > >> > > > with or without TLS encryption. Were you getting an error?" >> > > > >> > > > >> > > > "Fatal error during KafkaServer startup. Prepare to shutdown" >> > > > "java.lang.SecurityException: zookeeper.set.acl is true, but >> ZooKeeper >> > > > client TLS configuration identifying at least >> > > > kafka.server.KafkaConfig$@7b22ec89.ZkSslClientEnableProp, >> > > > kafka.server.KafkaConfig$@7b22ec89.ZkClientCnxnSocketProp, and >> > > > kafka.server.KafkaConfig$@7b22ec89.ZkSslKeyStoreLocationProp was not >> > > > present and the verification of the JAAS login file failed >> > > > [java.security.auth.login.config=./../config/kafka_server_jaas.conf, >> > > > zookeeper.sasl.client=false, >> > zookeeper.sasl.clientconfig=default:Client] >> > > > >> > > > at >> kafka.server.KafkaServer.initZkClient(KafkaServer.scala:445) >> > > > >> > > > at kafka.server.KafkaServer.startup(KafkaServer.scala:191) >> > > > >> > > > at kafka.Kafka$.main(Kafka.scala:109) >> > > > >> > > > at kafka.Kafka.main(Kafka.scala) >> > > > >> > > > >> > > > "This was the 2nd result in a google search: >> > > > >> https://docs.confluent.io/platform/current/security/zk-security.html" >> > > > >> > > > FYKI, I've googled, asked chat gpt, surfed over many zookeeper and >> > kafka >> > > > docs and blog, >> > > > I remember trying the doc you suggested here about 10 days back in >> the >> > > > initial days of this task! >> > > > About the doc you suggested, >> > > > I cannot configure SSL as I already mentioned, If I skip ssl config >> > part >> > > > from your suggested doc and tried Digest-MD5, I come up "saslToken >> > > missing" >> > > > exception which I mentioned above! >> > > > I don't really understand what saslToken is and how to make it get >> > > > generated for Digest auth! >> > > > Please assist! >> > > > >> > > > On Thu, Nov 9, 2023 at 7:15 PM Alex Craig <alexcrai...@gmail.com> >> > wrote: >> > > > >> > > > > " I couldn't find any doc by kafka to enable Digest-MD5 >> > > authentication." >> > > > > This was the 2nd result in a google search: >> > > > > >> https://docs.confluent.io/platform/current/security/zk-security.html >> > > > > >> > > > > " I don't want to enable SASL." >> > > > > Digest-MD5 is SASL authentication, so not sure what you mean here. >> > > > > >> > > > > " If I set zookeeper.set.acl=true, I'm forced to configure TLS." >> > > > > Hmm, that config shouldn't have anything to do with TLS. You can >> set >> > > > ACL's >> > > > > with or without TLS encryption. Were you getting an error? >> > > > > >> > > > > On Wed, Nov 8, 2023 at 11:35 PM arjun s v <arjun.cs...@gmail.com> >> > > wrote: >> > > > > >> > > > > > Team, >> > > > > > >> > > > > > Please consider this as high priority, we need to enable >> > > authentication >> > > > > > ASAP. Please assist. >> > > > > > On Tue, Nov 7, 2023 at 4:38 PM arjun s v <arjun.cs...@gmail.com >> > >> > > > wrote: >> > > > > > >> > > > > > > Hi team, >> > > > > > > >> > > > > > > I'm trying to configure *Digest-MD5* authentication between >> kafka >> > > and >> > > > > > > zookeeper. >> > > > > > > Also I need to set ACL with digest scheme and credentials. >> > > > > > > I don't want to enable SASL. >> > > > > > > I tried to follow this >> > > > > > > < >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/ZOOKEEPER/Client-Server+mutual+authentication >> > > > > > >> > > > > > doc >> > > > > > > from zookeeper, >> > > > > > > >> > > > > > > - If I configured a jaas file, I have to set >> > > > > > zookeeper.sasl.client=true(if >> > > > > > > not kafka throws error from JaasUtils) which enables sasl >> > > > > > authentication. >> > > > > > > - If I set zookeeper.set.acl=true, I'm forced to configure >> > TLS. >> > > > > > > >> > > > > > > I couldn't find any doc by kafka to enable Digest-MD5 >> > > authentication. >> > > > > > > I cannot configure kerberos or TLS, just a Digest-MD5 is >> > sufficient >> > > > for >> > > > > > my >> > > > > > > usecase. >> > > > > > > Please let me know if there are any docs to enable Digest-MD5 >> > auth >> > > > > > between >> > > > > > > kafka and zookeeper. >> > > > > > > >> > > > > > > Regards, >> > > > > > > Arjun S V >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> >