目录

开启SASL

控制台配置用户

ACL授权

Python客户端访问

ACL常用命令


Kafka系列:

kafka 2.4.1单机版部署及使用

kafka监控系统kafka eagle安装使用

滴滴开源的kafka-manager编译及部署使用

kafka管理监控系统 CMAK(yahoo的kafka-manager)部署及使用

Kafka系列(一)、2.6.0版本kafka集群搭建

Kafka系列(二)、架构原理及存储机制

Kafka系列(三)、生产者分区策略、ISR、ACK机制、一致性语义

Kafka系列(四)、消费者策略、Rebalance机制、Offset存储机制


本篇来讲解如何给kafka集群开启SASL安全认证以及配置ACL权限,还是之前搭建的那个kafka2.6集群。

本文主要内容:

  • wyk01,wyk02,wyk03 kafka集群配置SASL认证;
  • wyk01的消费者和生产者客户端配置用户并验证ACL;
  • 利用其它客户端(Python)访问开启了SASL的kafka集群;

开启SASL

在 wyk01 & wyk02 & wyk03 机器上执行下面的步骤:

(1)、配置kafka软连接和环境变量 :

# 创建软连接
ln -s -f /opt/app/kafka_2.12-2.6.0 /opt/app/kafka# 配置环境变量
vim /etc/profile
# 添加下面的内容
export KAFKA_HOME=/opt/app/kafka# 刷新环境变量
source /etc/profile

(2)、将kafka集群服务关闭:

$KAFKA_HOME/bin/kafka-server-stop.sh

(3)、修改kafka的server.properties 配置文件添加SASL认证,修改listeners中的ip为对应机器的:

cd $KAFKA_HOME/config
vim server.properties
# 添加下面的内容
#--------------------------------------------------
# 配置ACL入口类
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer# SASL_PLAINTEXT
#这里的listener中的wyk01 在三台机器上换成每台机器对应的hostname/ip
listeners=SASL_PLAINTEXT://wyk01:9092
security.inter.broker.protocol= SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN# 设置admin超级用户
super.users=User:admin#设置为true,ACL机制为黑名单机制,只有黑名单中的用户无法访问
#默认为false,ACL机制为白名单机制,只有白名单中的用户可以访问
allow.everyone.if.no.acl.found=false
#--------------------------------------------------

(4)、新增 kafka_server_jaas.conf 配置文件添加用户,注意最后的两个分号。

前三行是配置管理员账户(该账户与上面server.properties中配置的super.users一样),后面的user_wyk_reader="wyk_reader_pwd"表示添加一个用户名为wyk_reader对应的密码为wyk_reader_pwd。即 user_用户名="该用户的密码"。之后配置ACL的时候需要用到这里配置的用户。

vim kafka_server_jaas.conf
#添加下面的内容
#--------------------------------------------------
KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="admin"password="admin"user_admin="admin"user_wyk_reader="wyk_reader_pwd"user_wyk_writer="wyk_writer_pwd"user_no_acl="no_acl_pwd";};

(5)、修改kafka-server-start.sh文件,将刚刚配置的用户列表添加到kafka启动脚本内:

vim ../bin/kafka-server-start.sh
#修改最后一行,改成下面的内容
#-------------------------------------------
#exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@"
source /etc/profile
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=$KAFKA_HOME/config/kafka_server_jaas.conf  kafka.Kafka "$@"

至此,kafka集群已完成了开启SASL安全认证并添加了四个用户admin、wyk_writer、wyk_reader 、no_acl。

(6)、重启kafka集群

$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

控制台客户端配置认证文件

集群虽然开启了SASL认证,接下来我们可以在控制台使用consumer和producer命令行测试是否有权限,这个是客户端级别的测试,因此只需要随便找个kafka客户端就可以用,不需要在每台kafka broker机器上修改。如果不想要在控制台测试可以跳过直接看后面的对比以及python客户端访问。

