使用pem密钥和客户端证书的KAFKA SSL连接

时间:2020-10-27 02:51:48

标签: python apache-spark ssl pyspark apache-kafka

我可以使用以下client.properties中的ssl详细信息连接到kafka并从CLI(bin / kafka-console-consumer.sh)读取数据

ssl.keystore.location=/test/keystore.jks
ssl.keystore.password=abcd1234
ssl.key.password=abcd1234
Command: bin/kafka-console-consumer.sh --bootstrap-server 'server details'  --topic topic_name --consumer.config client.properties --group group-id

但是我无法使用相同的数据通过python或spark连接

consumer = KafkaConsumer(topic,bootstrap_servers=bootstrap_server,security_protocol='SSL',sasl_mechanism='PLAIN',ssl_certfile='certificate.pem',ssl_keyfile='pk.key')

我尝试更改上述代码中的多个选项,例如添加check_host_name等,但是没有运气。 卡夫卡不属于我们的团队,而是由另一个团队来管理。当我们请求访问权限时,我们将获得私钥和证书以及CA捆绑包和ARN名称。

在Spark(Python)中,我尝试了以下代码

sdf1 = spark.readStream.format("kafka")
       .option("kafka.bootstrap.servers",bootstrap_server)
       .option("subscribe", topic_name)
       .option("startingOffsets", "latest")
       .option("kafka.security.protocol","SSL")
       .option("kafka.ssl.keystore.location",'keystore.jks')
       .option("kafka.ssl.keystore.password", '****')
       .option("kafka.ssl.key.password",'****')
       .load()

我收到类似“ org.apache.kafka.common.errors.GroupAuthorizationException的错误:未经授权访问组:spark-kafka-source-xxxxxxx-xxxxx-xxxxx”

以上错误与每次访问时都会生成唯一的组ID有关。仅在spark 3.0及更高版本中才允许在spark数据帧中使用group-id。我需要选择在Spark 2.4.4中修复此问题。

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

您只需要提供所使用的主体来验证对主题的访问即可,无论使用哪个消费群体。看起来像这样:

kafka-acls --authorizer-properties zookeeper.connect=zk_ip_or_fqdn:2181  --add  --allow-principal User:"userName" --operation All --topic yourTopicName --group=*

您的用户名(主名称)将是SSL证书的使用者名称,格式为“ CN = toto,OU = titi,...”。