Linux Kafka安全配置指南
导读:一 安全目标与总体架构 面向 Linux 上的 Apache Kafka,建议同时启用:传输加密(SSL/TLS)、身份认证(SASL/SCRAM 或 Kerberos/GSSAPI)、授权(ACL)、网络与系统加固(防火墙、最小权限、审...
一 安全目标与总体架构
- 面向 Linux 上的 Apache Kafka,建议同时启用:传输加密(SSL/TLS)、身份认证(SASL/SCRAM 或 Kerberos/GSSAPI)、授权(ACL)、网络与系统加固(防火墙、最小权限、审计)。
- 推荐的监听器组合:对外提供 SASL_SSL:// 或 SSL://,Broker 间通信使用 SASL_SSL:// 或 SSL://,杜绝明文通道。
- 基础环境建议:至少 4GB 内存(生产建议 8GB+),安装 Java 11+,并创建专用的 kafka 系统用户运行进程。
二 操作系统与网络加固
- 最小权限与运行账户
- 创建专用用户与组(如 kafka:kafka),将 Kafka 目录属主设为 kafka,禁止 root 直接运行;按最小权限配置目录与文件权限。
- 防火墙与网络隔离
- 仅开放必要端口(如 9092/9093/2181),对管理网与业务网进行白名单控制;示例(firewalld):
- 开放端口:
firewall-cmd --permanent --add-port=9092/tcp - 白名单网段:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept' - 重载:
firewall-cmd --reload
- 开放端口:
- 仅开放必要端口(如 9092/9093/2181),对管理网与业务网进行白名单控制;示例(firewalld):
- 主机加固
- 启用 SELinux/AppArmor 强制访问控制;限制 SSH 仅密钥登录、禁用 root 远程登录;关闭不必要服务(如 telnet/ftp)。
- 审计与监控
- 启用 auditd 记录关键文件与命令;部署 JMX 监控端口与日志轮转,配置磁盘/内存告警。
三 传输加密 SSL TLS
- 生成密钥库与信任库(Java keytool)
- 生成 Broker 密钥对与密钥库(JKS 或 PKCS12),导出公钥证书到信任库;为客户端分发信任库。
- server.properties 关键配置
- 启用加密监听器与协议:
listeners=SSL://your.host:9093security.inter.broker.protocol=SSL
- 指定密钥库/信任库与口令:
ssl.keystore.location=/path/to/kafka.keystore.jksssl.keystore.password=YourKeystorePassssl.key.password=YourKeyPassssl.truststore.location=/path/to/kafka.truststore.jksssl.truststore.password=YourTruststorePass
- 启用加密监听器与协议:
- 客户端连接示例
security.protocol=SSLssl.truststore.location=/path/to/client.truststore.jksssl.truststore.password=YourTruststorePass
- 说明
- 若同时启用 SASL 与 SSL,监听器使用 SASL_SSL://,并在 SASL 层叠加认证。
四 身份认证 SASL
- SASL/SCRAM(推荐,动态口令、无需证书)
- 创建 JAAS 配置文件(kafka_server_jaas.conf):
KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-secret" user_admin="admin-secret" user_producer="producer-secret" user_consumer="consumer-secret"; } ;
- server.properties 启用 SCRAM:
listeners=SASL_PLAINTEXT://:9092(或 SASL_SSL://:9093)security.inter.broker.protocol=SASL_PLAINTEXT(或 SASL_SSL)sasl.enabled.mechanisms=SCRAM-SHA-256sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256listener.name.sasl_plaintext.scram-sha-256.sasl.jaas.config=file:/path/to/kafka_server_jaas.conf
- 动态创建用户(Kafka 2.x 使用 ZooKeeper;KRaft 使用 bootstrap-acl 工具):
bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=producer-secret]' --entity-type users --entity-name producer
- 客户端示例(SASL_PLAINTEXT):
- 生产者:
--producer-property security.protocol=SASL_PLAINTEXT --producer-property sasl.mechanism=SCRAM-SHA-256 --producer-property sasl.jaas.config='org.apache.kafka.common.security.scram.ScramLoginModule required username="producer" password="producer-secret"; ' - 消费者:类似添加
security.protocol、sasl.mechanism、sasl.jaas.config
- 生产者:
- 创建 JAAS 配置文件(kafka_server_jaas.conf):
- Kerberos/GSSAPI(企业统一认证)
- 部署 KDC,创建 Kafka/hostname@REALM 服务主体,分发 keytab;server.properties 启用:
listeners=SASL_SSL://:9093security.inter.broker.protocol=SASL_SSLsasl.enabled.mechanisms=GSSAPIsasl.kerberos.service.name=kafka
- 客户端使用
security.protocol=SASL_SSL与sasl.mechanism=GSSAPI并提供 JAAS 配置。
- 部署 KDC,创建 Kafka/hostname@REALM 服务主体,分发 keytab;server.properties 启用:
五 授权与审计 ACL
- 启用 ACL(基于 Principal 的资源授权)
- 创建测试 Topic:
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server your.host:9093 --partitions 1 --replication-factor 1 - 授予权限(示例为 SCRAM 用户):
- 生产权限:
bin/kafka-acls.sh --bootstrap-server your.host:9093 --add --allow-principal User:producer --operation Write --topic test-topic - 消费权限:
bin/kafka-acls.sh --bootstrap-server your.host:9093 --add --allow-principal User:consumer --operation Read --topic test-topic - 组权限:
--group Group:console-consumer
- 生产权限:
- 创建测试 Topic:
- 审计与合规
- 启用 Kafka 访问日志 与 JMX 指标监控;在 ZooKeeper 侧开启 ACL(如启用 SASL/Kerberos,务必同步加固 ZK 访问)。
- 快速验证
- 使用带认证的 Console Producer/Consumer 对 test-topic 进行生产/消费,验证 ACL 是否生效。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Kafka安全配置指南
本文地址: https://pptw.com/jishu/753725.html
