Kafka默认未开启密码认证,可以免密登录,太不安全,因此需要开启密码认证。
一 kafka认证方式类型
kafka提供了多种安全认证机制,主要分为SSL和SASL大类。其中SASL/PLAIN是基于账号密码的认证方式,比较常用
1.1 SSL
1.2 SASL
1.2.1 SASL/Kerberos
1.2.2 SASL/PLAIN
1.2.3 SASL/SCRAM
二 测试SASL/PLAIN进行身份验证
SASL/PLAIN是一种简单的用户名/密码身份验证机制,通常与TLS一起用于加密以实现安全身份验证。Kafka支持SASL/PLAIN的默认实现,可以扩展到生产环境中使用
**2.1 **Kafka brokers 配置
#在集群所有服务器上进行配置。
**2.1.1 **kafka增加认证信息
向每个Kafka代理的配置目录中添加一个经过适当修改的类似于下面的JAAS文件
在kafka的配置文件中创建JAAS文件:
vi /usr/local/kafka/config/kafka_server_jaas.conf
#添加下列内容
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-sec"
user_admin="admin-sec"
user_producer="prod-sec"
user_consumer="cons-sec";
};
JAAS文件定义了链接Kafka Broker时所需要的用户名密码及broker各个节点之间相互通信的用户名密码
username定义一个公共的用户名,用于节点之间进行通信,
user_xxxx 为自定义的用户,主要是客户端用来连接kafka的,所有可以使用的用户必须在此定义,不能再之后新增。等号后面是密码xxxxx是用户名,这里大小写一个字都不能差,除了用户名和密码
producer用于开放生产权限。
consumer用于开放消费权限。
username/ password:broker之间通信使用的用户名密码。
user_admin/user_producer/user_consumer:客户端(管理员、生产者、消费者)链接broker时所使用到的用户名密码。
**2.1.2 **修改kafka启动脚本kafka-server-start.sh
将JAAS配置文件位置作为JVM参数传递给每个Kafka代理:
vi /usr/local/kafka/bin/kafka-server-start.sh
#在这行中间添加标黄内容,注意kafka_server_jaas.conf文件是之前第一步创建的安全认证文件
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=/usr/local/kafka/config/kafka_server_jaas.conf kafka.Kafka "$@"
**2.1.3 **修改 kafka 配置文件下的server.properties
配置服务器中的SASL端口和SASL机制,所涉及的属性如下
vi /usr/local/kafka/config/server.properties
#修改标黄内容,本机主机名:端口
listeners=SASL_PLAINTEXT://192.168.144.248:9193
添加:
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=true
注释:
allow.everyone.if.no.acl.found=true 时,整个ACL机制为黑名单机制,即只有黑名单中的用户不能访问资源,非黑名中的用户都可以正常访问kafka的资源
allow.everyone.if.no.acl.found=false时, 也就是默认为false,ACL的机制是白名单机制,只有白名单中的用户才能访问kafka的资源,其他用户为未授权用户。
2.1.4 重启kafka节点
systemctl restart kafka
**2. ****2 **Kafka客户端(clients)配置
broker开启了SASL也 要在客户端上配置SASL身份验证.
要在集群所有服务器上进行配置。
**2.2.1 **创建JAAS文件
在kafka 配置文件中新建消费者:kafka_client_consumer_jaas.conf
vi /usr/local/kafka/config/kafka_client_consumer_jaas.conf
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="consumer"
password="cons-sec";
};
在kafka 配置文件中新建生产者: 生产者:kafka_client_producer_jaas.conf
vi /usr/local/kafka/config/kafka_client_producer_jaas.conf
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="producer"
password="prod-sec";
};
**2.2.2 **修改客户端脚本指定JAAS文件加载:
将JAAS配置文件位置作为JVM参数传递给每个客户机JVM
修改生产启动脚本: kafka-console-producer.sh
vi /usr/local/kafka/bin/kafka-console-producer.sh
#在中间添加如下内容
-Djava.security.auth.login.config=/usr/local/kafka/config/kafka_client_producer_jaas.conf
修改消费启动脚本: kafka-console-consumer.sh
vi /usr/local/kafka/bin/kafka-console-consumer.sh
#在中间添加如下内容
-Djava.security.auth.login.config=/usr/local/kafka/config/kafka_client_consumer_jaas.conf
**2.2.3 **修改客户端配置信息
分别在producer.properties和consumer.properties添加认证机制
vi /usr/local/kafka/config/producer.properties
添加:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
vi /usr/local/kafka/config/consumer.properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
2.3 验证在密码认证模式下进行****生产消费
2.3.1 生产测试
cd /usr/local/kafka
若像之前一样生产消息:
bin/kafka-console-producer.sh --broker-list 192.168.144.248:9193,192.168.144.249:9193,192.168.144.250:9193 --topic test
会报连接错误:
[2022-03-18 01:23:23,992] WARN [Producer clientId=console-producer] Bootstrap broker 192.168.144.249:9193 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
须指定配置文件:
bin/kafka-console-producer.sh --broker-list 192.168.144.248:9193,192.168.144.249:9193,192.168.144.250:9193 --topic test --producer.config config/producer.properties
*2.3.2 消费测试*
bin/kafka-console-consumer.sh --bootstrap-server 192.168.144.248:9193,192.168.144.249:9193,192.168.144.250:9193 --topic test --from-beginning --consumer.config config/consumer.properties
2.4 程序里如何配置****SASL
在配置文件中添加如下配置:
spring:
kafka:
properties:
security:
protocol: SASL_PLAINTEXT
sasl:
mechanism: PLAIN
jaas:
config: 'org.apache.kafka.common.security.plain.PlainLoginModule required username="${kafka.username}" password="${kafka.password}"
2.5如何用kafka tool工具以认证方式连接kafka
--连接集群:
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-sec";
--本篇文章参考了:
Kafka SASL_PLAINTEXT权限管理,并整合SpringBoot_紫金小飞侠的博客-CSDN博客
Apache Kafka
版权归原作者 雅冰石 所有, 如有侵权,请联系我们删除。