kafka在centos上如何进行安全设置
导读:一、基础环境准备 在CentOS上配置Kafka安全前,需完成以下准备工作: 安装Java环境:Kafka依赖Java 11及以上版本,通过yum install -y java-11-openjdk-devel安装并验证(java -v...
一、基础环境准备
在CentOS上配置Kafka安全前,需完成以下准备工作:
- 安装Java环境:Kafka依赖Java 11及以上版本,通过
yum install -y java-11-openjdk-devel安装并验证(java -version)。 - 下载Kafka二进制包:从Apache官网下载稳定版本(如3.6.0),解压至指定目录(如
/usr/local/kafka)。 - 启动ZooKeeper:Kafka依赖ZooKeeper管理元数据,通过
bin/zookeeper-server-start.sh config/zookeeper.properties启动。
二、认证配置(防止非法访问)
1. SASL/SCRAM认证(推荐)
SCRAM(Salted Challenge Response Authentication Mechanism)通过动态盐值和迭代哈希增强密码安全性,适合大多数生产场景。
- 创建用户:使用
kafka-configs.sh工具添加用户及密码(如producer、consumer):bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=producer-secret]' --entity-type users --entity-name producer bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=consumer-secret]' --entity-type users --entity-name consumer - 配置Broker JAAS文件:在
config目录下创建kafka_server_jaas.conf,定义SCRAM认证模块及用户凭证:KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required user_producer="producer-secret" user_consumer="consumer-secret"; } ; - 修改Broker配置:编辑
server.properties,启用SASL/SCRAM认证:security.inter.broker.protocol=SASL_PLAINTEXT # Broker间通信协议 sasl.enabled.mechanisms=SCRAM-SHA-256 # 支持的认证机制 sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256 # Broker间使用的机制 listener.name.sasl_plaintext.scram-sha-256.sasl.jaas.config=file:/usr/local/kafka/config/kafka_server_jaas.conf # 指定JAAS文件路径 listeners=SASL_PLAINTEXT://0.0.0.0:9092 # 监听所有网卡 advertised.listeners=SASL_PLAINTEXT://your-server-ip:9092 # 对外暴露的地址 - 客户端配置:生产/消费者需指定SASL协议及机制:
# 生产者配置(producer.properties) security.protocol=SASL_PLAINTEXT sasl.mechanism=SCRAM-SHA-256 sasl.jaas.config='org.apache.kafka.common.security.scram.ScramLoginModule required username="producer" password="producer-secret"; ' # 消费者配置(consumer.properties) security.protocol=SASL_PLAINTEXT sasl.mechanism=SCRAM-SHA-256 sasl.jaas.config='org.apache.kafka.common.security.scram.ScramLoginModule required username="consumer" password="consumer-secret"; ' - 重启Broker:
systemctl restart kafka使配置生效。
2. SASL/PLAIN认证(简单场景,明文密码)
若需快速测试,可使用PLAIN机制(需注意密码明文传输风险):
- 修改Broker JAAS文件:
KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret" user_admin="admin-secret"; } ; - Broker配置:
security.inter.broker.protocol=SASL_PLAINTEXT sasl.enabled.mechanisms=PLAIN sasl.mechanism.inter.broker.protocol=PLAIN listener.name.sasl_plaintext.plain.sasl.jaas.config=file:/usr/local/kafka/config/kafka_server_jaas.conf - 客户端配置:
security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN sasl.jaas.config='org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret"; '
3. SSL/TLS加密(保护数据传输)
结合SASL使用SSL/TLS,实现“认证+加密”的双重安全:
- 生成证书:使用OpenSSL创建CA、Broker证书及客户端证书(参考搜索结果中SSL配置步骤)。
- Broker配置:
listeners=SSL://:9093,PLAINTEXT://:9092 advertised.listeners=SSL://your-server-ip:9093,PLAINTEXT://your-server-ip:9092 security.inter.broker.protocol=SSL ssl.keystore.location=/usr/local/kafka/config/kafka.server.keystore.jks ssl.keystore.password=kafka123 ssl.key.password=kafka123 ssl.truststore.location=/usr/local/kafka/config/kafka.truststore.jks ssl.truststore.password=kafka123 ssl.enabled.protocols=TLSv1.2,TLSv1.3 - 客户端配置:
security.protocol=SSL ssl.keystore.location=/usr/local/kafka/config/client.keystore.jks ssl.keystore.password=kafka123 ssl.truststore.location=/usr/local/kafka/config/kafka.truststore.jks ssl.truststore.password=kafka123
三、授权配置(控制访问权限)
通过ACL(访问控制列表)实现细粒度的权限管理,限制用户对Topic、消费组等的操作。
- 启用ACL:修改
server.properties,指定授权类并关闭“无ACL时的允许访问”:authorizer.class.name=kafka.security.authorizer.AclAuthorizer allow.everyone.if.no.acl.found=false - 创建Super User:定义具有所有权限的超级用户(如
admin),用于管理ACL:bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=admin-secret]' --entity-type users --entity-name admin - 添加ACL规则:通过
kafka-acls.sh工具为用户分配权限(示例:允许producer向test-topic生产消息,允许consumer从test-topic消费消息):# 生产权限 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:producer --operation Produce --topic test-topic # 消费权限 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:consumer --operation Consume --topic test-topic --group consumer-group - 验证ACL:查看
test-topic的ACL规则:bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --list --topic test-topic
四、网络隔离(限制访问范围)
通过CentOS防火墙(firewalld)限制Kafka端口的访问,仅允许可信IP连接:
- 开放端口:默认Kafka使用9092(PLAINTEXT)和9093(SSL),执行以下命令开放端口:
sudo firewall-cmd --permanent --add-port=9092/tcp sudo firewall-cmd --permanent --add-port=9093/tcp sudo firewall-cmd --reload - 限制IP访问:仅允许特定IP段(如公司内网
192.168.1.0/24)访问Kafka端口:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="9092" protocol="tcp" accept' sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="9093" protocol="tcp" accept' sudo firewall-cmd --reload
五、安全最佳实践
- 密码管理:使用密码管理工具(如HashiCorp Vault)存储凭证,避免在配置文件中明文保存;定期轮换密码(建议每90天)。
- 证书管理:生产环境使用PKI(公钥基础设施)签发证书,避免自签名证书;定期更新证书有效期。
- 日志与监控:启用Kafka审计日志(记录所有客户端操作),结合Prometheus+Grafana监控Kafka运行状态(如CPU、内存、磁盘空间)。
- 版本兼容:确保Kafka客户端与服务端版本一致,避免因版本不兼容导致的安全漏洞。
- 禁用PLAINTEXT:生产环境移除
PLAINTEXT协议,仅保留SASL_SSL或SSL协议,减少未加密传输的风险。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: kafka在centos上如何进行安全设置
本文地址: https://pptw.com/jishu/746193.html
