认证策略SASL/PLAIN
上篇文章中我们讲解了Kafka认证方式和基础概念,并比较了不同方式的使用场景。
我们在《2024年了,如何更好的搭建Kafka集群?》中集群统一使用PLAINTEXT通信。Kafka通常是在内网使用,但也有特殊的使用场景需要暴漏到公网上,如果未设置认证的Kafka集群允许通过公网访问,或暴漏给全部研发人员是极不安全的方式。
本小节我们就为Kafka添加最简单的认证方式,也就是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和advertised
listeners=PLAINTEXT://:9092,CONTROLLER://:9093,SASL_PLAINTEXT://:19092
advertised.listeners=PLAINTEXT://192.168.56.103:9092,SASL_PLAINTEXT://192.168.56.103:19092
# 添加mechanisms配置
sasl.enabled.mechanisms=PLAIN
虽然该实验我们只有一个节点,但我们按照集群的方式分配端口:
- 9092:用于broker节点内部通讯和内网客户端通信
- 19092:用于broker节点外部通讯和外网客户端通信
- 9093:用于多个controller节点之间的通信
我们只需要对外部流量做认证即可,也就是所有通过19092端口的通信需要经过认证。
配置文件中有三处需要注意:
sasl.enabled.mechanisms=PLAIN
意思是采用PLAIN这种方式做认证。- listeners中的SASL_PLAINTEXT监听器,表示监听19092端口,并对经过该端口的通信做认证。
- advertised.listeners中的SASL_PLAINTEXT监听器,表示仅允许符合
192.168.56.103:19092
的流量包抵达SASL_PLAINTEXT监听器。