要在控制台使用命令行需要先配置sasl用户,步骤如下:

生产者:

(1)、新增配置文件wyk_writer_jaas.conf,这里的用户名密码必须和服务器端配置的一样,我们的客户端是拿着这个认证信息去和kafka 的服务端做校验,如果不匹配就等同于登录失败。

vim wyk_writer_jaas.conf
#添加下面的内容
#-------------------------------
KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="wyk_writer"password="wyk_writer_pwd";};

(2)、修改生产者启动脚本,在启动生产者客户端时会去加载该认证文件。

vim ../bin/kafka-console-producer.sh
#修改最后一行,改成下面的内容
#-------------------------------------------
#exec $(dirname $0)/kafka-run-class.sh  kafka.tools.ConsoleProducer "$@"
source /etc/profile
exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=$KAFKA_HOME/config/wyk_writer_jaas.conf  kafka.tools.ConsoleProducer "$@"

(3)、修改 producer.properties 添加SASL认证。

vim producer.properties
#添加下面的内容
#-------------------------------------------
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN

消费者:

(1)、新增配置文件wyk_reader_jaas.conf,这里的用户名密码必须和服务器端配置的一样,我们的客户端是拿着这个认证信息去和kafka 的服务端做校验,如果不匹配就等同于登录失败。

vim wyk_reader_jaas.conf
#添加下面的内容
#-------------------------------
KafkaClient {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="wyk_reader"password="wyk_reader_pwd";
};

(2)、修改消费者启动脚本,在启动消费者客户端时会去加载该认证文件。

vim ../bin/kafka-console-consumer.sh
#修改最后一行,改成下面的内容
#-------------------------------------------
#exec $(dirname $0)/kafka-run-class.sh kafka.tools.ConsoleConsumer "$@"
source /etc/profile
exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=$KAFKA_HOME/config/wyk_reader_jaas.conf   kafka.tools.ConsoleConsumer "$@"

(3)、修改 consumer.properties 添加SASL认证。需注意,这个配置文件中有一个消费者组group.id=test-consumer-group,待会在给控制台客户端授权消费者权限时还需要指定这个消费者组。

vim consumer.properties
#添加下面的内容
#-------------------------------------------
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN

ACL授权及验证

我们已经开启了SASL,并给控制台客户端配置了生产者和消费者的认证文件,下面我们来测试授权之后和未授权用户的区别。

为了起到对比效果,我们先新增一个认证文件用户为no_acl:

(1)、新增配置文件no_acl_jaas.conf

vim no_acl_jaas.conf
#添加下面的内容
#-------------------------------
KafkaClient {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="no_acl"password="no_acl_pwd";
};

(2)、使用下面的命令行授权用户 wyk_reader 对主题csdn01 的读权限,授权用户 wyk_writer 对主题csdn01 的写权限,no_acl用户不设置任何权限用做对比。

# 给用户wyk_writer 添加csdn01主题的 生产者权限
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=wyk01:2181,wyk02:2181,wyk03:2181 --add --allow-principal User:wyk_writer --operation Write --topic csdn01# 给用户wyk_reader 添加csdn01主题的 消费者权限
#需要注意这里消费者还需要给消费者组配置权限,消费者组名称要和consumer.properties中配置的group.id一致
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=wyk01:2181,wyk02:2181,wyk03:2181 --add --allow-principal User:wyk_reader --operation Read --topic csdn01 --group test-consumer-group

(3)、验证ACL权限:

(3.1)、当使用no_acl用户作为生产者时可以看到启动时会报错:Not authorized to access topics:[csdn01]。而使用拥有csdn01主题的生产者权限的用户wyk_writer启动时可以正常的使用:

(3.2)、 当使用no_acl用户作为消费者时可以看到启动时会报错:Not authorized to access topics:[csdn01]。而使用拥有csdn01主题的消费者权限的用户wyk_reader启动时可以正常的消费数据:

