1. 认证配置(Authentication)
认证是确保Kafka客户端与服务端身份合法性的基础,Debian环境下常用**SASL(Simple Authentication and Security Layer)**机制,支持PLAIN(用户名/密码)、SCRAM-SHA-256/512(加密密码)、Kerberos(企业级认证)等方式。
/etc/kafka/kafka_server_jaas.conf),内容示例如下:KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"; # 定义用户及密码
};
修改server.properties,启用SASL并指定JAAS文件:listeners=SASL_PLAINTEXT://:9092 # 或SASL_SSL(加密传输)
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
sasl.jaas.config=/etc/kafka/kafka_server_jaas.conf
kafka-configs --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=admin-secret]' --entity-type users --entity-name admin
JAAS文件调整:KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret";
};
客户端需配置对应的sasl.mechanism(如SCRAM-SHA-256)和username/password。2. 加密配置(Encryption)
通过SSL/TLS加密客户端与Broker、Broker之间的通信,防止数据泄露。
keytool工具生成自签名证书(生产环境建议使用CA签发):keytool -genkey -alias kafka-server -keystore kafka.server.keystore.jks -storepass password -keyalg RSA -keysize 2048 -validity 3650
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
server.properties:启用SSL并指定密钥库/信任库路径:listeners=SSL://:9093 # 或SASL_SSL(结合认证)
security.inter.broker.protocol=SSL
ssl.keystore.location=/etc/kafka/kafka.server.keystore.jks
ssl.keystore.password=password
ssl.key.password=password # 密钥库密码(若与keystore不同)
ssl.truststore.location=/etc/kafka/kafka.server.truststore.jks
ssl.truststore.password=password
ssl.enabled.protocols=TLSv1.2,TLSv1.3 # 仅启用安全协议版本
ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384 # 指定强加密套件
security.protocol=SSL
ssl.truststore.location=/etc/kafka/client.truststore.jks
ssl.truststore.password=password
3. 授权配置(Authorization)
通过**ACL(Access Control Lists)**限制用户对Kafka资源(主题、分区、消费组等)的操作权限(读、写、创建、删除等)。
server.properties,设置授权类并禁用默认允许所有用户的配置:authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=false # 无ACL时拒绝访问
super.users=User:admin # 定义超级用户(可绕过ACL)
kafka-acls.sh工具添加规则,例如允许用户alice读取my-topic:kafka-acls --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow-principal User:alice --operation Read --topic my-topic
或允许用户组dev-group写入logs-topic:kafka-acls --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow-principal Group:dev-group --operation Write --topic logs-topic
查看ACL规则:kafka-acls --authorizer-properties zookeeper.connect=localhost:2181 --list --topic my-topic
4. 网络隔离(Network Isolation)
通过防火墙限制Kafka端口的访问范围,减少攻击面。
sudo ufw allow 9092/tcp # 普通文本端口(仅测试用)
sudo ufw allow 9093/tcp # SSL加密端口(生产推荐)
sudo ufw allow 2181/tcp # ZooKeeper端口
sudo ufw enable # 启用防火墙
5. 操作系统权限(OS Permissions)
限制Kafka进程的用户权限,避免root用户运行,减少系统级风险。
sudo groupadd kafka
sudo useradd -g kafka -s /bin/false -d /nonexistent -M kafka # 无登录权限
kafka用户:sudo chown -R kafka:kafka /usr/local/kafka # 替换为实际安装路径
sudo chmod -R 750 /usr/local/kafka # 限制权限(所有者可读写执行,组可读执行)
sudo -u kafka /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
6. 审计与监控(Audit & Monitoring)
记录Kafka操作日志,及时发现异常行为。
log4j.properties(位于config目录),增加Kafka相关日志级别:log4j.logger.kafka=INFO
log4j.logger.org.apache.zookeeper=INFO
log4j.logger.org.apache.kafka.clients=DEBUG # 调试客户端请求(生产环境可设为INFO)
kafka-audit-log模块记录访问日志。7. 定期更新与补丁管理(Patch Management)
保持Kafka及依赖组件(Java、操作系统)的最新版本,修复已知安全漏洞。
apt更新OpenJDK:sudo apt update
sudo apt upgrade openjdk-11-jdk # 推荐使用JDK 11及以上版本
apt自动安装系统补丁:sudo apt update
sudo apt upgrade -y
sudo unattended-upgrade # 启用自动更新