Ubuntu Kafka安全性保障体系构建指南
ufw或firewalld仅开放Kafka必要端口(默认9092/9093),禁止未授权IP访问。例如:sudo ufw allow from trusted_ip to any port 9093/tcp # 仅允许可信IP访问SSL端口
sudo ufw enable # 启用防火墙
server.properties中配置:security.inter.broker.protocol=SASL_PLAINTEXT # Broker间通信协议
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512 # Broker间强认证机制
sasl.enabled.mechanisms=SCRAM-SHA-512 # 支持的客户端认证机制
创建JAAS配置文件(kafka_server_jaas.conf),定义用户凭据:KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="StrongAdmin@123"
user_admin="StrongAdmin@123"; # 用户名=密码哈希(需提前生成)
};
通过kafka-configs.sh添加用户:./bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config "SCRAM-SHA-512=[iterations=8192,password=StrongUser@123]" --entity-type users --entity-name alice
keytool生成密钥库(Keystore)和信任库(Truststore),配置server.properties:listeners=SSL://:9093
ssl.keystore.location=/opt/kafka/config/keystore.jks
ssl.keystore.password=keystore_pass
ssl.key.password=key_pass
ssl.truststore.location=/opt/kafka/config/truststore.jks
ssl.truststore.password=truststore_pass
ssl.enabled.protocols=TLSv1.2 # 仅启用安全协议版本
ssl.protocol=TLSv1.2
ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384 # 强加密套件
客户端需配置对应client.properties:security.protocol=SSL
ssl.truststore.location=/opt/kafka/client/truststore.jks
ssl.truststore.password=truststore_pass
authorizer.class.name为kafka.security.auth.SimpleAclAuthorizer,禁用默认允许所有用户的配置:authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=false # 无ACL时拒绝访问
super.users=User:admin # 超级用户(可管理所有资源)
使用kafka-acls.sh工具添加细粒度权限,例如:# 允许用户alice读取topic_test主题
./bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow-principal User:alice --operation Read --topic topic_test
# 允许组dev写入topic_dev主题
./bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow-principal Group:dev --operation Write --topic topic_dev
PLAINTEXT监听器,仅保留SASL/SSL端口,避免数据明文传输:listeners=SASL_SSL://:9093 # 替换原有的PLAINTEXT://:9092
log4j.properties中配置:log4j.logger.kafka=INFO
log4j.logger.org.apache.zookeeper=INFO
log4j.logger.kafka.authorizer.logger=DEBUG # 记录授权操作
kafka_server_jaas.conf使用GSSAPI机制。