1. 预备知识
Kerberos
如果你已在使用Kerberos(如:Active Directory),则无需安装重新安装。否则,你将需要安装一个Kerberos,Linux供应商有Kerberos安装和配置的简短说明(Ubuntu,Radhat)。请注意,如果你使用的是Oracle Java,你需要下载java版本的
JCE策略文件
,将它们复制到$JAVA_HOME/jre/lib/security
中(注意:必须替换!).创建
Kerberos Principals
如果你使用的是公司的
Kerberos
或Active Directory
服务器,请向Kerberos管理员询问群集中每个broker的principal以及将使用Kerberos验证(通过客户端和工具)访问Kafka的每个操作系统用户。如果是你自己安装的Kerberos,你需要通过以下命令创建你自己的
principal
。sudo /usr/sbin/kadmin.local -q 'addprinc -randkey kafka/{hostname}@{REALM}' sudo /usr/sbin/kadmin.local -q "ktadd -k /etc/security/keytabs/{keytabname}.keytab kafka/{hostname}@{REALM}"
确保使用主机名可以访问所有主机 -- Kerberos要求所有的
host
都可以用其FQDN
解析所有主机。
2. 配置Kafka Broker
添加一个JAAS文件,类似下面的每个kafka broker的配置目录。在本例中我们将其命名为
kafka_server_jaas.conf
(注意,每个broker都应该有自己的keytab)。KafkaServer { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/etc/security/keytabs/kafka_server.keytab" principal="kafka/kafka1.hostname.com@EXAMPLE.COM"; }; // Zookeeper client authentication Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/etc/security/keytabs/kafka_server.keytab" principal="kafka/kafka1.hostname.com@EXAMPLE.COM"; };
JAAS文件中的
KafkaServer
告诉broker哪个principal要使用,以及存储该principal的keytab的位置。它允许broker使用指定的keytab进行登录。通过JAAS和krb5文件位置(可选的)作为JVM参数传递到每个broker。
-Djava.security.krb5.conf=/etc/kafka/krb5.conf -Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf
确保在JAAS文件的keytabs配置文件可被启动的Broker的操作系统员读取。
在
server.properties
中配置SASL的端口
和SASL机制
,例如:listeners=SASL_PLAINTEXT://host.name:port security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=GSSAPI sasl.enabled.mechanisms=GSSAPI
我们还必须在server.properties配置服务器名称,应与broker的principal名匹配,在上面的例子中,principal是"kafka/kafka1.hostname.com@EXAMPLE.com", 所以:
sasl.kerberos.service.name=kafka
3. 配置Kafka Client
在客户端上配置SASL认证
客户端(生产者,消费者,connect,等等)用自己的principal进行集群认证(通常用相同名称作为运行客户端的用户)。因此,获取或根据需要创建这些principal。然后为每个客户端配置JAAS配置。JVM中的不同客户端通过指定不同的principal可以作为不同的用户运行。producer.properties或consumer.properties中的sasl.jaas.config描述了像生产者和消费者之类的客户端如何连接到Kafka Broker的。以下是使用keytab的客户端的示例配置(推荐用于长时间运行的进程):
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \ useKeyTab=true \ storeKey=true \ keyTab="/etc/security/keytabs/kafka_client.keytab" \ principal="kafka-client-1@EXAMPLE.COM";
对于像
kafka-console-consumer
或kafka-console-producer
这样的命令行工具,kinit可以与“useTicketCache=true”一起使用,如:sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \ useTicketCache=true;
客户端的JAAS配置可以作为JVM参数,类似于broker。 客户端使用名为
KafkaClient
的login部分。 此选项仅允许JVM中所有客户端连接的一个用户。确保JAAS配置中的keytabs配置文件能被启动kafka客户端的操作系统用户读取。
可以将krb5文件位置作为JVM参数传递给每个客户端JVM:
-Djava.security.krb5.conf=/etc/kafka/krb5.conf
在 producer.properties 或 consumer.properties中配置以下属性:
security.protocol=SASL_PLAINTEXT (or SASL_SSL) sasl.mechanism=GSSAPI sasl.kerberos.service.name=kafka
java.io.IOException: Connection to node01:9092 (id: 1001 rack: null) failed. at org.apache.kafka.clients.NetworkClientUtils.awaitReady(NetworkClientUtils.java:71) at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:292) at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:246) at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
开启kafka的kerbeors和sasl报的错
请问怎么解决
你单独提个问题吧,核心的错误都需要提供。
请问站长有kafka集成kerberos认证的java代码demo吗?
我没整理额,你可以通过搜索关键字,看看其他用户写的零零散散的,太多了,但是你要自己找找:如下:https://www.orchome.com/about/search?q=kerberos&belong=1003&category=I
好的
按照博主的教程,启动kafka时报错,
请问一下,这个该咋解决?感谢回答
转到:https://www.orchome.com/10712
既然为kafka添加权限检验功能,想问下没有java kafka_clents.jar包对接Kerberos认证的例子吗。