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.conf 与 JAAS;客户端使用 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,对 配置与证书 进行加密备份与恢复演练。
- 安全评估:使用 配置扫描器 与基线检查工具,持续发现风险并闭环整改。