【问题标题】:Kafka kerberos configuration issuesKafka kerberos 配置问题
【发布时间】:2017-07-22 04:02:48
【问题描述】:

在kafka文档中说principal是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

【问题讨论】:

  • 你们是如何提供本金分布的?

标签: apache-spark apache-kafka kerberos


【解决方案1】:

为什么 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的信息。

【讨论】:

    【解决方案2】:

    我不知道 kafka 是什么,但是 kerberos 主体是“kafka/hostname”,而不是“kafka”。

    在您的 kerberos 数据库中,您可以有许多不同的主体,称为

    卡夫卡 卡夫卡/主机名 卡夫卡/管理员 卡夫卡/你想要什么

    每个都称为主体(包括 /something)

    【讨论】:

      【解决方案3】:

      kafka 只是 kafka 服务运行的主体名称。 您还应该在 KDC 服务器中添加一个“kafka”主体。

      如果您使用 Cloudera,它将自动在 KDC 服务器中添加此条目。 您可以在 /var/run/cloudera-scm-agent/processs/

      中检查此配置

      相同的主体也将在 jaas 配置文件中。 principal="kafka/hostname@Relam Name";

      【讨论】:

        【解决方案4】:

        使用

        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";
        

        };

        这个 jaas 用于 kafka 服务器和 kafka 连接到 kerberized zookeeper,您可以在 kafka 的 server.properties 中设置这 3 个属性

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

        【讨论】:

          【解决方案5】:

          使用 wurstmeister/kafka-docker,好像 server.properties 不能直接编辑。 相反,我在 docker-compose.yml 中定义了以下环境属性:

          KAFKA_SASL_KERBEROS_SERVICE_NAME: kafka
          

          【讨论】:

            猜你喜欢
            • 2019-07-14
            • 1970-01-01
            • 1970-01-01
            • 2019-11-24
            • 1970-01-01
            • 2022-01-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多