Ubuntu Kafka安全配置指南
在Ubuntu上配置Kafka安全需围绕认证、加密、授权、网络隔离及权限管理五大核心维度展开,以下是具体步骤:
sudo apt update && sudo apt install -y openjdk-11-jdk
kafka_2.13-3.6.0.tgz),解压至/opt/kafka目录。wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
tar -xzf kafka_2.13-3.6.0.tgz -C /opt/
mv /opt/kafka_2.13-3.6.0 /opt/kafka
SASL是Kafka的主流认证机制,推荐使用SCRAM-SHA-256/512(比PLAIN更安全,密码以哈希值存储)。
/opt/kafka/config/目录下创建kafka_server_jaas.conf,定义用户凭据(如admin用户)。KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="Admin@123";
};
/opt/kafka/config/server.properties,启用SASL及对应机制。# 指定监听协议(SASL_SSL为加密+认证,SASL_PLAINTEXT为明文+认证,生产环境必须用SASL_SSL)
listeners=SASL_SSL://0.0.0.0:9093
# broker间通信协议
security.inter.broker.protocol=SASL_SSL
# 允许的认证机制(需与JAAS文件一致)
sasl.enabled.mechanisms=SCRAM-SHA-256
# broker间认证机制
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
# 指定JAAS配置文件路径
sasl.jaas.config=file:/opt/kafka/config/kafka_server_jaas.conf
/opt/kafka/bin/kafka-server-start.sh,在启动命令前添加JVM参数。export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
kafka-configs.sh工具将用户凭据存储到ZooKeeper(Kafka 2.8+版本支持直接通过Broker管理)。/opt/kafka/bin/kafka-configs.sh --bootstrap-server localhost:9093 \
--alter --add-config "SCRAM-SHA-256=[password=Admin@123]" \
--entity-type users --entity-name admin
SSL/TLS用于加密Kafka客户端与Broker、Broker与Broker之间的通信,防止数据泄露。
keytool生成自签名证书(生产环境建议使用CA签发的证书)。# 创建证书目录
mkdir -p /opt/kafka/config/certificates
cd /opt/kafka/config/certificates
# 生成密钥库(包含Broker私钥和证书)
keytool -genkey -alias kafka -keyalg RSA -keystore kafka.keystore.jks -validity 365 -keysize 2048 \
-dname "CN=localhost, OU=IT, O=YourCompany, L=Beijing, ST=Beijing, C=CN"
# 导出证书(用于客户端信任)
keytool -export -alias kafka -file kafka.crt -keystore kafka.keystore.jks -storepass changeit
# 创建信任库(导入Broker证书,供客户端信任)
keytool -import -alias kafka -file kafka.crt -keystore kafka.truststore.jks -storepass changeit -noprompt
/opt/kafka/config/server.properties,添加SSL配置。# SSL监听端口(与listeners配合)
ssl.keystore.location=/opt/kafka/config/certificates/kafka.keystore.jks
ssl.keystore.password=changeit
ssl.key.password=changeit
ssl.truststore.location=/opt/kafka/config/certificates/kafka.truststore.jks
ssl.truststore.password=changeit
# 强制使用TLSv1.2及以上版本(禁用旧版本)
ssl.enabled.protocols=TLSv1.2,TLSv1.3
# 要求客户端提供证书(生产环境建议设为required)
ssl.client.auth=required
security.protocol=SASL_SSL
ssl.truststore.location=/opt/kafka/config/certificates/kafka.truststore.jks
ssl.truststore.password=changeit
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="admin" \
password="Admin@123";
ACL(访问控制列表)用于限制用户对Kafka主题、分区的操作权限(如读、写、创建等)。
/opt/kafka/config/server.properties,开启授权功能。authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin # 定义超级用户(可跳过ACL检查)
kafka-acls.sh工具为用户分配权限(示例:允许writer用户对test_topic进行读写操作)。/opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9093 \
--add --allow-principal User:writer \
--operation Read --operation Write \
--topic test_topic
kafka-acls.sh查看已配置的ACL规则。/opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9093 --list
ufw限制Kafka端口(如9093)仅允许特定IP访问(如客户端IP、ZooKeeper IP)。sudo ufw allow from <client-ip> to any port 9093 proto tcp
sudo ufw enable
kafka用户(默认安装用户),避免root运行。sudo chown -R kafka:kafka /opt/kafka
sudo systemctl edit kafka
在编辑器中添加(限制Kafka以kafka用户运行):[Service]
User=kafka
Group=kafka
/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9093 \
--topic test_topic \
--producer.config /opt/kafka/config/producer.properties
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 \
--topic test_topic --from-beginning \
--consumer.config /opt/kafka/config/consumer.properties
/opt/kafka/logs/server.log),确认无认证或加密错误。--bootstrap-server替代--zookeeper(如kafka-configs.sh命令)。cp server.properties server.properties.bak),便于故障恢复。