一、开启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节点而不是集群的话或报错
报错截图
解决方式 使用集群连接地址
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’