CentOS上Kafka的安全配置清单

一传输加密SSLTLS

生成密钥与证书(JKS示例):

服务器密钥库:keytool-genkey-aliaskafka-server-keystorekafka.server.keystore.jks-storepasspassword-validity365-keysize2048

导出并导入信任库:

keytool-export-aliaskafka-server-filekafka.server.crt-keystorekafka.server.keystore.jks-storepasspassword

keytool-import-aliaskafka-server-filekafka.server.crt-keystorekafka.server.truststore.jks-storepasspassword

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--zookeeperlocalhost:2181--entity-typeusers--entity-namekafka-user--alter--add-configSCRAM-SHA-256=[password]=true

JAAS配置(kafka_server_jaas.conf):

KafkaServer{

org.apache.kafka.common.security.scram.ScramLoginModulerequired

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.ScramLoginModulerequiredusername=“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.ScramLoginModulerequiredusername=“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,建议开启ZookeeperACL并隔离网络访问

启动顺序与高可用:先启动Zookeeper,再启动KafkaBroker;变更安全配置后按顺序重启

变更与验证:每次修改server.properties后执行滚动重启并做连通性与权限验证(生产建议灰度)

版本与兼容性:不同Kafka版本在配置项与行为上存在差异,升级前在测试环境充分验证