温馨提示×

Kafka Linux配置中安全设置怎么做

小樊
33
2025-12-21 01:39:53
栏目: 智能运维

Kafka 在 Linux 上的安全配置清单

一 操作系统与网络加固

  • 运行身份与文件权限:为 Kafka 创建专用系统用户与用户组,数据、日志、配置目录仅对该用户可读写;例如:chown -R kafka:kafka /var/lib/kafka /var/log/kafka /opt/kafka/config。避免使用 root 直接运行。
  • 防火墙与端口:仅开放必要端口(如 9092/9093),对公网或跨机房访问限制为可信 IP/网段;如使用 firewalld:firewall-cmd --permanent --add-rich-rule=‘rule family=“ipv4” source address=“10.0.0.0/8” port port=“9092” protocol=“tcp” accept’ && firewall-cmd --reload。
  • 主机加固:启用 SELinux/AppArmor 的 Kafka 策略,限制不必要的系统调用与目录访问;SSH 仅允许密钥登录、限制来源 IP、禁用 root 直连。
  • 入侵防护与审计:部署 fail2ban 对暴力登录进行封禁;启用 auditd 记录关键文件与命令访问;集中采集与分析 /var/log/ 与 Kafka 审计日志。

二 传输与身份认证

  • 加密传输:优先启用 SSL/TLS 保护数据链路,使用 keytool 生成 keystore/truststore,在 server.properties 中配置 listener 为 SSLSASL_SSL,并设置 ssl.keystore.location、ssl.truststore.location、ssl.keystore.password、ssl.truststore.password 等参数。
  • SASL 认证(二选一或组合):
    • SASL/PLAIN:简单用户名/密码,适合快速接入;需在 JAAS 中配置 KafkaServer,并为客户端提供凭据。
    • SASL/SCRAM:支持凭据动态管理(增删改密无需重启),推荐用于生产;示例机制为 SCRAM-SHA-256/512
  • 高安全场景:使用 SASL/GSSAPI(Kerberos) 集成企业目录(如 AD/LDAP),满足强认证与合规要求。
  • 监听器与协议:将 inter-broker 通信与客户端访问统一到安全监听器,例如 listeners=SASL_SSL://0.0.0.0:9093,security.inter.broker.protocol=SASL_SSL;对外 advertised.listeners 使用可解析的主机名或 IP
  • 启动参数:通过环境变量加载 JAAS,例如:export KAFKA_OPTS=“-Djava.security.auth.login.config=/opt/kafka/conf/kafka_server_jaas.conf”。

三 授权与访问控制

  • 启用 ACL:在 server.properties 中设置 authorizer.class.name=kafka.security.authorizer.AclAuthorizer,将 allow.everyone.if.no.acl.found 设为 false,并配置 super.users=User:admin 以便应急。
  • 用户与权限管理:
    • SCRAM 用户:使用 kafka-configs.sh 创建/修改用户,例如:kafka-configs.sh --alter --add-config ‘SCRAM-SHA-256=[password=producer-secret]’ --entity-type users --entity-name producer。
    • ACL 授权:按“主体-资源-操作-主机”最小权限授予,例如授予 producer 对主题 test-topic 的写权限与 consumer 的读权限:
      • kafka-acls.sh --add --allow-principal User:producer --operation Write --topic test-topic
      • kafka-acls.sh --add --allow-principal User:consumer --operation Read --topic test-topic
  • 验证:以对应用户凭据启动生产/消费,确认无权限操作被拒绝。

四 审计监控与持续运维

  • 日志与审计:开启 Kafka 访问日志controller/request 日志,集中到 SIEM 或日志平台,设置告警规则(异常连接、频繁鉴权失败、Topic 被未授权访问等)。
  • 监控指标:采集 请求耗时、错误率、请求速率、网络吞吐、Broker/分区负载 等,结合阈值与异常基线进行预警。
  • 备份与演练:定期备份 Topic 配置、ACL、密钥库/信任库 与关键数据,定期演练 恢复流程切换演练
  • 补丁与版本:及时升级 Kafka 版本 与依赖组件,修复已知漏洞;同步更新 操作系统与安全组件 补丁。

五 快速落地示例 SASL/SCRAM 最小配置

  • 生成 JAAS(/opt/kafka/conf/kafka_server_jaas.conf):
    KafkaServer {
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username=“admin”
    password=“Admin@123”
    user_admin=“Admin@123”
    user_producer=“Prod@123”
    user_consumer=“Cons@123”;
    };
  • server.properties 关键项:
    listeners=SASL_SSL://0.0.0.0:9093
    advertised.listeners=SASL_SSL://your-hostname:9093
    security.inter.broker.protocol=SASL_SSL
    sasl.enabled.mechanisms=SCRAM-SHA-256
    sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
    listener.name.sasl_ssl.scram-sha-256.sasl.jaas.config=file:/opt/kafka/conf/kafka_server_jaas.conf
    authorizer.class.name=kafka.security.authorizer.AclAuthorizer
    allow.everyone.if.no.acl.found=false
    super.users=User:admin
  • 创建用户:
    kafka-configs.sh --alter --add-config ‘SCRAM-SHA-256=[password=Prod@123]’ --entity-type users --entity-name producer
    kafka-configs.sh --alter --add-config ‘SCRAM-SHA-256=[password=Cons@123]’ --entity-type users --entity-name consumer
  • 启动命令:
    export KAFKA_OPTS=“-Djava.security.auth.login.config=/opt/kafka/conf/kafka_server_jaas.conf”
    bin/kafka-server-start.sh -daemon config/server.properties
  • 客户端最小配置(示例):
    security.protocol=SASL_SSL
    sasl.mechanism=SCRAM-SHA-256
    sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“producer” password=“Prod@123”;
  • 说明:生产环境请将 SASL_PLAINTEXT 替换为 SASL_SSL;为 Zookeeper/KRaft 元数据面也配置同等强度的认证与 ACL,避免成为“后门”。

0