温馨提示×

Linux Kafka配置中的安全设置指南

小樊
43
2025-11-29 09:05:56
栏目: 智能运维

Linux Kafka 安全设置指南

一 安全基线

  • 使用专用的系统账户运行 Kafka,最小化文件与进程权限,分离配置、数据与日志目录的属主与权限,避免以 root 身份运行。
  • 网络与边界防护:仅开放必要端口(如 9092/9093),通过 firewalld/iptables/ufw 限制来源;在容器或云环境中启用网络隔离与命名空间隔离。
  • 加密与机密:启用 SSL/TLS 保护传输;对敏感凭据使用 密钥库/信任库 妥善管控,禁止明文配置。
  • 身份与授权:启用 SASL 认证(如 SCRAM、Kerberos),按“最小权限”配置 ACL
  • 审计与监控:开启 审计日志,集中采集与告警,定期复盘异常。
  • 运维与供应链:及时 升级 Kafka 与依赖,定期 备份与恢复演练,并进行 安全配置扫描 与基线核查。

二 传输加密 SSL TLS

  • 生成密钥与证书(示例):
    • 服务器密钥库:
      keytool -genkey -alias kafka-server -keystore kafka.server.keystore.jks -storepass password -validity 365 -keysize 2048
    • 导出服务器证书并导入信任库:
      keytool -export -alias kafka-server -file kafka.server.crt -keystore kafka.server.keystore.jks -storepass password
      keytool -import -alias kafka-server -file kafka.server.crt -keystore kafka.server.truststore.jks -storepass password
  • Broker 端配置 server.properties(示例):
    listeners=SSL://:9093
    ssl.keystore.location=/etc/kafka/kafka.server.keystore.jks
    ssl.keystore.password=password
    ssl.key.password=password
    ssl.truststore.location=/etc/kafka/kafka.server.truststore.jks
    ssl.truststore.password=password
    ssl.enabled.protocols=TLSv1.2
    ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384
  • 客户端配置(示例):
    security.protocol=SSL
    ssl.truststore.location=/etc/kafka/kafka.client.truststore.jks
    ssl.truststore.password=password

    双向认证时增加:

    ssl.keystore.location=/etc/kafka/kafka.client.keystore.jks
    ssl.keystore.password=password
    ssl.key.password=password
  • 主机名校验:生产建议开启 ssl.endpoint.identification.algorithm=HTTPS;若使用 IP 或测试环境,可临时置空该参数以避免校验失败。
  • 防火墙(CentOS 示例):
    firewall-cmd --permanent --zone=public --add-port=9093/tcp
    firewall-cmd --reload

三 身份认证 SASL

  • 机制选择:优先 SCRAM-SHA-256/512(动态增删用户、无需重启),或 Kerberos/GSSAPI(企业统一认证),不建议在公网使用 PLAIN
  • SCRAM 示例(Broker 与客户端):
    • 创建用户(示例):
      kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config ‘SCRAM-SHA-256=[password=admin-secret]’ --entity-type users --entity-name admin
    • JAAS(示例,kafka_server_jaas.conf):
      KafkaServer {
      org.apache.kafka.common.security.scram.ScramLoginModule required
      username=“admin” password=“admin-secret”;
      };
    • server.properties(示例):
      listeners=SASL_SSL://:9093
      security.inter.broker.protocol=SASL_SSL
      sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
      sasl.enabled.mechanisms=SCRAM-SHA-256

      方式一:直接在配置中写入 JAAS

      sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“admin” password=“admin-secret”;

      方式二:启动时指定 JAAS 文件

      export KAFKA_OPTS=“-Djava.security.auth.login.config=/path/kafka_server_jaas.conf”

    • 客户端(示例):
      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”;
  • Kerberos 要点:准备 principal/keytab,Broker 侧设置 sasl.kerberos.service.name=kafka,JVM 指定 krb5.confJAAS;客户端使用 keytab 或票据缓存进行认证。

四 授权与访问控制 ACL

  • 启用 ACL(Broker 端 server.properties):
    authorizer.class.name=org.apache.kafka.common.security.auth.SimpleAclAuthorizer
    allow.everyone.if.no.acl.found=false
    super.users=User:admin
  • 常用 ACL 操作(示例):

    授予用户 alice 对主题 test 的读写

    kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ –add --allow-principal User:alice --operation Read --operation Write --topic test

    查看 ACL

    kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ –list --topic test
  • 注意:执行 ACL 前需先完成 SASL 认证;为生产环境规划 资源级(Topic/Group/Cluster)操作级(Read/Write/Create/Delete/Describe) 权限矩阵。

五 运维与加固清单

  • 系统与进程:以 kafka 专用用户运行,目录权限最小化(如 /var/lib/kafka /var/log/kafka /etc/kafka 属主为 kafka:kafka)。
  • 网络与端口:仅放通 9092/9093 等必要端口;跨机房/公网访问强制 SASL_SSL
  • 日志与审计:开启 DEBUG/INFO 安全相关日志,集中到 SIEM 进行规则告警与溯源。
  • 更新与备份:定期升级 Kafka/OS/JVM,对 配置与证书 进行加密备份与恢复演练。
  • 安全评估:使用 配置扫描器 与基线检查工具,持续发现风险并闭环整改。

0