温馨提示×

centos系统下kafka的安全配置指南

小樊
39
2025-12-07 16:51:31
栏目: 智能运维

CentOS 下 Kafka 安全配置指南

一 安全目标与总体架构

  • 启用传输加密:优先使用 SSL/TLS 加密客户端与 Broker、以及 Broker 之间的通信,禁用明文 PLAINTEXT
  • 启用身份认证:使用 SASL 机制,推荐 SCRAM-SHA-256/512;如为内网且临时过渡可用 SASL/PLAIN,但必须与 TLS 同时使用。
  • 网络与系统加固:仅开放必要端口(如 9093/9094),使用 firewalld 管理规则;Broker 与客户端配置最小权限与凭据隔离。
  • 版本建议:生产环境建议使用 Kafka 3.xJava 11+,以获得更好的安全特性与修复。

二 生成证书与密钥库

  • 准备目录与权限:证书与密钥库建议统一放在 /etc/kafka/certs,权限 600,属主 kafka:kafka
  • 生成 Broker 密钥库(JKS):
    keytool -genkey -alias kafka-server -keyalg RSA -keystore /etc/kafka/certs/kafka.server.keystore.jks -storepass YourKeystorePass -validity 365 -keysize 2048 -dname “CN=your.broker.hostname”
  • 导出并分发证书:
    keytool -export -alias kafka-server -file /etc/kafka/certs/kafka.server.crt -keystore /etc/kafka/certs/kafka.server.keystore.jks -storepass YourKeystorePass
  • 生成客户端信任库并导入 Broker 证书:
    keytool -import -alias kafka-server -file /etc/kafka/certs/kafka.server.crt -keystore /etc/kafka/certs/kafka.client.truststore.jks -storepass YourTruststorePass -noprompt
  • 说明:自签名证书便于起步;生产建议使用 企业 CA/PKI 签发证书,并在所有 Broker 与客户端导入根/中间 CA 证书。

三 服务端配置 server.properties

  • 推荐同时启用加密与认证(SASL_SSL):
    listeners=SASL_SSL://:9093
    advertised.listeners=SASL_SSL://your.broker.fqdn:9093
    security.inter.broker.protocol=SASL_SSL
    sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
    sasl.enabled.mechanisms=SCRAM-SHA-512
    listener.name.sasl_ssl.scram-sha-512.sasl.jaas.config=file:/etc/kafka/jaas/kafka_server_jaas.conf

    SSL 参数

    ssl.keystore.location=/etc/kafka/certs/kafka.server.keystore.jks
    ssl.keystore.password=YourKeystorePass
    ssl.key.password=YourKeyPass
    ssl.truststore.location=/etc/kafka/certs/kafka.server.truststore.jks
    ssl.truststore.password=YourTruststorePass
    ssl.client.auth=required
    ssl.enabled.protocols=TLSv1.2,TLSv1.3
    ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • 如暂无法启用 TLS,可先用 SASL_PLAINTEXT(仅内网):
    listeners=SASL_PLAINTEXT://:9092
    security.inter.broker.protocol=SASL_PLAINTEXT
    sasl.mechanism.inter.broker.protocol=PLAIN
    sasl.enabled.mechanisms=PLAIN
    listener.name.sasl_plaintext.plain.sasl.jaas.config=file:/etc/kafka/jaas/kafka_server_jaas.conf
  • 说明:SASL/PLAIN 明文凭据必须叠加 TLS;SCRAM 支持动态用户管理,更适合生产。

四 JAAS 与用户管理

  • 服务端 JAAS(/etc/kafka/jaas/kafka_server_jaas.conf):
    KafkaServer {
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username=“admin”
    password=“AdminSecret”
    user_admin=“AdminSecret”
    user_producer=“ProducerSecret”
    user_consumer=“ConsumerSecret”;
    };
  • 启动加载 JAAS(systemd 示例,Environment 或 EnvironmentFile 均可):
    Environment=“KAFKA_OPTS=-Djava.security.auth.login.config=/etc/kafka/jaas/kafka_server_jaas.conf”
  • 创建 SCRAM 用户(Kafka ≥ 2.6 推荐用 --bootstrap-server):
    kafka-configs.sh --bootstrap-server localhost:9093 --alter --add-config ‘SCRAM-SHA-512=[password=ProducerSecret]’ --entity-type users --entity-name producer
    kafka-configs.sh --bootstrap-server localhost:9093 --alter --add-config ‘SCRAM-SHA-512=[password=ConsumerSecret]’ --entity-type users --entity-name consumer
  • 验证用户:
    kafka-configs.sh --bootstrap-server localhost:9093 --describe --entity-type users --entity-name producer
  • 说明:SCRAM 用户可在不重启 Broker 的情况下增删改;PLAIN 需在 JAAS 中预置用户。

五 客户端配置与连通性测试

  • 客户端 JAAS(/etc/kafka/jaas/kafka_client_jaas.conf):
    KafkaClient {
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username=“producer”
    password=“ProducerSecret”;
    };
  • 生产端示例(–command-config 指向客户端配置文件):
    cat > /etc/kafka/client-producer.properties <<EOF
    security.protocol=SASL_SSL
    sasl.mechanism=SCRAM-SHA-512
    sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“producer” password=“ProducerSecret”;
    ssl.truststore.location=/etc/kafka/certs/kafka.client.truststore.jks
    ssl.truststore.password=YourTruststorePass
    EOF
    kafka-console-producer.sh --bootstrap-server your.broker.fqdn:9093 --topic test-topic --producer.config /etc/kafka/client-producer.properties
  • 消费端示例:
    cat > /etc/kafka/client-consumer.properties <<EOF
    security.protocol=SASL_SSL
    sasl.mechanism=SCRAM-SHA-512
    sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“consumer” password=“ConsumerSecret”;
    ssl.truststore.location=/etc/kafka/certs/kafka.client.truststore.jks
    ssl.truststore.password=YourTruststorePass
    group.id=test-group
    EOF
    kafka-console-consumer.sh --bootstrap-server your.broker.fqdn:9093 --topic test-topic --from-beginning --consumer.config /etc/kafka/client-consumer.properties
  • 说明:若服务端开启 ssl.client.auth=required,客户端需提供有效证书或信任服务端证书;命令行的 sasl.jaas.config 仅示例,生产建议用文件方式加载。

六 防火墙 服务与运维要点

  • 防火墙放行端口:
    firewall-cmd --permanent --zone=public --add-port=9093/tcp
    firewall-cmd --reload
  • systemd 服务示例(/etc/systemd/system/kafka.service):
    [Unit]
    Description=Apache Kafka
    After=network.target zookeeper.service
    [Service]
    Type=simple
    User=kafka
    Group=kafka
    Environment=“KAFKA_OPTS=-Djava.security.auth.login.config=/etc/kafka/jaas/kafka_server_jaas.conf”
    ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
    ExecStop=/opt/kafka/bin/kafka-server-stop.sh
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
  • 运维要点:
    • 证书轮换:更新 keystore/truststore 后滚动重启 Broker;
    • 权限控制:结合 ACL 限制 Topic/Group/Cluster 操作;
    • 监控与告警:关注 UnderReplicatedPartitions、请求耗时、认证失败日志;
    • 版本与依赖:保持 Kafka 与依赖组件 的安全补丁更新。

0