开启kafka密码认证

Posted 雅冰石

tags:

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

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

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

开启kafka密码认证

kafka使用ssl加密和认证

kafka开启scarm认证报连接其中一个节点失败

FlinkFlink跨集群访问开启Kerberos认证的Kafka

Kafka开启SASL认证

Zookeeper & Kafka 开启安全认证的配置