Kafka SCRAM和PLAIN实战

Kafka SCRAM和PLAIN实战目前 KafkaACL 支持多种权限认证 今天笔者给大家介绍一下 SCRAM 和 PLAIN 的权限认证 验证环境如下 JDK 1 8Kafka 2 3 0KafkaEagle 1 3 8

   

目前Kafka ACL支持多种权限认证,今天笔者给大家介绍一下SCRAM和PLAIN的权限认证。验证环境如下:

  • JDK:

    1.8

  • Kafka:

    2.3.0

  • Kafka Eagle:

    1.3.8

2.1 PLAIN认证

首先,在$KAFAK_HOME/config目录新建一个文本文件,名为kafka_server_plain_jaas.conf,配置内容如下:

KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret" user_admin="admin-secret" user_ke="ke"; }; 

接着,将脚本文件kafka-server-start.sh重命名为kafka-server-plain-start.sh,并修改最后一行的内容为:

# 添加鉴权文件 
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=$base_dir/../config/kafka_server_plain_jaas.conf kafka.Kafka "$@" 

然后,复制server.properties文件并重命名为plain.properties,接着修改服务端配置文件plain.properties,内容如下:

# Protocol listeners=SASL_PLAINTEXT://127.0.0.1:9092 security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=PLAIN sasl.enabled.mechanisms=PLAIN # ACL allow.everyone.if.no.acl.found=false super.users=User:admin authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer 

最后,创建客户端用户认证文件,kafka_client_plain_jaas.conf内容如下:

KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule required username="ke" password="ke"; }; 

2.2 启动PLAIN认证集群

2.2.1 启动Zookeeper

# Zookeeper的配置比较简单,这里不多做介绍 
zkServer.sh start 

2.2.2 启动Kafka集群

# 进入到Kafka安装bin目录 
./kafka-server-plain-start.sh ../config/plain.properties & 

2.2.3 创建Topic

./kafka-topics.sh --create --zookeeper 127.0.0.1:2181/plain --replication-factor 1 --partitions 3 --topic test_plain 

2.2.4 添加读写权限

# 添加读权限 ./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/plain --add --allow-principal User:ke --operation Read --topic test_plain # 添加写权限 ./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/plain --add --allow-principal User:ke --operation Write --topic test_plain # 添加消费者组权限 ./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/plain --add --allow-principal User:ke --operation Read --group g_plain_test # 查看权限列表 ./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/plain --list 

2.2.5 执行结果

Kafka SCRAM和PLAIN实战

2.3 SCRAM认证

PLAIN认证有个问题,就是不能动态新增用户,每次添加用户后,需要重启正在运行的Kafka集群才能生效。为此,在生产环境,这种认证方式不符合实际业务场景。而SCRAM不一样,使用SCRAM认证,可以动态新增用户,添加用户后,可以不用重启正在运行的Kafka集群即可进行鉴权。

新增kafka_server_scram_jaas.conf,配置内容如下:

 KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-secret"; }; 

接着,将脚本文件kafka-server-start.sh重命名为kafka-server-scram-start.sh,并修改最后一行的内容为:

# 添加鉴权文件 
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=$base_dir/../config/kafka_server_scram_jaas.conf kafka.Kafka "$@" 

然后在$KAFKA_HOME/config目录中,复制server.properties文件并重命名为scram.properties,接着修改服务端配置文件scram.properties,内容如下:

# Protocol listeners=SASL_PLAINTEXT://dn1:9092 security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256 sasl.enabled.mechanisms=SCRAM-SHA-256 # ACL allow.everyone.if.no.acl.found=false super.users=User:admin authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer 

2.3.1 启动Zookeeper

# Zookeeper的配置比较简单,这里不多做介绍 
zkServer.sh start 

2.3.2 添加管理员权限和普通用户

# 添加管理员 
./kafka-configs.sh --zookeeper 127.0.0.1:2181/scram --alter --add-config 'SCRAM-SHA-256=[password=admin-secret],SCRAM-SHA-512=[password=admin-secret]' --entity-type users --entity-name admin 
# 添加普通用户(ke) 
./kafka-configs.sh --zookeeper 127.0.0.1:2181/scram --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=ke],SCRAM-SHA-512=[password=ke]' --entity-type users --entity-name ke 

2.3.3 启动SCRAM认证集群

./kafka-server-scram-start.sh ../config/scram.properties & 

2.3.4 创建Topic

./kafka-topics.sh --create --zookeeper 127.0.0.1:2181/scram --replication-factor 1 --partitions 3 --topic test_scram 

2.3.5 添加权限

# 添加读权限 
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/scram --add --allow-principal User:ke --operation Read --topic test_scram 
# 添加写权限 
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/scram --add --allow-principal User:ke --operation Write --topic test_scram 
# 添加消费者组权限 
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/scram --add --allow-principal User:ke --operation Read --group g_scram_test 
# 查看权限列表 
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/scram --list 

2.3.6 执行结果

