温馨提示×

Ubuntu Kafka安全如何配置

小樊
54
2025-10-08 19:12:13
栏目: 智能运维

Ubuntu Kafka安全配置指南
在Ubuntu上配置Kafka安全需围绕认证、加密、授权、网络隔离及权限管理五大核心维度展开,以下是具体步骤:

一、前置准备

  1. 安装Java环境:Kafka依赖Java,推荐使用OpenJDK 11及以上版本。
    sudo apt update && sudo apt install -y openjdk-11-jdk
    
  2. 下载并解压Kafka:从Apache官网下载最新稳定版Kafka(如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认证(身份验证)

SASL是Kafka的主流认证机制,推荐使用SCRAM-SHA-256/512(比PLAIN更安全,密码以哈希值存储)。

  1. 创建JAAS配置文件:在/opt/kafka/config/目录下创建kafka_server_jaas.conf,定义用户凭据(如admin用户)。
    KafkaServer {
        org.apache.kafka.common.security.scram.ScramLoginModule required
        username="admin"
        password="Admin@123";
    };
    
  2. 修改Kafka配置文件:编辑/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
    
  3. 启动Kafka时加载JAAS配置:修改/opt/kafka/bin/kafka-server-start.sh,在启动命令前添加JVM参数。
    export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
    
  4. 添加用户到ZooKeeper:使用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加密(传输层安全)

SSL/TLS用于加密Kafka客户端与Broker、Broker与Broker之间的通信,防止数据泄露。

  1. 生成密钥库(Keystore)和信任库(Truststore):使用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
    
  2. 修改Kafka配置文件:编辑/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
    
  3. 配置客户端SSL:客户端(生产者/消费者)需配置对应的信任库,以验证Broker证书。
    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授权(访问控制)

ACL(访问控制列表)用于限制用户对Kafka主题、分区的操作权限(如读、写、创建等)。

  1. 启用ACL:编辑/opt/kafka/config/server.properties,开启授权功能。
    authorizer.class.name=kafka.security.authorizer.AclAuthorizer
    super.users=User:admin  # 定义超级用户(可跳过ACL检查)
    
  2. 添加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
    
  3. 验证ACL:使用kafka-acls.sh查看已配置的ACL规则。
    /opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9093 --list
    

五、网络与操作系统安全

  1. 防火墙配置:使用ufw限制Kafka端口(如9093)仅允许特定IP访问(如客户端IP、ZooKeeper IP)。
    sudo ufw allow from <client-ip> to any port 9093 proto tcp
    sudo ufw enable
    
  2. 操作系统权限:将Kafka目录的所有权赋予kafka用户(默认安装用户),避免root运行。
    sudo chown -R kafka:kafka /opt/kafka
    sudo systemctl edit kafka
    
    在编辑器中添加(限制Kafka以kafka用户运行):
    [Service]
    User=kafka
    Group=kafka
    

六、验证配置

  1. 测试SASL/SSL连接:使用客户端工具发送消息,验证认证和加密是否生效。
    /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
    
  2. 检查日志:查看Kafka日志(/opt/kafka/logs/server.log),确认无认证或加密错误。

注意事项

  • 生产环境建议:使用CA签发的证书替代自签名证书,避免中间人攻击;定期轮换用户密码和证书;监控Kafka日志及ACL变更。
  • 版本兼容性:Kafka 2.8及以上版本推荐使用--bootstrap-server替代--zookeeper(如kafka-configs.sh命令)。
  • 备份配置:修改配置文件前备份原文件(如cp server.properties server.properties.bak),便于故障恢复。

0