(3.3)、将生产者的sasl认证文件里的密码 改为错误密码后,启动时会报错invalid username or password:

Python客户端访问

接下来我们用python客户端访问开启了sasl认证的kafka,首先我们在kafka_server_jaas.conf 配置文件中添加一个用户python_wyk (需要重启kafka集群),并授权对主题csdn01的读写权限用作python客户端的测试:

生产者脚本

from kafka import KafkaProducer
import json
producer = KafkaProducer(bootstrap_servers=['wyk01:9092','wyk02:9092','wyk03:9092'],security_protocol="SASL_PLAINTEXT",sasl_mechanism="PLAIN",sasl_plain_username="python_wyk",sasl_plain_password="python_wyk_pwd"
)producer.send('csdn01', json.dumps({"id":"1","name":"wyk1","company":"csdn1"}).encode('utf-8'))
producer.send('csdn01', json.dumps({"id":"2","name":"wyk2","company":"csdn2"}).encode('utf-8'))
producer.send('csdn01', json.dumps({"id":"3","name":"wyk3","company":"csdn3"}).encode('utf-8'))
producer.flush()

消费者脚本: 

from kafka import KafkaConsumer
from kafka.structs import TopicPartition
import jsonconsumer = KafkaConsumer('csdn01',bootstrap_servers=['wyk01:9092','wyk02:9092','wyk03:9092'],group_id='test-consumer-group',auto_offset_reset='latest'   ,enable_auto_commit=False,security_protocol="SASL_PLAINTEXT",sasl_mechanism="PLAIN",sasl_plain_username="python_wyk",sasl_plain_password="python_wyk_pwd"
)
for msg in consumer:print(msg)

ACL常用命令

查看权限列表:

#查看所有权限列表
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=wyk01:2181 --list#查看指定topic的权限列表
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=wyk01:2181 --list --topic csdn01

添加读写权限:

# 给用户wyk_writer 添加csdn01主题的 生产者权限
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=wyk01:2181,wyk02:2181,wyk03:2181 --add --allow-principal User:wyk_writer --operation Write --topic csdn01# 给用户wyk_reader 添加csdn01主题的 消费者权限
#需要注意这里消费者还需要给消费者组配置权限,消费者组名称要和consumer.properties中配置的group.id一致
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=wyk01:2181,wyk02:2181,wyk03:2181 --add --allow-principal User:wyk_reader --operation Read --topic csdn01 --group test-consumer-group

移除权限:

#移除用户wyk_all 对csdn01的读写权限
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=wyk01:2181 --remove --allow-principal User:wyk_all --operation Read --operation Write --topic csdn01

添加黑名单:

# 禁止来自ip:192.168.145.100的用户 wyk_no对csdn01的消费权限,允许其他所有用户的消费权限
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=wyk01:2181 --add --allow-principal User:* --allow-host * --deny-principal User:wyk_no --deny-host 192.168.145.100 --operation Read --topic csdn01

添加白名单:

#添加用户wyk_yes在ip192.168.145.100 对csdn01的读写权限
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=wyk01:2181 --add --allow-principal User:wyk_yes --allow-host 192.168.145.100 --operation Read --operation Write --topic csdn01

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

