当前位置: 首页 > news >正文

Kafka安全认证技术:SASL/SCRAM-ACL方案详解

#作者 :张桐瑞

文章目录

  • 1Kafka安全认证技术介绍
  • 2基础设置
  • 3 配置SASL/SCRAM认证
    • 3.1编写server.properties配置
    • 3.2编写kafka.conf密码文件
    • 3.3编写user.properties配置文件
    • 3.4编写kafka-run-class.sh脚本文件
    • 3.5Zk中增加kafka用户
    • 3.6启动kafka进程

1Kafka安全认证技术介绍

Kafka作为一款高吞吐量的分布式消息系统,在数据传输和存储过程中的安全性至关重要。目前,Kafka支持多种认证方式,每种方式都有其独特的特点和适用场景,在生产环境中常见应用的SASL相关认证方式如下:
SSL/TLS认证:基于SSL/TLS加密技术,通过SSL/TLS证书对客户端和服务器进行双向身份验证。在数据传输过程中,利用证书加密通道,确保数据在传输层的安全性和完整性,有效防止数据被窃取或篡改。这种认证方式广泛应用于对数据安全和隐私要求极高的场景,例如金融行业的数据传输。
SASL/PLAIN认证:简单身份验证和授权层应用程序接口(Simple Authentication and Security Layer Application Programming Interface)的PLAIN认证,是一种极为简单的用户名和密码认证方式。其优势在于配置和维护简单,易于在Kafka与其他应用程序之间建立认证机制,适用于对安全性要求相对较低、部署和维护希望简便的场景,如一些小型企业的内部系统。
SASL/SCRAM认证:包括SCRAM-SHA-256、SCRAM-SHA-512等认证方式。该认证过程需要客户端和服务器密切协同完成,涉及到多次交互验证。虽然使用和维护相对复杂,但它具备动态增加用户的显著优势,无需重启Kafka组件服务端即可完成用户的添加,为系统的用户管理提供了极大的灵活性,适合对用户管理灵活性要求较高的企业。
SASL/GSSAPI认证(Kerberos认证):主要适用于大型企业的生产环境,通常与Kerberos协议结合使用。通过集成目录服务(如Active Directory,AD),实现用户身份的统一管理和认证。这种认证机制不仅提供了卓越的安全性,还能为用户带来良好的体验,例如实现单点登录(SSO)功能,方便用户在多个相关系统间无缝切换。
Kafka自带ACL访问控制方式:Kafka提供的ACL(Access Control Lists,访问控制列表)功能,可针对特定的Topic或Topic Partition精细控制用户的访问权限,如读、写、删除等操作权限。通过合理配置ACL,可以有效保障业务数据的安全性,确保敏感数据仅被授权用户访问。
企业在选择认证方式时,需要综合考虑多方面因素。既要确保业务数据的安全性,又要权衡部署后的性能影响和部署复杂度。在实际生产部署过程中,应根据企业的安全政策、网络架构、对系统性能的要求等因素,谨慎选择最适合的认证方式,以确保所选的认证机制与企业的实际需求完美契合。

2基础设置

Zookeeper版本:apache-zookeeper-3.6.3-bin。
Kafka版本:kafka_2.13-3.5.1。

3 配置SASL/SCRAM认证

3.1编写server.properties配置

listeners=SASL_PLAINTEXT://kafkaip:9092
advertised.listeners=SASL_PLAINTEXT://kafkaip:9092
super.users=User:admin
sasl.enabled.mechanisms=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
security.inter.broker.protocol=SASL_PLAINTEXT
authorizer.class.name=kafka.security.authorizer.AclAuthorizer

配置说明:
listeners:指定Kafka服务器监听的地址和协议,这里使用SASL_PLAINTEXT协议,监听在kafkaip:9092地址上。
advertised.listeners:用于告知客户端连接Kafka服务器的地址和协议,确保客户端能够正确连接。
super.users:设置超级用户,这里定义了admin为超级用户,超级用户拥有更高的权限,可进行一些特殊操作。
sasl.enabled.mechanisms:启用SCRAM-SHA-512认证机制,确保Kafka服务器支持该认证方式。
sasl.mechanism.inter.broker.protocol:指定Kafka集群内部节点间通信使用的认证机制为SCRAM-SHA-512。
security.inter.broker.protocol:明确集群内部节点间通信的安全协议为SASL_PLAINTEXT。
authorizer.class.name:配置Kafka的访问控制授权器,这里使用kafka.security.authorizer.AclAuthorizer来实现基于ACL的访问控制。

3.2编写kafka.conf密码文件

KafkaServer {org.apache.kafka.common.security.scram.ScramLoginModule requiredusername="admin"password="admin";
};  #kafka用户名密码;
Client {org.apache.zookeeper.server.auth.DigestLoginModule requiredusername="user1"password="user1";
};  #zookeeper连接;

