Apache kafka 弗林克&x2B;卡夫卡+;Kerberos:找不到';卡夫卡客户端';JAAS配置中的条目

Apache kafka 弗林克&x2B;卡夫卡+;Kerberos:找不到';卡夫卡客户端';JAAS配置中的条目,apache-kafka,apache-flink,kerberos,jaas,Apache Kafka,Apache Flink,Kerberos,Jaas,我正在使用Flink 1.8尝试连接到Kerberized Kafka经纪人 我正在jaas.conf中设置KafkaClient条目,如下所示: KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true renewTicket=true serviceName="kafka"; }; Client { com.sun.security.

我正在使用Flink 1.8尝试连接到Kerberized Kafka经纪人

我正在jaas.conf中设置KafkaClient条目,如下所示:

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useTicketCache=true
    renewTicket=true
    serviceName="kafka";
};
Client {  
   com.sun.security.auth.module.Krb5LoginModule required
   useTicketCache=true
   renewTicket=true
   serviceName="zookeeper";
};
并通过在代码中设置该属性来指向该jaas文件,该属性与其他必需属性(bootstrap.servers等)一起传递给Kafka使用者

在启动flink应用程序之前,我还尝试在KAFKA_OPTS环境变量上指定jaas.conf path

我得到的错误是:

java.lang.IllegalArgumentException:找不到“KafkaClient” JAAS配置中的条目。系统属性 “java.security.auth.login.config”是 /tmp/jaas-6335181385007718768.conf


我不知道jaas.conf文件是否应该自动放入临时文件,或者它没有很好地检测到指定的配置文件。出现错误后会删除临时文件,但tmp上有以前启动的一些文件,它们不包含任何代码(只有一些默认注释和空配置)。

设置中有两个问题;首先,传递jaas conf文件位置,然后传递jaas conf文件内容

java.security.auth.login.config是系统属性。所以您应该通过在代码中设置系统属性来传递

System.setProperty("java.security.auth.login.config", "/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf");
或者在运行时设置JVM参数-D

-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf
jaas文件条目应配置为使用keytab或用户名/密码

kafka密钥表auth jaas.conf

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab = true   
    useTicketCache=false
    storeKey = true
    keyTab="/tmp/kafka.service.keytab"
    principal="****@REALM"
    serviceName="kafka";
};
KafkaClient {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="user"
  password="userpassword";
};
kafka密码验证jaas.conf

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab = true   
    useTicketCache=false
    storeKey = true
    keyTab="/tmp/kafka.service.keytab"
    principal="****@REALM"
    serviceName="kafka";
};
KafkaClient {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="user"
  password="userpassword";
};

设置中存在两个问题;首先,传递jaas conf文件位置,然后传递jaas conf文件内容

java.security.auth.login.config是系统属性。所以您应该通过在代码中设置系统属性来传递

System.setProperty("java.security.auth.login.config", "/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf");
或者在运行时设置JVM参数-D

-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf
jaas文件条目应配置为使用keytab或用户名/密码

kafka密钥表auth jaas.conf

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab = true   
    useTicketCache=false
    storeKey = true
    keyTab="/tmp/kafka.service.keytab"
    principal="****@REALM"
    serviceName="kafka";
};
KafkaClient {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="user"
  password="userpassword";
};
kafka密码验证jaas.conf

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab = true   
    useTicketCache=false
    storeKey = true
    keyTab="/tmp/kafka.service.keytab"
    principal="****@REALM"
    serviceName="kafka";
};
KafkaClient {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="user"
  password="userpassword";
};

要从JAAS获取一些调试级日志记录,请添加
-Dsun.security.krb5.debug=true
-Djava.security.debug=gssloginconconfig、configfile、configparser、logincontext
>,但这不会解释如何首先创建临时文件并将其强制放入JAAS中……要从JAAS获取一些调试级日志记录,添加
-Dsun.security.krb5.debug=true
-Djava.security.debug=gssloginconfig、configfile、configparser、logincontext
>,但这不会解释如何创建临时文件并将其强制放入JAAS中…您好,谢谢您的回答。但是使用代码中的“java.security.auth.login.config”,错误表示在/tmp内的临时jaas文件中找不到KafkaClient条目,它没有读取代码中指定的jaas.conf文件的内容(这是我尝试的第一件事)。通过将KafkaClient配置内联到代码中(而不是将文件位置放在一行中,我在jaas config中编写了不同的条目,每个条目之间都有一个空格),我最终实现了它。但是使用代码中的“java.security.auth.login.config”,错误表示在/tmp内的临时jaas文件中找不到KafkaClient条目,它没有读取代码中指定的jaas.conf文件的内容(这是我尝试的第一件事)。最后,我将KafkaClient配置内联到代码中(而不是将文件位置放入代码中,而是将jaas config中的不同条目写在一行中,每个条目之间都有一个空格),从而使它能够正常工作。