使用 pem 密钥和客户端证书的 KAFKA SSL 连接
Posted
技术标签:
【中文标题】使用 pem 密钥和客户端证书的 KAFKA SSL 连接【英文标题】:KAFKA SSL connectivity using pem key and client certificate 【发布时间】:2021-02-09 08:00:12 【问题描述】:我能够使用 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 等,但没有运气。 kafka 不属于我们的团队,由不同的团队管理它,当我们请求访问时,我们会获得一个私钥和证书以及 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”的错误
上述错误可能与 spark 每次访问时生成唯一组 id 有关。只有在 spark 3.0 及更高版本中才允许在 spark 数据框中使用 group-id。我需要在 spark 2.4.4 中解决这个问题。
任何建议将不胜感激。
【问题讨论】:
【参考方案1】:您只需要提供您用于验证对主题的访问权限的主体,而不管使用者组如何。它看起来像这样:
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,...”。
【讨论】:
以上是关于使用 pem 密钥和客户端证书的 KAFKA SSL 连接的主要内容,如果未能解决你的问题,请参考以下文章