温馨提示×

ubuntu上kafka如何进行安全设置

小樊
33
2025-12-27 01:53:34
栏目: 智能运维

Ubuntu上Kafka安全设置实操指南

一 核心安全目标与总体架构

  • 在生产环境中建议同时启用:
    • 认证:优先使用SASL/SCRAM-SHA-256/512(可动态管理用户、无需重启),避免明文密码的SASL/PLAIN;高安全场景可用SASL/OAUTHBEARERKerberos
    • 加密:启用SSL/TLS,生产环境使用SASL_SSLSSL;必要时开启双向认证 mTLS
    • 授权:启用ACL细粒度控制(Topic/Group/Cluster 等资源的读、写、创建等)。
    • 网络与系统:仅开放必要端口(如9093/9092/2181),使用UFW/安全组做来源白名单;以非 root运行,限制配置与数据目录权限;开启审计与监控

二 快速落地配置示例 SASL_SSL + SCRAM-SHA-512

  • 前提:安装OpenJDK 11+,下载解压 Kafka(如**/opt/kafka_2.13-3.8.0**)。
  • 步骤1 生成 SCRAM 用户(Broker 启动后可动态新增,无需重启)
    • 示例创建管理员与业务用户(迭代次数建议≥8192):
      • bin/kafka-configs.sh --bootstrap-server localhost:9093 --alter --add-config “SCRAM-SHA-256=[iterations=8192,password=AdminPass]” --entity-type users --entity-name admin
      • bin/kafka-configs.sh --bootstrap-server localhost:9093 --alter --add-config “SCRAM-SHA-256=[iterations=8192,password=AppPass]” --entity-type users --entity-name app
  • 步骤2 配置 server.properties(仅保留安全监听器)
    • listeners=SASL_SSL://0.0.0.0:9093
    • advertised.listeners=SASL_SSL://<broker_public_ip_or_fqdn>:9093
    • inter.broker.listener.name=SASL_SSL
    • security.inter.broker.protocol=SASL_SSL
    • sasl.enabled.mechanisms=SCRAM-SHA-256
    • sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
    • 可选(按监听器设置 JAAS,避免全局明文 JAAS):
      • listener.name.sasl_ssl.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“admin” password=“AdminPass”;
  • 步骤3 启动参数加载 JAAS(若未使用“按监听器”JAAS)
    • 在 kafka-server-start.sh 顶部加入:export KAFKA_OPTS=“-Djava.security.auth.login.config=/opt/kafka_2.13-3.8.0/config/kafka_server_jaas.conf”
  • 步骤4 生成证书并配置 SSL(示例自签 CA,生产建议企业 CA)
    • 生成 CA:
      • mkdir -p config/certificates && cd config/certificates
      • openssl req -newkey rsa:2048 -nodes -keyout ca-key.pem -out ca-cert.pem -x509 -days 3650
    • 生成 Broker 证书并签发:
      • openssl req -newkey rsa:2048 -nodes -keyout broker-key.pem -out broker-req.pem -subj “/CN=localhost
      • openssl x509 -req -in broker-req.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out broker-cert.pem -days 3650
    • 导入到 JKS(Broker 信任 CA;客户端需信任 Broker 证书):
      • keytool -import -alias ca -file ca-cert.pem -keystore truststore.jks -storepass changeit -noprompt
      • openssl pkcs12 -export -in broker-cert.pem -inkey broker-key.pem -out broker.p12 -name kafka -CAfile ca-cert.pem -caname root -password pass:changeit
      • keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore keystore.jks -srckeystore broker.p12 -srcstoretype PKCS12 -srcstorepass changeit -alias kafka
    • server.properties 增加 SSL 项:
      • ssl.keystore.location=config/certificates/keystore.jks
      • ssl.keystore.password=changeit
      • ssl.key.password=changeit
      • ssl.truststore.location=config/certificates/truststore.jks
      • ssl.truststore.password=changeit
      • ssl.client.auth=required(开启 mTLS;如仅服务端校验可设为 requested)
      • ssl.enabled.protocols=TLSv1.2,TLSv1.3
  • 步骤5 客户端配置(producer.properties/consumer.properties)
    • security.protocol=SASL_SSL
    • sasl.mechanism=SCRAM-SHA-256
    • ssl.truststore.location=config/certificates/truststore.jks
    • ssl.truststore.password=changeit
    • mTLS 时增加:

      • ssl.keystore.location=config/certificates/client-keystore.jks
      • ssl.keystore.password=changeit
      • ssl.key.password=changeit
    • sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“app” password=“AppPass”;
  • 步骤6 创建测试 Topic 与 ACL
    • bin/kafka-topics.sh --create --bootstrap-server localhost:9093 --replication-factor 1 --partitions 1 --topic test_topic
    • bin/kafka-acls.sh --bootstrap-server localhost:9093 --add --allow-principal User:app --operation Read --operation Write --topic test_topic
  • 步骤7 验证
    • 生产消息:bin/kafka-console-producer.sh --bootstrap-server <SASL_SSL_ADDR>:9093 --topic test_topic --producer.config config/producer.properties
    • 消费消息:bin/kafka-console-consumer.sh --bootstrap-server <SASL_SSL_ADDR>:9093 --topic test_topic --from-beginning --consumer.config config/consumer.properties
    • 未授权用户应被拒绝;必要时用 tcpdump 确认链路加密。

三 防火墙与系统加固

  • 防火墙最小化开放:仅放通9093(SASL_SSL),必要时放通2181(ZooKeeper,建议内网隔离)。
    • sudo ufw allow 9093/tcp
    • sudo ufw enable
  • 非 root运行 Kafka,目录权限最小化:
    • sudo useradd -r -m -d /opt/kafka_2.13-3.8.0 -s /sbin/nologin kafka
    • sudo chown -R kafka:kafka /opt/kafka_2.13-3.8.0
    • sudo chmod -R 750 /opt/kafka_2.13-3.8.0/config /opt/kafka_2.13-3.8.0/data
  • 禁用明文端口:生产环境不要保留PLAINTEXT监听,仅保留SASL_SSL/SSL

四 可选认证与扩展

  • SASL/PLAIN:实现简单,但密码在配置中明文存储,务必仅与TLS一起使用;适合测试或配合外部回调/凭据管理。
  • SASL/OAUTHBEARER:适配OAuth 2.0生态,适合与现有身份体系集成;默认实现仅用于非生产,生产需接入有效 Token 服务。
  • Kerberos(GSSAPI):适用于企业统一认证(AD/LDAP),集成复杂度较高,安全性强。

五 证书与 ACL 运维要点

  • 证书管理:
    • 使用企业 CA签发证书;定期轮换(建议周期≤365天);妥善管控keystore/truststore口令;公网或自签 CA 场景,客户端可能需要将ssl.endpoint.identification.algorithm=(置空)以关闭主机名校验(仅测试或受控网络)。
  • ACL 最佳实践:
    • 遵循最小权限原则;按应用/团队/环境分主体(如User:appUser:monitor);定期审计与回收无用权限;对ClusterTopic分别授权。
  • 监控与审计:
    • 关注失败认证ACL 变更异常连接等指标与日志;结合SIEM进行告警;证书轮换、ACL 调整先在测试环境验证再上线。

0