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

#作者 :张桐瑞

文章目录

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 required
        username="admin"
        password="admin";
};  #kafka用户名密码;
Client {
        org.apache.zookeeper.server.auth.DigestLoginModule required
        username="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" ]; then
  KAFKA_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过滤规则

相关推荐
Blossom.1183 小时前
KWDB创作者计划—深度解析:AIoT时代的分布式多模型数据库新标杆
数据库·分布式·架构·边缘计算·时序数据库·持续部署·ai集成
ybdesire4 小时前
Jinja2模板引擎SSTI漏洞
网络·人工智能·安全·web安全·大模型·漏洞·大模型安全
黑金IT5 小时前
如何在 Electron 应用中安全地进行主进程与渲染器进程通信
服务器·安全·electron
Goldchenn6 小时前
kafka服务端和springboot中使用
spring boot·分布式·kafka
冯诺一没有曼6 小时前
无线网络入侵检测系统实战 | 基于React+Python的可视化安全平台开发详解
前端·安全·react.js
知孤云出岫7 小时前
计算机网络中科大 - 第7章 网络安全(详细解析)-以及案例
计算机网络·安全·web安全
跨境卫士-小汪8 小时前
亚马逊热销变维权?5步搭建跨境产品的安全防火墙
网络·经验分享·安全
java1234_小锋8 小时前
Zookeeper的典型应用场景?
分布式·zookeeper·云原生