客户端 kerberos 身份验证 confluent-kafka python

Client side kerberos authentication confluent-kafka python

我在 cloudera 集群上安装了 kafka 运行,并且有一个 kerberos 用户 (username/password) 进行身份验证。我正在尝试对 confluent-kafka producer/consumer 进行身份验证,但我在这样做时遇到了麻烦。我能够在本地支持 kafka 并且 produce/consume 没有任何问题,并且能够在添加 kerberos 之前访问集群上的 kafka 实例。我能够找到一些关于为集群设置 Kerberos 的文档(这已经完成),但没有找到如何使用 username/pass 从客户端进行身份验证。

以下是我使用的版本的一些信息:

卡夫卡版本:0.11.0-kafka3.0.0 融合卡夫卡版本:融合卡夫卡(0.11.0) librdkafka 版本:0.11.3

这是我未经身份验证的简单 Producer conf:

Producer({'bootstrap.servers': broker_url}, {'api.version.request': True})

通过一些谷歌搜索,我尝试过这样的事情(以及一些细微的修改):

p = Producer({'bootstrap.servers': broker_url}, {'api.version.request': True}, {"security.protocol", "PLAINTEXT"}, {'sasl.username': 'username'}, {'sasl.password': 'password'})

我收到此错误消息(快速连续重复,cluster_broker_name 出于安全目的已删除)

%5|1521746707.533|失败|rdkafka#producer-1| [第三:kafka_url:9092/bootstrap]:kafkaPurl:9092/bootstrap:连接关闭 %3|1521746707.533|错误|rdkafka#producer-1| [thrd:kafka_url:9092/bootstrap]: kafka_url:9092/bootstrap: 连接关闭 %3|1521746708.538|失败|rdkafka#producer-1| [第三:kafka_url:9092/bootstrap]:kafka_url:9092/bootstrap:接收失败:断开连接 %3|1521746708.538|错误|rdkafka#producer-1| [第三:kafka_url:9092/bootstrap]:kafka_url:接收失败:断开连接 %3|1521746708.538|错误|rdkafka#producer-1| [第三:kafka_url:9092/bootstrap]:1/1券商下跌

我正在尝试找出要添加到配置中的内容以进行身份​​验证(使用用户名和密码)。如果附加到配置不是执行此操作的方法,那么我将不胜感激有人为我指明正确的方向。

基本上,我想要 kafka 中的 confluent-kafka 等价物-python:

from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='example.com:9095', security_protocol="SASL_PLAINTEXT", sasl_mechanism='PLAIN', sasl_plain_username='username', sasl_plain_password='password')

我是 confluent-kafka 的新手(并且不太熟悉一般的安全性)所以如果这是一个愚蠢的问题,我提前道歉。提前致谢,我将不胜感激!

戴夫,

您是否 100% 确定代理的侦听器已配置为使用 Kerberos?(SASL 机制 GSSAPI)?

我问是因为你提供的例子展示了PLAIN机制的使用。

security_protocol="SASL_PLAINTEXT", sasl_mechanism='PLAIN'

这也可以解释为什么您的 Java 客户端能够在不使用密钥表的情况下登录。或者,他们可能将 JAAS 登录模块配置为使用本地凭证缓存。

如果代理的侦听器实际上配置为使用 PLAIN SASL 机制,那么除了 security.protocol = "PLAINTEXT" 之外,您还需要传递 sasl.mechanism="PLAIN", sasl.username = "username" 和 sasl.password = 密码。

请注意,他的经纪人也需要配置为接受此用户名和密码。我在下面链接了我们的文档,其中包含有关如何配置代理的说明。

https://docs.confluent.io/current/kafka/authentication_sasl.html#plain