kafka集群、单机 开启Sasl_Scram认证

一、开启zookeeper的SASL认证模式

修改zookeeper配置文件zoo.cfg,添加认证文件
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl

创建zookeeper认证文件

修改配置文件zookeeper_jaas.conf命令把下面的内容粘贴进去

Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
user_super="super1234"
user_kafka="kafka1234";
};

这里要对这两个参数说明一下:user_super="super1234"这句配置的是超级用户,在Zookeeper里面超级用户默认就是super,后面引号里设置的则是它的密码super1234。因此下面的user_kafka="kafka1234"设置的是Kafka连接Zookeeper要用的账户和密码,这个账户和密码在后面Kafka的配置中还要用,请先记住这点。其意思就是,一个叫做kafka的账户名,密码是kafka1234。前面的user_就是为了识别这个配置是一个账户名用的。

启动zookeeper时需要加载认证文件

需要注意认证文件路径是否正确

export JVMFLAGS="-Djava.security.auth.login.config=/usr/local/zookeeper-3.4.14/conf/zookeeper_jaas.conf -Dzookeeper.4lw.commands.whitelist=*"

启动zookeeper

./zkServer.sh start &

查看状态

./ zkServer.sh status

二、kafka集群的SASL认证模式修改

修改kafak配置文件

listeners=SASL_PLAINTEXT://hostname:9092,SASL_SSL://hostname:9093

#############     SASL/SCRAM相关配置如下    ############

#Broker内部联络使用的security协议
security.inter.broker.protocol=SASL_PLAINTEXT

#Broker内部联络使用的sasl协议,这里也可以配置多个,比如SCRAM-SHA-512,SCRAM-SHA-256并列使用
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512

#Broker允许使用的sasl协议,这里也可以配多个PLAIN,SCRAM-SHA-512,SCRAM-SHA-256
sasl.enabled.mechanisms=PLAIN,SCRAM-SHA-512

#设置zookeeper是否使用ACL
#zookeeper.set.acl=true

#设置ACL类(高于 2.4.0 版本推荐使用 AclAuthorizer此处我们使用SimpleAclAuthorizer)
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

#设置Kafka超级用户账号,这两个分别对应zookeeper_jaas.conf中的user_super="super1234"和user_kafka="kafka1234";
super.users=User:admin;User:kafka

创建kafka认证文件(每个节点)

在kafka配置目录config下 vi kafka-broker-jaas.conf创建一个认证文件,粘贴下面内容。

KafkaServer {
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username="admin"
    password="admin1234";
};
Client {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    username="kafka"
    password="kafka1234";
};

KafkaServer这里配置的是Kafka服务器本身的超级账户admin和其密码,使用的是ScramLoginModule模式,。直接使用这个超级账户登陆,整个Kafka集群就相当于对你打开了大门。后面配置的Client是用来登陆Zookeeper使用的,也就是上面我们配置到zookeeper_jaas.conf 文件中的user_kafka="kafka1234"一行所对应的,这里看到登陆Zookeeper要用的账户就是kafka,密码就是kafka1234

加载配置文件(每个节点) 可以写进启动脚本里面

可以直接执行下面的命令 加载环境变量

export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/local/kafka_2.11-2.2.0/config/kafka-broker-jaas.conf"

不加载配置文件就会出现如下报错

在这里插入图片描述

给zookeeper中添加超级用户(一个节点执行即可)

这一步不需要启动kafka因为数据都是存在zookeeper中的
在kafka的bin目录下执行

sh kafka-configs.sh --zookeeper 192.168.100.100:2181,192.168.100.100:2181,192.168.100.100:2181 --alter --add-config 'SCRAM-SHA-512=[password=admin1234]' --entity-type users --entity-name admin

出现如下信息说明添加成功
添加用户之前一定要加载上面的zookeeper认证文件
在这里插入图片描述

启动kafka集群

./kafka-server-start.sh ../config/server.properties &

看日志无报错即可

验证SASL是否开启成功

声明环境变量改文件中设置了zooekpeer通信用户以及kafka超级用户

export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/local/kafka_2.11-2.2.0/config/kafka-broker-jaas.conf"

创建名为test密码为123456的用户

./kafka-configs.sh  --zookeeper  192.168.100.100:2181 --alter --add-config 'SCRAM-SHA-512=[password=123456]' --entity-type users --entity-name test

