Ubuntu Kafka安全配置有哪些要点
小樊
43
2025-11-21 15:52:11
Ubuntu上部署Kafka的安全配置要点
一 认证与授权
- 启用SASL并选择机制:优先使用SASL/SCRAM-SHA-512(可动态新增用户、无需重启),或SASL/PLAIN(简单但需配合TLS)。在 broker 端设置如:sasl.enabled.mechanisms=SCRAM-SHA-512、sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512,并按监听器配置 JAAS。客户端凭据可通过**kafka-configs.sh --alter --add-config ‘SCRAM-SHA-256/SCRAM-SHA-512=[password=…]’**创建。
- 配置JAAS:服务端在 server.properties 或通过启动参数指定 JAAS;客户端使用 JAAS 文件(如KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule … }),并通过环境变量如**KAFKA_OPTS=‘-Djava.security.auth.login.config=/path/kafka_client_jaas.conf’**加载。
- 启用ACL细粒度授权:对Topic/Group/Cluster等资源设置READ/WRITE/DESCRIBE/DELETE等权限,示例:kafka-configs.sh --zookeeper localhost:2181 --add-acl --allow-principal User:Reader --topic test。
- 高安全场景可引入Kerberos(GSSAPI),适用于企业统一身份认证体系。
二 传输加密与证书管理
- 启用TLS加密:配置listeners=SSL://:9093,并设置ssl.keystore.location/ssl.keystore.password、ssl.key.password、ssl.truststore.location/ssl.truststore.password;broker 间通信建议security.inter.broker.protocol=SSL。
- 双向认证(mTLS):开启ssl.client.auth=required,为客户端签发证书并导入到 broker 的server.truststore.jks;客户端配置ssl.keystore.location/ssl.keystore.password、ssl.key.password与ssl.truststore.location/ssl.truststore.password。
- 主机名校验:在部分云上或自签 CA 场景,常需将ssl.endpoint.identification.algorithm=(置空)以关闭主机名校验;企业内网使用受信 CA 时可开启以提升安全性。
- 证书制作要点:用keytool生成server.keystore.jks,用openssl生成ca-key/ca-cert,完成server 证书签发与CA 导入到信任库;客户端证书同样需要导入到client.truststore.jks并在客户端配置中引用。
三 网络安全与访问控制
- 最小化暴露面:仅开放必要端口(如9092/9093、2181),使用ufw/iptables限制来源 IP;云上配合VPC/安全组白名单。
- 禁用明文端口:生产环境建议禁用PLAINTEXT,仅保留SASL_SSL或SSL端口,降低未授权访问风险。
- 监听器与广告地址:正确设置listeners与advertised.listeners,避免将内网地址暴露给公网客户端;broker 间通信可单独指定inter.broker.listener.name。
- 操作系统最小权限:以非 root用户运行 Kafka,限制目录与文件权限,分离日志/数据/配置目录的访问权限。
四 审计监控与运维
- 启用安全审计:开启访问日志与审计日志,记录认证/授权/ACL变更等关键事件;结合SIEM进行实时告警与合规审计。
- 持续监控:监控异常连接、失败认证、Topic 权限变更等指标,定期巡检Kafka 与依赖组件的日志与配置。
- 变更与升级:证书轮换、ACL 调整、SASL 用户变更遵循变更流程并先在测试环境验证;定期更新Kafka 及依赖以修复已知漏洞。
五 快速配置示例
- 服务端 server.properties(SASL_SSL + SCRAM)
- 监听器与协议
- listeners=SASL_SSL://0.0.0.0:9093
- advertised.listeners=SASL_SSL://<broker_public_ip>:9093
- inter.broker.listener.name=SASL_SSL
- security.inter.broker.protocol=SASL_SSL
- SASL
- sasl.enabled.mechanisms=SCRAM-SHA-512
- sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
- 通过 JAAS 配置用户(示例 admin),或采用按监听器配置方式
- TLS
- ssl.keystore.location=/opt/kafka/ssl/server.keystore.jks
- ssl.keystore.password=<ks_pass>
- ssl.key.password=<key_pass>
- ssl.truststore.location=/opt/kafka/ssl/server.truststore.jks
- ssl.truststore.password=<ts_pass>
- ssl.client.auth=required
- ssl.enabled.protocols=TLSv1.2,TLSv1.3
- 客户端配置 kafka.properties(SCRAM-SHA-512)
- security.protocol=SASL_SSL
- sasl.mechanism=SCRAM-SHA-512
- ssl.truststore.location=/opt/kafka/ssl/client.truststore.jks
- ssl.truststore.password=<ts_pass>
- ssl.endpoint.identification.algorithm=
- JAAS:KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username=“app” password=“****”; };
- 命令示例:kafka-console-producer.sh --bootstrap-server <SASL_SSL_ADDR>:9093 --topic test --producer.config /opt/kafka/ssl/kafka.properties
- 防火墙
- sudo ufw allow 9093/tcp
- 如需 Zookeeper 管理端口:sudo ufw allow 2181/tcp