kafka在ubuntu上的安全设置怎么做
小樊
46
2026-01-07 18:26:48
Kafka 在 Ubuntu 的安全设置清单
一 系统级加固
- 保持系统与依赖更新:执行 apt update && apt upgrade,及时修复已知漏洞;关注 Kafka 官方安全公告并优先升级到稳定版本。
- 最小化暴露面:仅开放必要端口(如 9092 客户端、2181 Zookeeper),使用 ufw 或云安全组限制来源 IP。
- 强化 SSH:禁用密码登录(PasswordAuthentication no)、改用密钥登录、可变更默认端口并限制可登录用户/来源网段。
- 进程与文件权限:以专用系统用户(如 kafka:kafka)运行 Kafka;数据目录(如 /var/lib/kafka)权限 750,配置文件(如 server.properties)权限 640;必要时启用 AppArmor 限制进程能力。
- 审计与监控:启用系统审计(如 auditd)记录关键命令执行;部署日志收集/告警,持续观察异常连接与操作。
二 传输加密 SSL TLS
- 生成密钥库与信任库(JKS,示例):
- 服务器密钥库:
keytool -genkey -alias kafka -keyalg RSA -keystore kafka.server.keystore.jks -validity 3650
- 导出服务器证书:
keytool -export -alias kafka -file kafka.cer -keystore kafka.server.keystore.jks
- 导入为信任库(供客户端使用):
keytool -import -alias kafka -file kafka.cer -keystore kafka.server.truststore.jks
- Broker 端配置 server.properties(示例为仅启用 SSL 的监听器):
- listeners=SSL://:9093
- advertised.listeners=SSL://:9093
- security.inter.broker.protocol=SSL
- ssl.keystore.location=/path/to/kafka.server.keystore.jks
- ssl.keystore.password=
- ssl.key.password=
- ssl.truststore.location=/path/to/kafka.server.truststore.jks
- ssl.truststore.password=
- ssl.enabled.protocols=TLSv1.2,TLSv1.3
- ssl.client.auth=required(双向校验)
- 客户端连接示例:
- security.protocol=SSL
- ssl.truststore.location=/path/to/kafka.server.truststore.jks
- ssl.truststore.password=
说明:生产环境建议优先使用 SASL_SSL 或仅开放 SSL 端口,避免明文通道。
三 身份认证 SASL
- 推荐机制:使用 SASL/SCRAM(如 SCRAM-SHA-256),支持动态新增用户且无需重启集群。
- 创建 JAAS 配置 kafka_server_jaas.conf:
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username=“admin”
password=“admin-secret”
user_admin=“admin-secret”
user_producer=“producer-secret”
user_consumer=“consumer-secret”;
};
- Broker 端 server.properties(示例为仅 SASL 的监听器):
- listeners=SASL_PLAINTEXT://:9092
- advertised.listeners=SASL_PLAINTEXT://: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:/path/to/kafka_server_jaas.conf
- 动态创建用户(无需重启):
- bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config ‘SCRAM-SHA-256=[password=producer-secret]’ --entity-type users --entity-name producer
- bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config ‘SCRAM-SHA-256=[password=consumer-secret]’ --entity-type users --entity-name consumer
- 客户端示例(SASL_PLAINTEXT):
- 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”;’
如需更高安全等级,可改用 SASL/SSL 或将 inter.broker.protocol 提升到 SASL_SSL。
四 授权与访问控制 ACL
- 启用 ACL(Broker 端 server.properties):
- authorizer.class.name=kafka.security.authorizer.AclAuthorizer
- allow.everyone.if.no.acl.found=false(未匹配 ACL 时默认拒绝)
- 常用 ACL 操作(示例):
- 为主题授予生产者写权限:
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:producer --operation WRITE --topic test-topic
- 为主题授予消费者组读权限:
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:consumer --operation READ --topic test-topic --group test-group
- 查看 ACL:
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --list --topic test-topic
说明:ACL 与 SASL 用户一一对应,建议按“最小权限”原则分配。
五 网络与运维安全
- 防火墙与网络隔离:仅放通 9092/9093(Kafka)与 2181(Zookeeper)到受控来源;在云环境使用 VPC/安全组 白名单控制。
- 禁用明文端口:完成 SASL/SSL 验证后,关闭 PLAINTEXT 监听,避免降级攻击面。
- 日志与审计:在 log4j.properties 中合理配置日志级别与输出;结合 auditd 记录 Kafka 相关关键操作,便于追溯。
- 持续维护:定期更新 Kafka/Zookeeper/Java 与相关依赖;定期轮换证书与凭据、复核 ACL 与防火墙策略。