出现Completed Updating config for entity: user-principal ‘test’.则为新增成功

在kafka的config目录下新建 admin.conf 和 test.conf 配置文件

vi admi.config

#因为配置了SSL所以需要配置加密认证文件
security.protocol=SASL_SSL
ssl.truststore.location=/opt/ssl/client.truststore.jks
ssl.truststore.password=123456
ssl.endpoint.identification.algorithm=
#下面用户名密码改为现场
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin1234";

vi test.conf

security.protocol=SASL_SSL
ssl.truststore.location=/opt/ssl/client.truststore.jks
ssl.truststore.password=123456
#这里为啥什么都不配下面有解释
ssl.endpoint.identification.algorithm=
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="test" password="123456";

通过admin.conf使用超级管理员连接kafka可以查看topic 使用普通未授权的用户无法查看到topic,通过指定用户配置文件指定用户连接

./kafka-topics.sh --list  --bootstrap-server  192.168.100.100:9093 --command-config ../config/admin.conf

未授权用户执行则无法查看topic

./kafka-topics.sh --list  --bootstrap-server  192.168.100.100:9093 --command-config ../config/test.conf

给test用户授权生产者权限

./kafka-acls.sh --authorizer-properties zookeeper.connect=192.168.100.100:2181 --add --allow-principal User:"test" --producer --topic 'testtopic'

给test用户授权消费者权限

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=192.168.100.100:2181 --add --allow-principal User:"testuc" --consumer --topic 'testtopic' --group '*'

kafka相关指令说明
在这里插入图片描述

三kafka常见报错处理

1、证书不对
当使用一台服务器上的jks证书访问另一台kafka节点而不是集群的话或报错
报错截图
在这里插入图片描述解决方式 使用集群连接地址
111

kafka相关参数说明
在这里插入图片描述
相关参考地址

http://kafka.apache.org/documentation/#security_authz_cli
https://blog.youkuaiyun.com/lijingjingchn/article/details/85126537
https://blog.youkuaiyun.com/qq_33887096/article/details/114532608’

### Kafka SASL/SCRAM 认证机制配置与最佳实践 #### 1. SASL/SCRAM 认证概述 Kafka 支持多种安全协议来保护集群通信的安全性,其中SASL/SCRAM是一种常用的认证方式。通过这种方式可以增强客户端到服务器以及代理之间的身份验证安全性[^1]。 #### 2. 配置服务端参数 为了启用SASL/SCRAM,在Kafka Broker上需要修改`server.properties`文件并添加如下设置: ```properties listeners=SASL_PLAINTEXT://:9092 sasl.enabled.mechanisms=SCRAM-SHA-256,SCRAM-SHA-512 security.inter.broker.protocol=SASL_PLAINTEXT listener.name.sasl_plaintext.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required; listener.name.sasl_plaintext.scram-sha-512.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required; ``` 这些属性定义了监听器类型、允许使用的散列算法(SHA-256 或 SHA-512),以及内部代理间通讯所采用的身份验证方法。 #### 3. 创建用户凭证 接下来要创建用于连接Kafka的用户名及其对应的密码哈希值。这可以通过执行Zookeeper命令完成: ```bash bin/kafka-configs.sh --zookeeper localhost:2181 \ --alter --add-config 'SCRAM-SHA-256=[password=<your_password>],SCRAM-SHA-512=[password=<your_password>]' \ --entity-type users --entity-name your_username ``` 上述脚本会向指定名称的用户添加两种不同强度级别的SCRAM密钥。 #### 4. 设置客户端配置 对于Windows 11环境下的Kafka客户端而言,则需编辑位于`\kafka2.12.3.8.0\config\client.properties`路径下相应的配置文件,并加入必要的选项以支持SASL/SCRAM认证模式[^2]: ```properties bootstrap.servers=localhost:9092 security.protocol=SASL_PLAINTEXT sasl.mechanism=SCRAM-SHA-256 sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="your_username" password="<your_password>"; ``` 这里指定了引导服务器地址、安全协议种类、具体选用哪种散列函数作为协商机制,还有最重要的JAAS登录模块配置字符串,它包含了实际参与鉴权过程中的账号信息。 #### 5. 测试连接 最后一步就是尝试发送消息测试整个流程是否正常工作。如果一切顺利的话,应该能够成功建立带有SASL/SCRAM保护措施的数据传输通道。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值