温馨提示×

Kafka配置Ubuntu安全性如何保障

小樊
31
2025-11-23 15:03:14
栏目: 智能运维

Kafka 在 Ubuntu 上的安全配置与加固清单

一 安全架构与端口规划

  • 采用“认证 + 加密 + 授权 + 网络最小暴露”的组合:
    • 认证:优先使用 SASL/SCRAMSASL/PLAIN,如需零明文密码则选 SCRAM;跨公网强烈建议叠加 SSL/TLS
    • 加密:生产环境启用 SSL/TLS;内网若已受信,可仅用 SASL 但需严格网络边界。
    • 授权:启用 ACL 细粒度控制 Topic/Group/Cluster 操作。
    • 监听与端口:
      • 仅开放必要监听器(如 SASL_SSL://:9093),避免暴露 PLAINTEXT://:9092
      • 若仍使用 Zookeeper,限制 2181 仅内网访问,并考虑迁移到 KRaft 模式以减少外部依赖与攻击面。
    • 防火墙:使用 ufw/iptables 仅放行管理网/应用网段与必要端口。

二 传输加密与认证配置

  • 生成密钥与信任库(JKS,示例):
    • 服务器密钥库:
      • keytool -genkey -alias kafka -keyalg RSA -keystore /opt/kafka/config/certs/kafka.server.keystore.jks -validity 3650
    • 导出并分发 CA/服务器证书,客户端导入为信任库(按需):
      • keytool -export -alias kafka -file kafka.cer -keystore kafka.server.keystore.jks
      • keytool -import -alias kafka -file kafka.cer -keystore client.truststore.jks
  • Broker 端 server.properties(SASL/SSL 示例):
    • listeners=SASL_SSL://:9093
    • advertised.listeners=SASL_SSL://<broker_ip_or_fqdn>:9093
    • security.inter.broker.protocol=SASL_SSL
    • sasl.enabled.mechanisms=SCRAM-SHA-512
    • sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
    • ssl.keystore.location=/opt/kafka/config/certs/kafka.server.keystore.jks
    • ssl.keystore.password=<ks_pass>
    • ssl.key.password=<key_pass>
    • ssl.truststore.location=/opt/kafka/config/certs/kafka.server.truststore.jks
    • ssl.truststore.password=<ts_pass>
    • ssl.enabled.protocols=TLSv1.2,TLSv1.3
    • ssl.client.auth=required
  • JAAS 配置(/opt/kafka/config/kafka_server_jaas.conf):
    • KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required username=“admin” password=“Admin@123”; };
  • 启动参数注入 JAAS(在 kafka-server-start.sh 的 exec 前加入):
    • export KAFKA_OPTS=“-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf”
  • 创建 SCRAM 用户(示例):
    • ./bin/kafka-configs.sh --bootstrap-server <broker_ip>:9093
      –alter --add-config “SCRAM-SHA-512=[iterations=8192,password=AppUser@2025]”
      –entity-type users --entity-name appuser
  • 客户端最小配置(producer.properties/consumer.properties):
    • security.protocol=SASL_SSL
    • sasl.mechanism=SCRAM-SHA-512
    • sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“appuser” password=“AppUser@2025”;
    • ssl.truststore.location=/opt/kafka/config/certs/client.truststore.jks
    • ssl.truststore.password=<ts_pass>

三 授权与访问控制

  • 启用 ACL(先以超级用户执行,如 admin):
    • 创建 Topic(示例):
      • ./bin/kafka-topics.sh --bootstrap-server <broker_ip>:9093 --create --topic orders --partitions 3 --replication-factor 2
    • 授予应用用户权限:
      • ./bin/kafka-acls.sh --bootstrap-server <broker_ip>:9093 --add --allow-principal User:appuser
        –operation Read --operation Write --operation Describe --topic orders
      • ./bin/kafka-acls.sh --bootstrap-server <broker_ip>:9093 --add --allow-principal User:appuser
        –operation Read --group app-consumer-group
  • 原则:遵循最小权限,按 Topic/Group/Cluster 维度授权,定期审计 ACL 变更。

四 网络安全与系统加固

  • 防火墙与网络分区:
    • ufw 示例(仅放行业务网段与回环):
      • sudo ufw allow from 10.0.0.0/8 to any port 9093
      • sudo ufw allow from 10.0.0.0/8 to any port 2181(若仍用 ZK)
      • sudo ufw enable && sudo ufw status verbose
    • 绑定内网地址,避免 0.0.0.0 暴露公网;在云环境配合 安全组/VPC 白名单。
  • 系统层面:
    • 非 root 用户运行 Kafka,最小化 sudo 权限。
    • 开启 自动安全更新(unattended-upgrades),定期升级 Kafka/Zookeeper/JDK 与依赖。
    • 文件系统与密钥保护:证书与 keystore 设置 600 权限,属主为运行用户;审计关键配置与证书变更。
    • 资源与容灾:设置 ulimit -n(文件句柄)、JVM 堆与 GC 策略;定期备份与演练恢复。

五 监控审计与验证

  • 日志与审计:
    • 启用并集中采集 server.log/controller.log/audit.log,对 ACL 变更、认证失败、Topic 创建/删除 等事件设置告警。
    • 结合 SIEM 或日志平台进行异常检测与合规审计。
  • 连通性与加密验证:
    • 使用 openssl 验证 TLS:
      • openssl s_client -connect <broker_ip>:9093 -servername <broker_fqdn>
    • 使用控制台生产者/消费者验证 SASL/SSL 与 ACL:
      • ./bin/kafka-console-producer.sh --bootstrap-server <broker_ip>:9093 --topic orders --producer.config client-sasl-ssl.properties
      • ./bin/kafka-console-consumer.sh --bootstrap-server <broker_ip>:9093 --topic orders --from-beginning --consumer.config client-sasl-ssl.properties
  • 持续化检查清单:
    • SASL_SSL 监听器开启;PLAINTEXT 已关闭。
    • ssl.client.auth=required 已启用且客户端均提供有效证书。
    • 所有生产/消费账号均通过 SCRAM 创建并纳入 ACL
    • 防火墙/安全组仅放行业务网段与必要端口。

0