#作者 :张桐瑞
文章目录
- 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 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过滤规则