Kafka SCRAM和PLAIN实战Kafka权限级别包含Topic、Group、Cluster、TransactionalId,每个维度涉及的权限内容如下:

Resource Operations
Topic Read,Write,Describe,Delete,DescribeConfigs,AlterConfigs,All
Group Read,Describe,All
Cluster Create,ClusterAction,DescribeConfigs,AlterConfigs,IdempotentWrite,Alter,Describe,All
TransactionalId Describe,Write,All

例如,统计Topic的Capacity大小时,如果抛出异常“Cluster authorization failed”,这是由于没有开启Cluster级别的Describe权限,执行如下命令即可:

./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/scram --add --allow-principal User:ke --operation Describe --cluster 

那么如何使用Kafka Eagle来集成有SCRAM认证的Kafka集群,进行监控呢?访问http://www.kafka-eagle.org/,下载安装包,解压并配置如下内容:

# 这里对启动一个拥有SCRAM认证的Kafka集群(别名为cluster1)进行配置 cluster1.kafka.eagle.sasl.enable=true cluster1.kafka.eagle.sasl.protocol=SASL_PLAINTEXT cluster1.kafka.eagle.sasl.mechanism=SCRAM-SHA-256 cluster1.kafka.eagle.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="ke" password="ke"; # 这里ClientId如果不需要,可以不用配置 cluster1.kafka.eagle.sasl.client.id= 

然后,执行ke.sh start进行启动Kafka Eagle监控系统。

4.1 Topic预览

Kafka SCRAM和PLAIN实战

4.2 使用KSQL查询Topic

select * from "test_scram" where "partition" in (0) limit 1 

执行结果如下:

Kafka SCRAM和PLAIN实战生产环境中,用户可能随着业务需要,增加或者删除,此时动态控制用户时很有必要的。而且,生产环境Kafka集群不可能随随便便重启,因此采用SCRAM来进行Kafka鉴权非常适合。

Kafka SCRAM和PLAIN实战

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231918.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 区分clientHeight、scrollHeight、offsetHeight

    区分clientHeight、scrollHeight、offsetHeight区分clientHeight、scrollHeight、offsetHeightclientHeight:元素的可见高度scrollHeight:元素的整体高度offsetHeight:元素的高度参考文献:[1]搞清clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop[2]js中offsetHe…

    2022年7月23日
    10
  • 转:js 将json字符串转换为json对象的方法解析「建议收藏」

    转:js 将json字符串转换为json对象的方法解析「建议收藏」例如:JSON字符串:varstr1=‘{“name”:“cxh”,“sex”:“man”}’;JSON对象:varstr2={“name”:“cxh”,“sex”:“man”};一、JSON字符串转换为JSON对象要使用上面的str1,必须使用下面的方法先转化为JSON对象://由JSON字符串转换为JSON对象varobj=eval(’(’+str+‘)’);或者varobj=str.parseJSON();//由JSON字符串转

    2022年9月28日
    5
  • ROS中启动超声波雷达节点「建议收藏」

    ROS中启动超声波雷达节点「建议收藏」超声波雷达型号为KS136,KS136使用I2C接口与主机通信,自动响应主机的I2C控制指令。指令为8位数据,指令发送流程如下,先接收I2C控制指令,寄存器2接收控制指令,选择超声波探头号(因为主控板接12个收发一体式防水探头,每个探头独立工作,每个探头占据8位地址,分别对应8种不同的数据收发方式),流程图如下所示:超声波与主控之间通过串口通信代码如下: r…

    2025年9月7日
    7
  • redis分布式锁的应用场景有哪些_redis setnx 分布式锁

    redis分布式锁的应用场景有哪些_redis setnx 分布式锁“分布式锁”是用来解决分布式应用中“并发冲突”的一种常用手段,实现方式一般有基于zookeeper及基于redis二种。具体到业务场景中,我们要考虑二种情况:一、抢不到锁的请求,允许丢弃(即:忽略)比如:一些不是很重要的场景,比如“监控数据持续上报”,某一篇文章的“已读/未读”标识位更新,对于同一个id,如果并发的请求同时到达,只要有一个请求处理成功,就算成功。用活动图表示如下:二、并发请求,不论哪一条都必须要处理的场景(即:不允许丢数据)比如:一个订单,客户正在前台修改地址,管理员在后台同时修

    2025年10月8日
    3
  • 【算法】java 实现数组的反转

    【算法】java 实现数组的反转数组的反转原理跟冒泡排序有点像,都是通过交换位置,只不过数组的反转是交换第一个和最后一个的位置,第二个和倒数第二个的位置,冒泡排序是交互相邻两个的位置.下面看一下具体的代码实现packagetest;/***数组的反转*/publicclassTestDemo{publicstaticvoidmain(String[]args){…

    2022年5月27日
    43
  • 程序设计基础知识点思维导图_程序设计基础思维导图

    程序设计基础知识点思维导图_程序设计基础思维导图 

    2022年8月20日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号