kafka在ubuntu如何保障安全
导读:在 Ubuntu 上保障 Kafka 安全的实用方案 一 安全架构与最小原则 采用“加密传输 + 强认证 + 细粒度授权 + 网络最小暴露”的组合:优先使用 SASL/SCRAM 或 SASL/SSL 做认证,配合 ACL 做授权,仅开放...
在 Ubuntu 上保障 Kafka 安全的实用方案
一 安全架构与最小原则
- 采用“加密传输 + 强认证 + 细粒度授权 + 网络最小暴露”的组合:优先使用 SASL/SCRAM 或 SASL/SSL 做认证,配合 ACL 做授权,仅开放必要端口,并限制来源网段与访问主体。
- 如仍使用 Zookeeper,建议为其启用 SASL,避免明文凭据在内部网络裸奔;Kafka 与客户端、以及 Broker 之间的通信都走认证通道。
- 从 Kafka 2.8 起可禁用 PLAINTEXT 端口,仅保留 SASL/SSL,显著降低误用风险。
二 传输加密与认证配置
- 方案A SASL/SCRAM(推荐,动态用户管理)
- 生成 JAAS 配置(示例:/opt/kafka/conf/kafka_server_jaas.conf)
KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="Admin@Sec2025" user_admin="Admin@Sec2025" user_producer="Prod@Sec2025" user_consumer="Cons@Sec2025"; } ; - server.properties 关键项
listeners=SASL_PLAINTEXT://:9092 advertised.listeners=SASL_PLAINTEXT://< your-hostname-or-ip> :9092 security.inter.broker.protocol=SASL_PLAINTEXT sasl.enabled.mechanisms=SCRAM-SHA-256 sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256 listener.name.sasl_plaintext.scram-sha-256.sasl.jaas.config=file:/opt/kafka/conf/kafka_server_jaas.conf - 创建 SCRAM 用户(Kafka 2.x 使用 Zookeeper;Kafka 3.x 使用 --bootstrap-server)
# Kafka 2.x bin/kafka-configs.sh --zookeeper localhost:2181 --alter \ --add-config 'SCRAM-SHA-256=[password=Prod@Sec2025]' --entity-type users --entity-name producer bin/kafka-configs.sh --zookeeper localhost:2181 --alter \ --add-config 'SCRAM-SHA-256=[password=Cons@Sec2025]' --entity-type users --entity-name consumer # Kafka 3.x bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter \ --add-config 'SCRAM-SHA-256=[password=Prod@Sec2025]' --entity-type users --entity-name producer bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter \ --add-config 'SCRAM-SHA-256=[password=Cons@Sec2025]' --entity-type users --entity-name consumer - 客户端示例(生产/消费)
bin/kafka-console-producer.sh --bootstrap-server < host> :9092 --topic test-topic \ --producer-property security.protocol=SASL_PLAINTEXT \ --producer-property sasl.mechanism=SCRAM-SHA-256 \ --producer-property sasl.jaas.config='org.apache.kafka.common.security.scram.ScramLoginModule required username="producer" password="Prod@Sec2025"; ' bin/kafka-console-consumer.sh --bootstrap-server < host> :9092 --topic test-topic \ --from-beginning \ --consumer-property security.protocol=SASL_PLAINTEXT \ --consumer-property sasl.mechanism=SCRAM-SHA-256 \ --consumer-property sasl.jaas.config='org.apache.kafka.common.security.scram.ScramLoginModule required username="consumer" password="Cons@Sec2025"; '
- 生成 JAAS 配置(示例:/opt/kafka/conf/kafka_server_jaas.conf)
- 方案B SSL/TLS 加密(与 SASL 组合为 SASL_SSL 更佳)
- 生成密钥库与信任库(JKS,示例)
keytool -genkey -alias kafka -keyalg RSA -keystore kafka.server.keystore.jks -validity 3650 keytool -export -alias kafka -file kafka.server.crt -keystore kafka.server.keystore.jks keytool -import -alias kafka -file kafka.server.crt -keystore kafka.client.truststore.jks - server.properties 关键项(与 SASL 组合)
listeners=SASL_SSL://:9093 advertised.listeners=SASL_SSL://< your-hostname-or-ip> :9093 security.inter.broker.protocol=SASL_SSL sasl.enabled.mechanisms=SCRAM-SHA-256 sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256 listener.name.sasl_ssl.scram-sha-256.sasl.jaas.config=file:/opt/kafka/conf/kafka_server_jaas.conf ssl.keystore.location=/opt/kafka/security/kafka.server.keystore.jks ssl.keystore.password=< keystore-pass> ssl.key.password=< key-pass> ssl.truststore.location=/opt/kafka/security/kafka.client.truststore.jks ssl.truststore.password=< truststore-pass> - 客户端需设置:security.protocol=SASL_SSL、sasl.mechanism=SCRAM-SHA-256 与对应 JAAS/用户名密码。
- 生成密钥库与信任库(JKS,示例)
三 授权与访问控制
- 启用 ACL(示例)
# 创建主题 bin/kafka-topics.sh --create --topic sensitive-data --bootstrap-server < host> :9092 --partitions 3 --replication-factor 1 # 授予生产者写权限(Kafka 2.x 使用 --zookeeper;3.x 使用 --bootstrap-server) bin/kafka-acls.sh --bootstrap-server < host> :9092 --add --allow-principal User:producer \ --operation Write --operation Create --topic sensitive-data # 授予消费者组读权限 bin/kafka-acls.sh --bootstrap-server < host> :9092 --add --allow-principal User:consumer \ --operation Read --operation Describe --group console-consumer # 查看 ACL bin/kafka-acls.sh --bootstrap-server < host> :9092 --list --topic sensitive-data - 原则:按“最小权限”分配,区分 Topic/Group/Cluster 操作,定期审计 ACL 变更。
四 网络安全与系统加固
- 防火墙与网络分段
- 仅开放必要端口(如 9092/9093),并限制来源网段;在云环境配合 安全组/VPC 做白名单。
sudo ufw allow from < app-subnet> to any port 9093 proto tcp sudo ufw deny 9092/tcp # 禁用明文端口 sudo ufw enable & & sudo ufw status verbose
- 仅开放必要端口(如 9092/9093),并限制来源网段;在云环境配合 安全组/VPC 做白名单。
- 操作系统与进程安全
- 以非 root专用用户运行 Kafka,限制目录权限(如 log.dirs、配置目录仅属 kafka:kafka)。
- 开启 日志审计(访问日志、错误日志),并接入 SIEM 进行实时监控与告警。
- 定期更新补丁与依赖,设置 资源限制(如 systemd 的 CPU/内存/文件句柄),并进行定期备份。
五 快速核查清单
- 已禁用 PLAINTEXT,仅开放 SASL_PLAINTEXT/SASL_SSL 端口,来源 IP 白名单受控。
- 使用 SCRAM-SHA-256 或 Kerberos,凭据集中管理,支持动态新增用户(SCRAM)。
- ACL 已按 Topic/Group/Cluster 粒度配置,并定期审计。
- Zookeeper 已启用 SASL,内部通信不再明文。
- JKS 证书与密码受控,证书轮换流程已就位;客户端信任链正确。
- UFW/安全组 最小化放行,系统用户与目录权限最小化,日志与监控告警正常。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: kafka在ubuntu如何保障安全
本文地址: https://pptw.com/jishu/775898.html
