centos kafka安全配置有哪些
小樊
41
2025-11-29 21:04:38
CentOS 上 Kafka 的安全配置清单
一 传输加密 SSL TLS
- 生成密钥与证书(JKS 示例):
- 服务器密钥库:keytool -genkey -alias kafka-server -keystore kafka.server.keystore.jks -storepass password -validity 365 -keysize 2048
- 导出并导入信任库:
- keytool -export -alias kafka-server -file kafka.server.crt -keystore kafka.server.keystore.jks -storepass password
- keytool -import -alias kafka-server -file kafka.server.crt -keystore kafka.server.truststore.jks -storepass password
- Broker 端配置 server.properties:
- listeners=SSL://:9093
- ssl.keystore.location=/etc/kafka/kafka.server.keystore.jks
- ssl.keystore.password=password
- ssl.key.password=password
- ssl.truststore.location=/etc/kafka/kafka.server.truststore.jks
- ssl.truststore.password=password
- ssl.enabled.protocols=TLSv1.2
- ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384
- 客户端配置(producer/consumer.properties):
- security.protocol=SSL
- ssl.truststore.location=/etc/kafka/kafka.server.truststore.jks
- ssl.truststore.password=password
- 如需双向 TLS:配置 ssl.keystore.location/ssl.keystore.password/ssl.key.password
二 身份认证 SASL
- 选择机制:常用有 SCRAM-SHA-256、PLAIN、GSSAPI(Kerberos);跨公网或不可信网络优先使用 SCRAM 或 SASL+SSL。
- 创建 SCRAM 用户(示例):
- kafka-configs.sh --zookeeper localhost:2181 --entity-type users --entity-name kafka-user --alter --add-config SCRAM-SHA-256=[password]=true
- JAAS 配置(kafka_server_jaas.conf):
- KafkaServer {
- org.apache.kafka.common.security.scram.ScramLoginModule required
- username=“kafka-user”
- password=“password”;
- };
- Broker 端 server.properties(SASL/SSL 示例):
- listeners=SASL_SSL://:9093
- security.inter.broker.protocol=SASL_SSL
- sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
- sasl.enabled.mechanisms=SCRAM-SHA-256
- 方式一(推荐):sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“kafka-user” password=“password”;
- 方式二:在启动脚本中通过 JVM 参数指定 -Djava.security.auth.login.config=/path/kafka_server_jaas.conf
- 客户端配置:
- security.protocol=SASL_SSL
- sasl.mechanism=SCRAM-SHA-256
- sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“kafka-user” password=“password”;
三 授权与 ACL
- 启用 ACL(server.properties):
- authorizer.class.name=kafka.security.authorizer.AclAuthorizer
- allow.everyone.if.no.acl.found=false
- super.users=User:admin
- 管理 ACL(示例):
- 为用户创建凭据(SCRAM 等)后,按需授予 Topic/Group 操作权限(read/write/describe/admin 等),使用 kafka-acls.sh 完成授权规则配置
-
注意:若前期未启用 ACL,建议先完成用户与认证体系,再开启 ACL 并逐步下发最小权限策略
四 网络安全与端口
- 防火墙放通(firewalld):
- 仅放通必要端口,例如:firewall-cmd --permanent --zone=public --add-port=9093/tcp;firewall-cmd --reload
- 如仍使用明文或内部通信,亦需确认 9092/tcp 的访问控制策略
- 监听与暴露面:
- 避免使用 PLAINTEXT 暴露公网,生产建议使用 SASL_SSL 或 SSL
- 正确设置 listeners 与(如需)advertised.listeners,避免将内网地址泄露给外部客户端
五 系统与服务加固要点
- 最小权限运行:以 非 root 用户启动 Kafka,限制 log.dirs 等目录权限
- 依赖组件安全:如仍使用 Zookeeper,建议开启 Zookeeper ACL 并隔离网络访问
- 启动顺序与高可用:先启动 Zookeeper,再启动 Kafka Broker;变更安全配置后按顺序重启
- 变更与验证:每次修改 server.properties 后执行滚动重启并做连通性与权限验证(生产建议灰度)
- 版本与兼容性:不同 Kafka 版本在配置项与行为上存在差异,升级前在测试环境充分验证