apache-spark - Kafka kerberos 配置问题

标签 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

最佳答案

why Kerberos principal name that kafka runs as is the "kafka" not "kafka/hostname@EXAMPLE.COM"?

“kafka/hostname@EXAMPLE.COM”实际上指的是服务主体名称(SPN)。 SPN 是 KDC 中一个服务实例的唯一标识符。 Kerberos 身份验证使用 SPN 将服务实例与服务登录帐户相关联。这允许客户端应用程序请求服务对帐户进行身份验证,即使客户端没有帐户名也是如此。

所以这里的服务名称是“Kafka”,服务主体名称是“kafka/hostname@EXAMPLE.COM”。 Kafka 是运行 Kafka 的服务帐户。

why we need to set this configuration:sasl.kerberos.service.name, how does it work?

正如我在上面回答的那样,由于您已经使用 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 代码)使用自己的委托(delegate)人对代理进行身份验证,那么它将对属性 sasl.kerberos.service.name 中提到的服务“kafka”进行身份验证。

这里是关于 SASL configurations 的更多信息.

关于apache-spark - Kafka kerberos 配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42555247/

相关文章:

java - 间歇性出现 KafkaProducerException : Failed to send org. apache.kafka.common.errors.TimeoutException

docker - Confluent Schema Registry Docker 镜像不在容器外暴露端口 8081

hadoop - 在高速缓存中找不到 token (<USER>的HDFS_DELEGATION_TOKEN token 210)

java - 从通过 kerberos key 表进行身份验证的 Java 应用程序在远程服务器上执行脚本

scala - 如何在 Scala 中从 Spark 检索和更新 HBase 表

python - pyspark中groupBy之后的列别名

java - 卡夫卡消费者没有收到旧消息

tomcat - 在 JOSSO 服务器上使用 Windows 凭据进行单点登录

apache-spark - 使用多核处理 json 比 csv 慢得多

apache-spark - Apache Spark 文本相似度