kafka kerberos配置问题

hwamh0ep  于 2021-06-07  发布在  Kafka
关注(0)|答案(4)|浏览(355)

在Kafka的文件中,它说校长是Kafka/hostname@example.com,所以sasl.kerberos.service.name应该是kafka,但我很困惑kafka代理配置中说: sasl.kerberos.service.name 代表

"The Kerberos principal name that Kafka runs as. This can be defined either in Kafka's JAAS config or in Kafka's config."

为什么需要设置此配置: sasl.kerberos.service.name ,它是如何工作的?为什么Kafka运行的kerberos主体名称是“ kafka “不是” kafka/hostname@EXAMPLE.COM "

mm9b1k5b

mm9b1k5b1#

我不知道kafka是什么,但是kerberos的主体是“kafka/hostname”,而不仅仅是“kafka”。
在kerberos数据库中,可以有许多不同的主体,称为
KafkaKafka/hostnameKafka/adminKafka/whatyouwant
每一个都称为主体(包括/某物)

wj8zmpe1

wj8zmpe12#

kafka只是kafka服务运行的主体名称。您还应该在kdc服务器中添加一个“kafka”主体。
如果您使用的是cloudera,它会自动将这个条目添加到kdc服务器中。您可以在/var/run/cloudera scm agent/processs/中检查此配置
相同的主体也将出现在jaas配置文件中。校长=“Kafka/hostname@relam “名称”;

gmxoilav

gmxoilav3#

使用

KafkaServer {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    useTicketCache=false
    keyTab="kafka.keytab"
    principal="kafka/kafka.example.com@EXAMPLE.COM";
};
// Zookeeper client authentication
Client {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   storeKey=true
   useTicketCache=false
   keyTab="kafka.keytab"
   principal="kafka/kafka.example.com@EXAMPLE.COM";

};
这是为了Kafka服务器和Kafka连接到一个kerberized zookeeper,你可以在Kafka的server.properties中设置这3个属性

security.protocol: SASL_PLAINTEXT
sasl.mechanism: GSSAPI
sasl.kerberos.service.name: kafka
ui7jx7zq

ui7jx7zq4#

为什么Kafka运行的kerberos主体名称是“Kafka”而不是“Kafka”/hostname@example.com"?
“Kafka/hostname@example.com“实际上是指服务主体名称(spn)。spn是kdc中服务示例的唯一标识符。kerberos身份验证使用SPN将服务示例与服务登录帐户相关联。这允许客户端应用程序请求服务对帐户进行身份验证,即使客户端没有帐户名也是如此。
所以服务名称在这里是“kafka”,服务主体名称是“kafka”/hostname@example.com". kafka是运行kafka的服务帐户。
为什么我们要设置这个configuration:sasl.kerberos.service.name,它是如何工作的?
正如我在上面所回答的,由于您已经用kerberos设置了kafka代理身份验证,因此客户机应用程序可以请求服务对帐户进行身份验证,即使客户机没有帐户名称。
但是客户端(生产者、消费者、连接工作者等)将使用自己的主体(通常与运行客户端的用户同名)对集群进行身份验证,因此根据需要获取或创建这些主体。然后为每个主体创建一个jaas文件。kafkaclient部分描述了像producer和consumer这样的客户机如何连接到kafka代理。
你需要有jass文件,在那里你运行你的客户与以下信息。
如果您首先使用kinit命令,请使用此配置。

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/etc/security/keytabs/kafka_client.keytab"
    principal="kafka-client-1@EXAMPLE.COM";
};

如果使用keytab,请使用以下配置:

KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/security/keytabs/kafka_server.keytab"
principal="kafka/kafka1.hostname.com@EXAMPLE.COM";
};

因此,一旦客户机(生产者、消费者、任何java代码)使用自己的主体对代理进行身份验证,那么它将对请求属性sasl.kerberos.service.name中提到的服务“kafka”进行身份验证。
下面是有关sasl配置的更多信息。

相关问题