配置说明:
KafkaServer部分:配置Kafka服务器认证所需的用户名和密码,这里设置用户名为admin,密码为admin,使用org.apache.kafka.common.security.scram.ScramLoginModule模块进行认证。
Client部分:用于配置连接Zookeeper时所需的用户名和密码,设置用户名为user1,密码为user1,使用org.apache.zookeeper.server.auth.DigestLoginModule模块进行认证。

3.3编写user.properties配置文件

properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin";

配置说明:
security.protocol:指定客户端与Kafka服务器通信的安全协议为SASL_PLAINTEXT。
sasl.mechanism:明确使用SCRAM-SHA-512作为认证机制。
sasl.jaas.config:配置JAAS(Java Authentication and Authorization Service)认证所需的参数,包括使用的认证模块、用户名和密码。

3.4编写kafka-run-class.sh脚本文件

if [ -z "$KAFKA_OPTS" ]; thenKAFKA_OPTS="-Djava.security.auth.login.config=/kafka/config/kafka.conf"
Fi
…

配置说明:
在kafka-run-class.sh脚本中,添加上述代码片段。这段代码用于检查KAFKA_OPTS环境变量是否为空,如果为空,则设置KAFKA_OPTS环境变量,指定Kafka服务器启动时使用的JAAS配置文件路径为/tmp/kafka/config/kafka.conf,确保Kafka服务器能够正确加载认证配置。

3.5Zk中增加kafka用户

./kafka/bin/kafka-configs.sh --zookeeper zookeeperip:/kafka --alter --add-config 'SCRAM-SHA-512=[password=admin]' --entity-type users --entity-name admin

命令说明:
上述命令用于在Zookeeper中为Kafka添加用户。通过kafka-configs.sh脚本,连接到指定的Zookeeper服务器,为名为admin的用户添加SCRAM-SHA-512认证方式的密码配置。
启动kafka后可使用kafka命令进行创建用户

./bin/kafka-configs.sh --bootstrap-server kafkaip:9092 --command-config config/user.properties --alter --add-config 'SCRAM-SHA-512=[password=exporter]' --entity-type users --entity-name expoter

命令说明:
在Kafka启动后,利用kafka-configs.sh脚本,通过指定的bootstrap-server,并依据config/user.properties配置文件中的认证信息,为名为exporter的用户添加SCRAM-SHA-512认证方式的密码配置。

3.6启动kafka进程

./bin/kafka-server-start.sh ./config/server.properties
4Kafka-exporter配置监控采集
Kafka-exporter是一个用于采集Kafka监控指标的工具,为了实现对所有topic的监控数据采集,需要为其配置具有describe所有topic权限的用户。
./kafka_exporter --kafka.server=kafkaip:9092 --sasl.enabled --sasl.mechanism=SCRAM-SHA-512 --sasl.username=exporter --sasl.password=exporter --topic.filter=topicname
–kafka.server:指定Kafka服务器的地址和端口
–sasl.enabled:启用SASL认证
–sasl.mechanism:设置认证机制为SCRAM-SHA-512
–sasl.username和–sasl.password:指定用于认证的用户名和密码
–topic.filter:设置监控的topic过滤规则

相关文章:

  • 【KWDB 创作者计划】_算法篇---Stockwell变换
  • Kubernetes Pod 调度策略:从基础到进阶
  • 每天学一个 Linux 命令(22):pwd
  • 有哪些好用的仓库管理系统
  • [工具]Java xml 转 Json
  • 招商信诺原点安全:一体化数据安全管理解决方案荣获“鑫智奖”!
  • ios精灵脚本辅助软件,有根和无根roothide越狱区别
  • 【技术派后端篇】技术派通用敏感词替换:原理、实现与应用
  • Benewake(北醒) TF-NOVA 在通过TTL-USB转接板更改配置教程
  • 手撕数据结构算法OJ——栈和队列
  • 数据结构|基数排序及八个排序总结
  • 1187. 【动态规划】竞赛总分
  • IDEA MyBatisCodeHelper Pro插件高版本解密
  • Linux网络编程——五种I/O模式
  • STM32F429 的时钟系统,从AHB到APB1和APB2再到外设
  • JavaScript 核心特性完全指南
  • STL常用算法
  • 分布式锁下的Redisson:解锁新姿势,与Curator的华山论剑
  • 插入排序和希尔排序
  • Java中的函数式编程详解
  • 体坛联播|中国U16女足击败墨西哥,王星昊首获世界冠军
  • 平安银行一季度净赚超140亿元降5.6%,营收降13.1%
  • 云南:近两千亩拍得土地因规划变更不得开发,政府要求转型、企业无力为继
  • 牛市早报|李强:在一些关键的时间窗口,推动各方面政策措施早出手、快出手
  • 经济日报:扩大内需与扩大开放并行不悖
  • 创纪录!南向资金今年净流入已超6000亿港元,港股缘何被爆买?