温馨提示×

Debian环境下Kafka如何安全配置

小樊
33
2025-12-29 21:20:03
栏目: 智能运维

Debian环境下Kafka安全配置实践

以下清单面向 Debian 11/12,覆盖 认证、加密、授权、网络隔离与运维 的关键步骤,可直接用于生产前的安全加固与验收。

一 环境与前置准备

  • 安装基础组件:更新系统并安装 OpenJDK 11keytoolUFW(防火墙)。
  • 准备 Kafka 发行包:建议选择稳定版本(如 3.5.x),解压至 /opt/kafka,创建专用系统用户(如 kafka:kafka),将配置与证书目录置于 /etc/kafka/ssl,并调整目录权限与属主,避免使用 root 运行。
  • 目录与权限示例:
    • 配置:/etc/kafka/server.properties
    • JAAS:/etc/kafka/kafka_server_jaas.conf
    • 证书:/etc/kafka/ssl/(仅 kafka 用户可读)
  • 基础防火墙:仅开放必要端口(如 9093 用于 SASL_SSL,若使用 ZooKeeper 则 2181)。

二 传输加密 SSL TLS

  • 生成密钥与证书(Broker 端):
    • 创建 Keystore(生产请将 CN 设为实际主机名或域名):
      • keytool -genkey -alias kafka -keystore /etc/kafka/ssl/kafka.keystore.jks -keyalg RSA -validity 365 -storepass keystore_password -keypass key_password -dname “CN=localhost, OU=IT, O=YourCompany, L=City, ST=State, C=US”
    • 导出证书:
      • keytool -export -alias kafka -file /etc/kafka/ssl/kafka.crt -keystore /etc/kafka/ssl/kafka.keystore.jks -storepass keystore_password
    • 创建并导入 Truststore(客户端与 Broker 互信):
      • keytool -import -alias kafka -file /etc/kafka/ssl/kafka.crt -keystore /etc/kafka/ssl/kafka.truststore.jks -storepass truststore_password -noprompt
  • Broker 配置 server.properties(仅列出关键项):
    • listeners=SASL_SSL://0.0.0.0:9093
    • security.inter.broker.protocol=SASL_SSL
    • ssl.keystore.location=/etc/kafka/ssl/kafka.keystore.jks
    • ssl.keystore.password=keystore_password
    • ssl.key.password=key_password
    • ssl.truststore.location=/etc/kafka/ssl/kafka.truststore.jks
    • ssl.truststore.password=truststore_password
    • ssl.enabled.protocols=TLSv1.2,TLSv1.3
    • ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384
  • 说明:若仅做传输加密(不做认证),可将 listeners 设为 SSL://… 并相应调整 inter.broker.protocol;生产强烈建议与 SASL 组合使用。

三 身份认证 SASL

  • 选择机制:优先 SCRAM-SHA-256/512(密码哈希加盐,优于明文 PLAIN);如与现有系统集成可选 OAUTHBEARER;不建议在生产使用 PLAIN 除非强制启用 TLS。
  • JAAS 配置(/etc/kafka/kafka_server_jaas.conf):
    • SCRAM 示例:
      • KafkaServer {
        • org.apache.kafka.common.security.scram.ScramLoginModule required
        • username=“admin
        • password=“securepassword
        • user_admin=“securepassword”;
        • };
  • Broker 启用 SASL(server.properties):
    • listeners=SASL_SSL://0.0.0.0:9093
    • security.inter.broker.protocol=SASL_SSL
    • sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
    • sasl.enabled.mechanisms=SCRAM-SHA-256
    • sasl.jaas.config=/etc/kafka/kafka_server_jaas.conf
    • 环境变量(/etc/kafka/kafka-env.sh):export KAFKA_OPTS=“-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf”
  • 动态创建用户(SCRAM,无需重启):
    • kafka-configs.sh --bootstrap-server localhost:9093 --alter --add-config ‘SCRAM-SHA-256=[password=]’ --entity-type users --entity-name user1
  • 客户端最小配置(client.properties):
    • security.protocol=SASL_SSL
    • sasl.mechanism=SCRAM-SHA-256
    • sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“user1” password=“”;
    • ssl.truststore.location=/etc/kafka/ssl/kafka.truststore.jks
    • ssl.truststore.password=truststore_password
  • 补充:
    • 若使用 SASL/PLAIN,务必与 TLS 同时使用,避免明文口令泄露。
    • 若使用 OAUTHBEARER,需提供令牌与回调处理,默认实现仅用于非生产验证。

四 授权与最小权限 ACL

  • 启用 ACL(server.properties):
    • authorizer.class.name=kafka.security.authorizer.AclAuthorizer
    • allow.everyone.if.no.acl.found=false
    • super.users=User:admin
  • 常用 ACL 示例(按需在命令中替换主体与资源):
    • 管理员全权(主题/组/集群):
      • /opt/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181
        –add --allow-principal User:admin --operation All --topic my_topic --group ‘*’ --cluster
    • 生产者写主题:
      • /opt/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181
        –add --allow-principal User:producer1 --operation Write --topic orders
    • 消费者组读主题:
      • /opt/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181
        –add --allow-principal User:consumer1 --operation Read --topic logs --group consumers
    • 查看 ACL:
      • /opt/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --list --topic orders
  • 提示:ACL 资源包含 Topic/Group/Cluster,操作含 Read/Write/Create/Delete/Describe/Alter 等,遵循最小权限原则。

五 网络安全与运维加固

  • 防火墙与监听地址:
    • UFW 仅放行 9093/tcp(SASL_SSL),如用 ZooKeeper 再放行 2181/tcp;生产建议监听具体 主机名/IP 而非 0.0.0.0,减少暴露面。
    • 示例:sudo ufw allow 9093/tcp;sudo ufw enable;sudo ufw status verbose
  • 服务与进程隔离:
    • 使用 systemdkafka 用户运行,限制文件权限与端口绑定能力;日志目录与证书目录仅对 kafka 可读。
  • 证书与凭据治理:
    • Keystore/Truststore 口令使用强口令并集中保管;定期轮换证书;对外部系统使用 最小权限 的专用账号与 ACL。
  • 监控与审计:
    • 持续审计 /var/log/kafka/server.logcontroller.log,关注认证失败、ACL 拒绝、异常连接与重启事件;对生产变更采用变更单与回滚预案。
  • 升级与补丁:
    • 及时更新 Debian 安全补丁、Java、Kafka 版本,修复已知漏洞;变更前在测试环境验证安全配置与业务兼容性。

0