Kafka kerberos配置问题

时间:2017-03-02 12:13:57

标签: apache-spark apache-kafka kerberos

在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

5 个答案:

答案 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