Kafka-无认证+SASL/SCRAM

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

说明: 最早生产环境采用kafka单节点并且没有认证方式,现在考虑到安全问题,需要增加认证。因涉及到的业务系统过多,不容易协调统一变更,所以无认证方式+认证方式并存(SCRAM可以动态增加用户)

测试环境验证

大体步骤

  1. 无认证方式启动zk+kafka
  2. 创建主题并生产
  3. 增加安全端口认证9092无认证9093端口认证
  4. 使用无认证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

复制代码

生产环境变更

  1. 生产环境只需要增加安全端口9093
  2. 原有业务系统不受影响,新系统使用9093并推进历史系统更改认证方式
  3. 封禁9092端口(线上环境不需要移除,撤销ANONYMOUS用户权限即可