Kafka-无认证+SASL/SCRAM
说明: 最早生产环境采用kafka单节点并且没有认证方式,现在考虑到安全问题,需要增加认证。因涉及到的业务系统过多,不容易协调统一变更,所以无认证方式+认证方式并存(SCRAM可以动态增加用户)
测试环境验证
大体步骤
无认证方式启动zk+kafka
创建主题并生产
增加安全端口认证9092无认证9093端口认证
使用无认证9092端口消费/使用认证9093端口消费
实施
无认证方式启动zk+kafka,创建主题并生产数据可参考其他文章
我们直接从增加安全端口配置开始到测试通过
1. 修改config/server.properties文件增加9093端口及如下参数 listeners=PLAINTEXT://:9092,SASL_PLAINTEXT://:9093 security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256 sasl.enabled.mechanisms=SCRAM-SHA-256 allow.everyone.if.no.acl.found=true authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer super.users=User:admin 复制代码
2. 增加如下两个文件(不用文件位置一样,只要引用时注意目录位置即可) root@fitme-System-Product-Name:~/kafka_2.12-2.8.0# cat kafka_client_jaas.conf KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username="fitme" password="123456"; }; root@fitme-System-Product-Name:~/kafka_2.12-2.8.0# cat config/kafka_server_scram_jaas.conf KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-secret"; }; 3.修改kafka启动脚本,增加如下 export KAFKA_OPTS="-Djava.security.auth.login.config=/root/kafka_2.12-2.8.0/config/kafka_server_scram_jaas.conf" 4. 修改消费者/生产者启动脚本,增加如下 export KAFKA_OPTS="-Djava.security.auth.login.config=/root/kafka_2.12-2.8.0/kafka_client_jaas.conf" 5. 增加认证端口后无认证9092会使用ANONYMOUS用户访问数据,我们需要增加权限 bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:ANONYMOUS --operation All --topic=* bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --allow-principal User:ANONYMOUS --producer --topic=* --add bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --allow-principal User:ANONYMOUS --consumer --topic=* --group=* --add 复制代码
6. 增加admin用户及普通用户 bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=admin-secret],SCRAM-SHA-512=[password=admin-secret]' --entity-type users --entity-name admin bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=123456],SCRAM-SHA-512=[password=123456]' --entity-type users --entity-name fitme 7. 修改config/consumer.properties,增加保留如下 bootstrap.servers=localhost:9093 group.id=test-consumer-group security.protocol=SASL_PLAINTEXT sasl.mechanism=SCRAM-SHA-256 复制代码
8. 测试9092端口无认证消费和9093认证消费 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning bin/kafka-console-consumersh --bootstrap-server localhost:9093 --topic test --from-beginning --consumer.config config/consumer.properties 复制代码
生产环境变更
生产环境只需要增加安全端口9093
原有业务系统不受影响,新系统使用9093并推进历史系统更改认证方式
封禁9092端口(线上环境不需要移除,撤销ANONYMOUS用户权限即可
作者:Fitme
链接:https://juejin.cn/post/7017713655860969509