暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

在Confluent Kafka中配置安全和SSL

原创 简单 2022-09-16
3455

什么是SSL?

安全套接字层(SSL)是传输层的一个安全协议。在SSL协议中,数据被分割成片段。这些片段经过压缩和加密后,会附加在由SHA (Secure Hash Protocol)和MD5(Message Digest)等算法生成的MAC (Message Authentication Code)上。SSL是传输层安全(TLS)的前身。在对数据进行加密后,最后,SSL header被附加到数据上。

默认情况下,Confluent Kafka采用不安全的明文协议在9092端口进行通信。

Confluent Kafka安全支持Broker和客户端内部通信的SSL安全协议。每个Broker对其他Broker和客户端进行认证。Broker和客户端都会互相认证(2-way authentication)。人们也可以使用SSL与SASL安全,参考Confluent Kafka sasl的内容。

注意:在Confluent Kafka安全中启用SSL(TLS)将覆盖Kafka消费者的零拷贝优化。在零拷贝机制中,数据只会被复制到页缓存中一次,并在每次消费时重复使用,而不是存储在内存中,并在每次读取时复制到用户空间。这允许消息的消费速度接近网络连接的极限。

为了握手成功:

  • 每个Broker都应该有自己的私钥/证书对,客户端使用证书来验证Broker的身份。
  • 如果启用了客户端身份验证,那么每个客户端都应该有一个私钥/证书对,Broker使用证书对客户端身份进行验证。

客户端认证是可选的,但推荐使用。使用它的代价是性能影响,而不使用它可以允许未经身份验证的代理(模拟)与客户端进行通信。

在Kafka Brokers中启用SSL协议的步骤以及启用Confluent Kafka安全。

注意:以下步骤不包括创建SSL证书和密钥的步骤,可以参考这里

用以下对应的配置更新server.properties文件:

ssl.truststore.location=/var/private/ssl/kafka.server.truststore.jks
ssl.keystore.location=/var/private/ssl/kafka.server.keystore.jks
ssl.truststore.password=secret123
ssl.keystore.password=secret123
ssl.key.password=secret123

在server.properties中进行以下配置,开始broker间的SSL通信:

security.inter.broker.protocol=SSL

现在更新server.properties中的listeners和advertised listeners (如果不同)。一般来说,我们对SSL使用9093端口,因为9092是默认的明文端口。

listeners=SSL://kafkabroker1:9093
advertised.listeners=SSL://localhost:9093

对于继续使用plaintext协议以及SSL,请参考下面:

listeners=PLAINTEXT://kafkabroker1:9092,SSL://kafkabroker1:9093
advertised.listeners=PLAINTEXT://localhost:9092,SSL://localhost:9093

SSL端口正常运行时,删除/禁用9092 plaintext 端口。

  • 对于启用客户端认证(双向认证),必须启用以下配置:ssl.client.auth=required

  • 在客户端,需要同时拥有证书和密钥。所有和启用SSL的Kafka集群进行通信的客户端都要用到以下配置。
    这些配置可以放在一个文件中,并与常用的客户端应用文件一起重复使用。

    bootstrap.servers=kafkabroker1:9093
    security.protocol=SSL
    ssl.truststore.location=/var/private/ssl/kafka.client.truststore.jks
    ssl.truststore.password=secret123
    ssl.keystore.location=/var/private/ssl/kafka.client.keystore.jks
    ssl.keystore.password=secret123
    ssl.key.password=secret123
    

注意:ssl.truststore.password值在broker和客户端的配置中都是可选的,但强烈建议完整性检查。
下面是Confluent Kafka Security中带有SSL元数据配置的Kafka客户端的例子。

  • ${home}/bin/kafka-console-producer -broker-list kafkabroker1:9093 -topic test_topic -producer.config client-ssl.properties
  • ${home}/bin/kafka-console-consumer –bootstrap-server kafkabroker1:9093 –topic test_topic –consumer.config client-ssl.properties –from-beginning
  • 基于JVM的生产者和消费者,下面的export命令可以包含在启动脚本中,或者设置为指定机器的环境变量。
export KAFKA_OPTS=
-Djavax.net.ssl.trustStore=/path/to/truststore.jks
-Djavax.net.ssl.trustStoreType=jks
-Djavax.net.ssl.trustStorePassword=<password
-Djavax.net.ssl.keyStore=/path/to/keystore.jks
-Djavax.net.ssl.keyStoreType=jks
-Djavax.net.ssl.keyStorePassword=;password>

参考

https://docs.confluent.io/platform/current/kafka/authentication_ssl.html

原文标题:Security & SSL Setup in Confluent Kafka
原文作者:munandersingh
原文地址:https://blog.knoldus.com/security-ssl-setup-in-confluent-kafka/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论