Kafka系列(五)、开启SASL安全认证以及配置ACL权限控制相关推荐

  1. Kafka 开启 SASL/PLAINTEXT 认证及 ACL

    Linux 安装 Kafka 并开启 SASL/PLAINTEXT 认证 前言 一.环境准备 1.组件版本 2.下载文件 3.上传文件 二.安装 Zookeeper(单节点) 三.安装 Kafka(单 ...

  2. kafka集群开启sasl认证

    kafka集群开启sasl认证 sasl认证 sasl 是扩展C/S模式验证能力的一种认证机制.它可以规范客户端和服务端传输应答和传输内容编码,简而言之sasl决定了认证的规则,即客户端如何存储身份证 ...

  3. kafak集群部署配置,开启SASL_PLAINTEXT认证以及acl权限控制

    SASL_PLAINTEXT认证 本人认为就是consumer连接broker开启了用户名,密码认证 acl权限控制 就是指针对用户 配置拥有哪些操作权限,如 topic的读,写,group的读,to ...

  4. Kafka集群搭建及SASL/SCRAM,ACL权限控制

    Kafka集群搭建及SASL/SCRAM,ACL权限控制 环境 部署zookeeper集群及安全认证 部署kafka集群及安全认证 环境 系统版本:Centos7.4 kafka版本:kafka_2. ...

  5. kafka带kerberos和sasl安全认证:命令行消费指定topic数据

    1.什么是kerberos? Kerberos(/ˈkərbərəs/)是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证.这个词又指麻省理工学院为这个协议开发的一套计算 ...

  6. Kafka系列(七)、Kafka套件 Confluent Platform 单机/集群部署

    目录 简介 单机部署 集群部署 尾巴 Kafka系列: kafka 2.4.1单机版部署及使用 kafka监控系统kafka eagle安装使用 滴滴开源的kafka-manager编译及部署使用 k ...

  7. Kafka系列(六)、Kafka开发套件kafka lenses 安装及使用(带WebUI)

    目录 介绍 安装 使用 Kafka系列: kafka 2.4.1单机版部署及使用 kafka监控系统kafka eagle安装使用 滴滴开源的kafka-manager编译及部署使用 kafka管理监 ...

  8. Kafka SASL 安全认证

    服务端 在服务器节点配置认证文件: 文件路径:kafka/config/kafka_server_jaas.conf 文件内容: KafkaServer {org.apache.kafka.commo ...

  9. kafka sasl java_Kafka SASL 安全认证

    java client 中添加 SASL 设置信息: Java client consumer properties配置.png 注意 sasl.jaas.config 配置中的分号必不可少. pac ...

最新文章

  1. 喀什市2021年高考成绩查询,2021年新疆高考查分网站查分网址:http://www.xjzk.gov.cn/...
  2. qt 串口粘包_Qt Socket 传输图片——图像拆包、组包、粘包处理
  3. 2019Java常见面试下
  4. android 让item满屏,Android的全屏活动?
  5. Android中Activity和task,活动亲和力,启动模式,活动状态以及生命周期,激活钝化
  6. 为什么REST如此重要
  7. C语言 二维数组做函数参数的几种情况
  8. python:就喜欢看你看不惯我又干不掉我的样子
  9. SQL 注入竟然把我们的系统搞挂了
  10. 常见的几种网络故障案例分析与解决
  11. 使用Redis单实例实现分布式锁
  12. 数字孪生新型智慧城市一网统管云平台建设方案(44页PPT)
  13. Pygame详解(九):mixer 模块
  14. html怎么把图片的图层,PS制作-把图片添加到图层的4种方法
  15. excel中以文本形式保存长数字
  16. **2021,靠谱的网赚项目,遇上靠谱的你,谁说赚钱不轻松**
  17. c 语言中并查集的用法,并查集基本介绍
  18. 判断两个圆柱体是否相交
  19. 数据分析毕业设计 金融数据分析与可视化系统 - python 大数据
  20. 六时出行 App iOS隐私政策

热门文章

  1. Linux下一代防火墙bpfilter是什么?让我演示给你看
  2. Scrapy ip代理池
  3. 实战演练 Navicat 中英文模式切换
  4. wps中ctrl+v粘贴快捷键失灵
  5. Nginx解决惊群效应
  6. CC1312R低功耗高集成度M4F内核Sub-1G收发芯片
  7. PHP浮点数的一个常见问题的解答
  8. 备战蓝桥杯-双指针、BFS
  9. Android-SQLite数据库实例,Android的Io模型你了解多少
  10. 常用Petri网模拟软件工具简介