如何将账号密码添加到Kafka(2)
SASL/SASL/SASL/认证策略PLAIN。
在上一篇文章中,我们解释了Kafka的认证方法和基本概念c;并以不同的方式比较使用场景。
2024年,如何更好地构建Kafka集群?》PLAINTEXT通信统一用于中集群。Kafka通常用于内网,但也有特殊的使用场景需要泄露到公网,未经认证的Kafka集群允许通过公网访问,或者向所有研发人员泄露是一种极其不安全的方式。
本节我们将为Kafka添加最简单的认证方法,也就是SASL_也就是SASL__PLAINTEXT(也就是SASL/PLAIN+ 非加密通道)。
配置服务集群节点。
Kafka有三个地方可以做认证:
borker节点之间的认证,controller节点之间的认证,外部客户端连接集群认证。我们只需要在公司内部配置外部客户端连接时进行认证。本文基于kraft单节点部署Kafka,该节点既是controller又是broker节点。
在开始之前,请先到官网下载安装包(本文使用 Kafka-v3.6.1:
https://kafka.apache.org/downloads。
1. 创建jaas配置文件。
文件:volume/config/kafka-server-jaas.conf。
KafkaServer。 { 。org。.。apache。.。kafka。.。common。.。security。.。plain。.。PlainLoginModule required user_admin。="123456";}。;
帐号密码。user_{ USERNAME}="PASSWORD"
这种形式配置在jaas的配置文件中固定写死。
2. 修改配置文件。
修改config//kraft/server.properties如下:
# 修改listeners和advertisedlisteners;PLAINTEXT://:9092,CONTROLLER://:9093,SASL_PLAINTEXT://:19092advertiseded.listeners=PLAINTEXT://192.168.56.103:9092,SASL_PLAINTEXT://192.168.56.103:19092# 添加mechanisms配置saslll配置.enabled.mechanisms=PLAIN。
虽然我们只有一个节点,但是,我们以集群的形式分配端口༚
- 9092。:用于broker节点内部通信和内网客户端通信。
- 19092。:用于broker节点外部通信和外网客户端通信。
- 9093。:用于多个controller节点之间的通信。
我们只需要认证外部流量,也就是说,所有通过19092端口的通信都需要认证。
有三个配置文件需要注意:
sasl.enabled.mechanisms=PLAIN。
这意味着通过PLAIN进行认证。- SASL_PLAINTEXT监听器监控19092年端口,并对通过端口的通信进行认证。
- advertised.SASL_PLAINTEXT监听器表示只允许符合。
192.168.56.103:19092。
流量包到达SASL_PLAINTEXT监听器。
关于advertised.listeners,Kafka有一个复杂的监听器系统。Kafka允许定义多个监控器来监控不同的端口,将不同的流量划分为不同的端口。这样做的好处是,当端口流量较大时,不影响其他端口的通信。
3. 启动节点。
执行以下命令启动节点:
KAFKA_OPTS=-Djava.security.auth.login.config=config/kraft/jaas.conf bin/kafka-server-start.sh config/kraft/server.properties。
用于指定JAAS配置文件的环境变量KAFKA_OPTS。
服务端通过以上三个步骤配置,下面,我们使用客户端来验证认证是否有效。
配置客户端。
我们将介绍三种客户端连接方式:
- kafka命令工具测试。
- offset 连接kafka的explorer图形工具。
- flink连接kafka。
kafka命令工具测试。
在config目录中创建admin.conf。
security.protocol=SASL_PLAINTEXTsasl.mechanism=PLAINsasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="123456";
提示:确保帐户密码与服务端配置一致。
# 创建topic。bin/kafka-topics.sh。 --create。--topic。test-topic --bootstrap-server。=192.168。.56.103:19092 --command-config。=config/admin.conf。# 查看topic。bin/kafka-topics.sh。 --list。--bootstrap-server。=192.168。.56.103:19092 --command-config。=config/admin.conf。
使用图形工具Offsetet explorer连接kafka。
![[attach/Pasted image 20240204135019.png]]。
这里只需要填写集群名称,我们没有使用zk版zookeeper相关配置无需修改。
![[attach/Pasted image 20240127151018.png]]。
![[attach/Pasted image 20240127151059.png]]。
![[attach/Pasted image 20240127151109.png]]。
设置这三个地方,正常连接即可。
Flink连接kafka。
在无认证的基础上,增加三个认证参数:
SECURITY_PROTOCOL_CONFIG。
SASL_MECHANISM。
SASL_JAAS_CONFIG。
Properties。properties。 =new。Properties。(。)。;properties。.。setProperty。(。ConsumerConfig。.。ENABLE_AUTO_COMMIT_CONFIG。,"true")。;properties。.。setProperty。(。ConsumerConfig。.。AUTO_COMMIT_INTERVAL_MS_CONFIG。,"5")。;properties。.。setProperty。(。CommonClientConfigs。.。SECURITY_PROTOCOL_CONFIG。,"SASL_PLAINTEXT")。;properties。.。setProperty。(。SaslConfigs。.。SASL_MECHANISM。,"PLAIN")。;properties。.。setProperty。(。SaslConfigs。.。SASL_JAAS_CONFIG。,"org.apache.kafka.common.security.plain.PlainLoginModule required username='admin' password='123456';")。;/* org.apache.flink.streaming包下的消费者和生产者已被标记,不建议使用 org.apache.flink.connector.kafka 建议使用包中的工具类 */。KafkaSource。<String。>kafkaSource。 =KafkaSource。.。<String。>builder。(。)。.。setBootstrapServers。(。"192.168.56.103:19092")。.。setTopics。(。"test-topic")。.。setGroupId。(。"test")。.。setValueOnlyDeserializer。(。new。SimpleStringSchema。(。)。)。.。setStartingOffsets。(。OffsetsInitializer。.。earliest。(。)。)。.。setProperties。(。properties。)。.。build。(。)。;final。StreamExecutionEnvironment。env。 =StreamExecutionEnvironment。.。getExecutionEnvironment。(。)。;env。.。enableCheckpointing。(。10000。)。;env。.。setParallelism。(。1。)。;DataStreamSource。<String。>stream。 =env。.。fromSource。(。kafkaSource。,WatermarkStrategy。.。noWatermarks。(。)。,"test-tip")。;stream。.。print。(。)。;env。.。execute。(。"Kafka to Print")。;
我们已经为Kafka集群配置了SASL/PLAIN的认证方法。但这种方法的缺点也很明显,它只能在启动Kafka之前,固定用户名和密码,无法灵活修改账号密码。如果修改只能重启集群。下一篇文章本文介绍了一种可以灵活修改的认证方法,即SASL/SCRAM。
请保留本文的连接进行转载。
本文地址:http://cdn.baiduyun.im/video/www.bfzx365.com/news/show.php/video/401d69898900.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。