在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
”
答案 0 :(得分:2)
为什么kafka运行的Kerberos主体名称是“ kafka”而不是“ kafka/hostname@EXAMPLE.COM”?
“ kafka/hostname@EXAMPLE.COM”实际上是指服务主体名称(SPN)。 SPN是KDC中服务实例的唯一标识符。 Kerberos身份验证使用SPN将服务实例与服务登录帐户关联。这样,即使客户端没有帐户名,客户端应用程序也可以请求服务对帐户进行身份验证。
因此,服务名称为“ Kafka”,服务主体名称为“ kafka/hostname@EXAMPLE.COM”。 Kafka是运行Kafka的服务帐户。
为什么我们需要设置以下配置:sasl.kerberos.service.name,它如何工作?
如上所述,您已经使用Kerberos设置了Kafka经纪人身份验证,因此即使客户端没有帐户名,客户端应用程序也可以请求服务对帐户进行身份验证。
但是客户端(生产者,消费者,连接工作者等)将使用其自己的主体(通常与运行客户端的用户同名)向集群进行身份验证,因此需要获取或创建这些主体。然后为每个主体创建一个JAAS文件。 KafkaClient部分描述了生产者和消费者等客户端如何连接到Kafka Broker。
在运行客户端时,需要具有以下信息的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 configurations的更多信息。
答案 1 :(得分:0)
我不知道kafka是什么,但kerberos校长是“kafka / hostname”,而不仅仅是“kafka”。
在您的kerberos数据库中,您可以拥有许多不同的主体,称为
卡夫卡 卡夫卡/主机名 卡夫卡/管理 卡夫卡/ whatyouwant
这些被称为委托人(包括/某事)
答案 2 :(得分:0)
kafka只是kafka服务运行的主要名称。 您还应在KDC服务器中添加“kafka”主体。
如果您使用的是Cloudera,它会自动在KDC服务器中添加此条目。 您可以在/ var / run / cloudera-scm-agent / processs /<>
中检查此配置同样的主体也将在jaas配置文件中。 principal =“kafka / hostname @ Relam Name”;
答案 3 :(得分:0)
使用
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的jaas,你可以在kafka的server.properties中设置这3个属性
security.protocol: SASL_PLAINTEXT
sasl.mechanism: GSSAPI
sasl.kerberos.service.name: kafka
答案 4 :(得分:0)
使用wurstmeister/kafka-docker,貌似不能直接编辑server.properties。 相反,我在 docker-compose.yml 中定义了以下环境属性:
KAFKA_SASL_KERBEROS_SERVICE_NAME: kafka