温馨提示×

Kafka在Debian上如何进行安全配置

小樊
36
2025-12-24 01:00:48
栏目: 智能运维

在 Debian 上配置 Kafka 的安全基线

以下清单覆盖从传输加密身份认证访问控制系统加固的关键步骤,适用于常见的 Debian 部署场景。

一 基础与网络加固

  • 更新系统与软件包,最小化安装,禁用不必要的内核模块与服务,仅开放必要端口(如 SSH 22、Kafka 监听器端口)。
  • 使用 UFWiptables 限制访问来源,仅允许受控网段访问 Kafka 端口(示例:sudo ufw allow 9093/tcp)。
  • 以最小权限运行 Kafka:创建专用系统用户与组(如 kafka:kafka),数据目录与配置文件设置 chown/chmod 600/700,避免使用 root 启动。
  • 将日志目录与存储目录分离,开启日志轮转,限制日志保留周期,避免敏感数据长期留存。

二 传输加密 SSL TLS

  • 使用 Java keytool 生成服务器密钥库与信任库(JKS),并为 Broker 与客户端分别配置证书与信任链:
    • 生成服务器密钥库:
      keytool -genkey -alias kafka-server -keyalg RSA -keystore server.jks -storepass 密码 -validity 3650 -keysize 2048
    • 导出服务器证书:
      keytool -export -alias kafka-server -file server.crt -keystore server.jks -storepass 密码
    • 生成客户端密钥库(可选,双向 TLS 时使用):
      keytool -genkey -alias kafka-client -keyalg RSA -keystore client.jks -storepass 密码 -validity 3650 -keysize 2048
  • 在 server.properties 启用监听器与 SSL:
    • 仅加密:listeners=SSL://:9093;security.inter.broker.protocol=SSL
    • 加密+认证:listeners=SASL_SSL://:9093;security.inter.broker.protocol=SASL_SSL
    • 关键 SSL 参数:
      • ssl.keystore.location=/path/server.jks;ssl.keystore.password=密码
      • ssl.key.password=密码(若与 keystore 密码不同)
      • ssl.truststore.location=/path/truststore.jks;ssl.truststore.password=密码
      • ssl.enabled.protocols=TLSv1.2,TLSv1.3
      • ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384
  • 客户端需配置相同的 security.protocol=SSLSASL_SSL、信任库路径与密码,双向 TLS 时还需配置客户端密钥库。

三 身份认证 SASL

  • 选择机制:推荐 SCRAM-SHA-256/512(密码不落地、可动态变更),兼容性与安全性优于 PLAIN
  • 在 server.properties 启用 SASL:
    • sasl.enabled.mechanisms=SCRAM-SHA-256(可按需增加)
    • sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
    • 监听器与协议:listeners=SASL_SSL://:9093;security.inter.broker.protocol=SASL_SSL
  • 配置 JAAS(示例为 SCRAM):/etc/kafka/kafka_server_jaas.conf
    • KafkaServer {
      org.apache.kafka.common.security.scram.ScramLoginModule required
      username=“admin” password=“admin-secret”;
      };
  • 启动参数注入 JAAS(systemd 示例):
    • ExecStart=/usr/bin/java … -Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf
  • 客户端示例(producer/consumer 通用):
    • bootstrap.servers=host:9093
    • security.protocol=SASL_SSL
    • sasl.mechanism=SCRAM-SHA-256
    • sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“admin” password=“admin-secret”;
  • 如需 PLAIN,将机制替换为 PLAIN 并使用相应的 JAAS 配置,但务必配合 SSL/TLS 防止明文口令泄露。

四 授权与 ACL

  • 启用 ACL(基于 Principal 的访问控制),对 Topic、Group、Cluster 等资源进行细粒度授权。
  • 使用 kafka-acls.sh 创建 ACL(示例):
    • 允许 admin 对 test-topic 读/写:
      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ –add --allow-principal User:admin --operation Read --operation Write --topic test-topic
    • 查看 ACL:
      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ –list --topic test-topic
  • 客户端连接时指定 Principal(与 ACL 中一致),未授权操作将被拒绝。

五 高可用与周边组件安全

  • 如仍使用 Zookeeper:为 Zookeeper 启用 SASL/Digest 认证,配置 JAAS、限制四字命令白名单,并仅在内网开放 2181 等必要端口。
  • Kafka 2.8.0 起可使用 KRaft 模式(去 Zookeeper),建议在新部署中优先采用 KRaft,减少外部依赖面。
  • 持续监控与审计:开启 安全相关日志(如登录、ACL 变更),定期轮换密钥与凭据,使用配置管理工具管理密钥与证书,避免硬编码。

0