配置kafka密码认证

Posted 雅冰石

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置kafka密码认证相关的知识,希望对你有一定的参考价值。

一、kafka认证方式类型

kafka提供了多种安全认证机制,主要分为SSL和SASL大类。其中SASL/PLAIN是基于账号密码的认证方式,比较常用

二、测试SASL/PLAIN进行身份验证

参考网址:Kafka SASL_PLAINTEXT权限管理,并整合SpringBoot_紫金小飞侠的博客-CSDN博客_kafka sasl_plaintext

官网:https://kafka.apache.org/documentation/#security_sasl

SASL/PLAIN是一种简单的用户名/密码身份验证机制,通常与TLS一起用于加密以实现安全身份验证。Kafka支持SASL/PLAIN的默认实现,可以扩展到生产环境中使用

1. Kafka brokers 配置:(集群三台配置)

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)修改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 "$@"

3)修改 kafka 配置文件下的server.properties

配置服务器中的SASL端口和SASL机制,所涉及的属性如下

vi  /usr/local/kafka/config/server.properties 

#修改标黄内容,本机主机名:端口

listeners=SASL_PLAINTEXT://192.168.144.24: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的资源,其他用户为未授权用户。

  1.  重启kafka节点

systemctl restart kafka

2. Kafka客户端(clients)配置每个

broker开启了SASL也 要在客户端上配置SASL身份验证

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)修改客户端脚本指定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

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

3. 生产消费测试

若像之前一样直,会报连接错误:

[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.24:9193,192.168.144.26:9193,192.168.144.30:9193  --topic test --producer.config config/producer.properties

消费:

bin/kafka-console-consumer.sh --bootstrap-server 192.168.144.24:9193,192.168.144.26:9193,192.168.144.30:9193 --topic test --from-beginning --consumer.config config/consumer.properties

 

以上是关于配置kafka密码认证的主要内容,如果未能解决你的问题,请参考以下文章

kafka快速配置启用ACL示例

Kafka 认证二:ScramLoginModule 认证及 Java 连接测试

Kafka 认证二:ScramLoginModule 认证及 Java 连接测试

开启kafka密码认证

Kafka 认证一:PlainLoginModule 认证及 Java 连接测试

Kafka 认证一:PlainLoginModule 认证及 Java 连接测试