动物园管理员SASL安全

时间:2018-11-02 14:08:03

标签: apache-kafka apache-zookeeper kerberos jaas sasl

我正在使用Zookeeper 3.4.12版本,并尝试启用SASL 发现以下错误。有人可以帮忙吗?

Client {
 com.sun.security.auth.module.Krb5LoginModule required
 useKeyTab=true
 storeKey=true
 useTicketCache=true
 keyTab="/tmp/kafka/zookeeper.service.keytab
 principal="zookeeper/chefclient.xyz.local@XYZ.LOCAL";
};

错误:

  

2018-11-02 09:35:01,998]使用登录上下文'Client'的错误SASL身份验证失败,但异常:{}(org.apache.zookeeper.client.ZooKeeperSaslClient)   javax.security.sasl.SaslException:使用Zookeeper法定成员进行身份验证时出错:法定成员的saslToken为null

4 个答案:

答案 0 :(得分:0)

我认为问题是,您在

处缺少双引号
keyTab="/tmp/kafka/zookeeper.service.keytab

答案 1 :(得分:0)

Zookeeper安全性的第一步是保护仲裁对等方的通信。完整的说明here

您的Zookeeper jaas文件应具有 QuorumServer QuorumLearner 部分。

接下来,您可以保护Zookeeper群集和客户端之间作为Kafka的通信。完整说明here

您在Zookeeper jaas文件中添加了服务器部分,而您的Kafka jaas文件应具有 Client 部分

答案 2 :(得分:0)

问题已解决,jaas中的空格导致了问题

答案 3 :(得分:0)

我遇到了同样的问题...

SaslException: Error in authenticating with a Zookeeper Quorum member: the quorum member's saslToken is null

Zookeeper Server日志中也存在此错误:

ERROR [NIOWorkerThread-6:ZooKeeperServer@1191] - cnxn.saslServer is null: cnxn object did not initialize its saslServer properly.

我的配置,在zookeeper实例之间使用相互的kerberos身份验证。

解决方案

缺少“服务器”部分

我的问题是我在Zookeeper的服务器jaas配置中没有Server部分。

我需要类似的东西:

QuorumServer {
       com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       keyTab="/etc/security/keytabs/zookeeper.keytab"
       storeKey=true
       useTicketCache=false
       debug=false
       principal="zookeeper/zk1.example.com@EXAMPLE.COM";
};

QuorumLearner {
       com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       keyTab="/etc/security/keytabs/zookeeper.keytab"
       storeKey=true
       useTicketCache=false
       debug=false
       principal="zookeeper/zk2.example.com@EXAMPLE.COM";
};

Server {
       com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       keyTab="/etc/security/keytabs/zookeeper.keytab"
       storeKey=true
       useTicketCache=false
       principal="zookeeper/zk3.example.com@EXAMPLE.COM";
};

当客户端连接到Zookeeper时,它们将根据此配置的Server部分进行身份验证。这是SASL运作所必需的。

还要确保您为conf/java.env设置了以下内容:

SERVER_JVMFLAGS="${SERVER_JVMFLAGS} -Djava.security.auth.login.config=/opt/zookeeper/conf/server-jaas.conf"
CLIENT_JVMFLAGS="${CLIENT_JVMFLAGS} -Djava.security.auth.login.config=/opt/zookeeper/conf/client-jaas.conf"