以下是Ubuntu下Kafka的安全配置技巧,涵盖认证、加密及权限管理:
生成证书
使用OpenSSL生成CA证书、服务器证书及客户端证书,或通过keytool生成密钥库(keystore)和信任库(truststore)。
# 示例:生成服务器密钥库
keytool -genkeypair -alias kafka-server -keyalg RSA -keystore kafka-server.jks -storepass 123456 -validity 365
配置server.properties
listeners=SSL://:9093
ssl.keystore.location=/path/to/kafka-server.jks
ssl.keystore.password=123456
ssl.truststore.location=/path/to/kafka-truststore.jks
ssl.truststore.password=123456
ssl.enabled.protocols=TLSv1.2
ssl.client.auth=required # 要求客户端认证
客户端配置
在客户端配置文件中指定SSL参数,如security.protocol=SSL,并指向对应的信任库和密钥库。
启用SASL机制
server.properties中设置:sasl.enabled.mechanisms=SCRAM-SHA-256
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
listener.name.sasl_ssl.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="admin" password="admin123" user_admin="admin123";
配置JAAS文件
创建kafka-server-jaas.conf,指定认证模块和用户信息,通过java.security.auth.login.config参数加载。
启用ACL
在server.properties中设置:
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
动态添加ACL规则
使用kafka-acls.sh脚本为用户分配权限,例如:
# 允许用户"alice"读取"test-topic"
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow-principal User:alice --operation Read --topic test-topic
防火墙配置
通过ufw或iptables限制Kafka端口(如9093、2181)仅允许特定IP访问:
ufw allow from 192.168.1.0/24 to any port 9093
操作系统权限
以非root用户运行Kafka进程,限制对配置文件和数据目录的访问权限:
chown -R kafka:kafka /var/lib/kafka
chmod 700 /var/lib/kafka
日志与监控
启用Kafka日志记录,并定期分析异常行为,可结合ELK等工具实现集中监控。
kafkacat或kafka-console-producer.sh测试SSL和SASL连接,确保认证和加密生效。参考来源: