Kafka系列(五)、开启SASL安全认证以及配置ACL权限控制
目录
开启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权限控制相关推荐
- Kafka 开启 SASL/PLAINTEXT 认证及 ACL
Linux 安装 Kafka 并开启 SASL/PLAINTEXT 认证 前言 一.环境准备 1.组件版本 2.下载文件 3.上传文件 二.安装 Zookeeper(单节点) 三.安装 Kafka(单 ...
- kafka集群开启sasl认证
kafka集群开启sasl认证 sasl认证 sasl 是扩展C/S模式验证能力的一种认证机制.它可以规范客户端和服务端传输应答和传输内容编码,简而言之sasl决定了认证的规则,即客户端如何存储身份证 ...
- kafak集群部署配置,开启SASL_PLAINTEXT认证以及acl权限控制
SASL_PLAINTEXT认证 本人认为就是consumer连接broker开启了用户名,密码认证 acl权限控制 就是指针对用户 配置拥有哪些操作权限,如 topic的读,写,group的读,to ...
- Kafka集群搭建及SASL/SCRAM,ACL权限控制
Kafka集群搭建及SASL/SCRAM,ACL权限控制 环境 部署zookeeper集群及安全认证 部署kafka集群及安全认证 环境 系统版本:Centos7.4 kafka版本:kafka_2. ...
- kafka带kerberos和sasl安全认证:命令行消费指定topic数据
1.什么是kerberos? Kerberos(/ˈkərbərəs/)是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证.这个词又指麻省理工学院为这个协议开发的一套计算 ...
- Kafka系列(七)、Kafka套件 Confluent Platform 单机/集群部署
目录 简介 单机部署 集群部署 尾巴 Kafka系列: kafka 2.4.1单机版部署及使用 kafka监控系统kafka eagle安装使用 滴滴开源的kafka-manager编译及部署使用 k ...
- Kafka系列(六)、Kafka开发套件kafka lenses 安装及使用(带WebUI)
目录 介绍 安装 使用 Kafka系列: kafka 2.4.1单机版部署及使用 kafka监控系统kafka eagle安装使用 滴滴开源的kafka-manager编译及部署使用 kafka管理监 ...
- Kafka SASL 安全认证
服务端 在服务器节点配置认证文件: 文件路径:kafka/config/kafka_server_jaas.conf 文件内容: KafkaServer {org.apache.kafka.commo ...
- kafka sasl java_Kafka SASL 安全认证
java client 中添加 SASL 设置信息: Java client consumer properties配置.png 注意 sasl.jaas.config 配置中的分号必不可少. pac ...
最新文章
- 喀什市2021年高考成绩查询,2021年新疆高考查分网站查分网址:http://www.xjzk.gov.cn/...
- qt 串口粘包_Qt Socket 传输图片——图像拆包、组包、粘包处理
- 2019Java常见面试下
- android 让item满屏,Android的全屏活动?
- Android中Activity和task,活动亲和力,启动模式,活动状态以及生命周期,激活钝化
- 为什么REST如此重要
- C语言 二维数组做函数参数的几种情况
- python:就喜欢看你看不惯我又干不掉我的样子
- SQL 注入竟然把我们的系统搞挂了
- 常见的几种网络故障案例分析与解决
- 使用Redis单实例实现分布式锁
- 数字孪生新型智慧城市一网统管云平台建设方案(44页PPT)
- Pygame详解(九):mixer 模块
- html怎么把图片的图层,PS制作-把图片添加到图层的4种方法
- excel中以文本形式保存长数字
- **2021,靠谱的网赚项目,遇上靠谱的你,谁说赚钱不轻松**
- c 语言中并查集的用法,并查集基本介绍
- 判断两个圆柱体是否相交
- 数据分析毕业设计 金融数据分析与可视化系统 - python 大数据
- 六时出行 App iOS隐私政策