zookeeper、kafka、kafka tool与spring boot之间访问时的身份验证配置
一. zookeeper配置
1. 非kafka自带的zookeeper
安装目录/conf/zoo.cfg添加以下配置
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
同目录下新建文件zk_server_jaas.conf
Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="admin"
password="passwd1"
user_admin="passwd1";
user_kafka="passwd2"
};
这里的user_指的是配置访问用户及其密码。
然后修改启动脚本
win 修改zkServer.cmd,在启动命令行call %JAVA%···后增加启动参数"-Djava.security.auth.login.config=%~dp0…\conf\zk_server_jaas.conf"
linux修改zkServer.sh,在启动命令行nohup “$JAVA” $ZOO_DATADIR_AUTOCREATE “····后增加启动参数”-Djava.security.auth.login.config=/zookeeper安装地址/conf/zk_server_jaas.conf"
2. kafka自带的zookeeper配置
修改kafka安装目录/config/zookeeper.properties,增加
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
在同目录下新增文件kafka_zookeeper_jaas.conf
Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="admin"
password="passwd1"
user_admin="passwd1";
};
修改启动脚本。脚本都在bin目录下。
win修改zookeeper-server-start.bat,将启动参数加在KAFKA_HEAP_OPTS后面,例如:
set KAFKA_HEAP_OPTS=-Xmx512M -Xms512M -Djava.security.auth.login.config=file:%~dp0../../config/kafka_zookeeper_jaas.conf
linux修改zookeeper-server-start.sh
export KAFKA_HEAP_OPTS="-Xmx512M -Xms512M -Djava.security.auth.login.config=file:/kafka安装目录/config/kafka_zookeeper_jaas.conf"
二. kafka配置
修改kafka安装目录/config/server.properties,增加
#身份安装配置
listeners=SASL_PLAINTEXT://127.0.0.1:9092
#advertised.listeners=SASL_PLAINTEXT://127.0.0.1:9092
#使用的认证协议
security.inter.broker.protocol=SASL_PLAINTEXT
#SASL机制
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
# 完成身份验证的类
#authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
# 如果没有找到ACL(访问控制列表)配置,则允许任何操作
allow.everyone.if.no.acl.found=true
#超级管理员权限用户
super.users=User:admin
同目录下新建kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="passwd1"
user_admin="passwd1"
user_producer="passwd2"
user_consumer="passwd3";
};
Client {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="admin"
password="上面配置的zookeeper访问密码";
};
这边的user_也是一样的,后面跟的是设置的用户名和其密码。
修改启动脚本。bin目录下。
win启动脚本kafka-server-start.bat:
set KAFKA_HEAP_OPTS=-Xmx512M -Xms512M -Djava.security.auth.login.config=file:%~dp0../../config/kafka_server_jaas.conf
linux启动脚本kafka-server-start.sh:
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=file:/kafka安装目录/config/kafka_server_jaas.conf"
启动:kafka-server-start.bat …\ …\config\server.properties
三. kafka tool 配置
要注意是否在hosts配置ip和host的映射。建议直接用ip。
org.apache.kafka.common.security.plain.PlainLoginModule required username=“admin” password=“passwd”;
四. spring boot配置
yml文件里的配置:
spring:
kafka:
bootstrap-servers: localhost:9092
template:
default-topic: topic
# 生产者
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
# 消费者
consumer:
group-id: foo1
auto-offset-reset: earliest
enable-auto-commit: true
auto-commit-interval: 1000
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
properties:
security:
protocol: SASL_PLAINTEXT
sasl:
mechanism: PLAIN
jaas:
config: 'org.apache.kafka.common.security.plain.PlainLoginModule required username="username" password="password";'
注: 以上例子kafka使用的是SASL/PLAIN认证,如果要使用SASL/SCRAM认证(可配合ACL实现动态创建用户及权限控制),需做以下配置调整。
首先为连接用户,如admin创建 SCRAM 证书
.\kafka-configs.bat --zookeeper 127.0.0.1:2181 --alter --add-config 'SCRAM-SHA-256=[password=PASSWD],SCRAM-SHA-512=[password=PASSWD]' --entity-type users --entity-name admin
查看证书
.\kafka-configs.bat --zookeeper localhost:2181 --describe --entity-type users --entity-name admin
然后修改jaas配置文件,kafka_server_jaas.conf,
org.apache.kafka.common.security.plain.PlainLoginModule
#修改为
org.apache.kafka.common.security.scram.ScramLoginModule
修改server.properties文件
sasl.enabled.mechanisms=PIAIN
sasl.mechanism.inter.broker.protocol=PLAIN
#修改为
sasl.enabled.mechanisms=SCRAM-SHA-256
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
然后关闭所有连接kafka的进程,包括kafka tool,然后按重启kafka。
再用kafka tool连接时,修改连接配置:Advanced->SASL Mechanism 为SCRAM-SHA-256,JAAS Config配置改为org.apache.kafka.common.security.scram.ScramLoginModule required username=“admin” password=“PASSWD”;
同样的,spring boot配置文件中也将spring.kafka.propertites.sasl.mechanism配置项改为SCRAM-SHA-256,将jaas.config改为org.apache.kafka.common.security.scram.ScramLoginModule required username=“admin” password=“PASSWD”;