ubuntu如何保障kafka配置安全
小樊
41
2025-11-29 13:26:58
Ubuntu上保障Kafka配置安全的实操清单
一 基础加固
- 运行身份与文件权限:为 Kafka 创建专用系统用户与组(如 kafka:kafka),将安装目录与日志目录归属该用户,仅授予必要权限;服务以最小权限运行,避免使用 root。
- 最小暴露面:仅开放必要端口(如 9092/9093),并将 Kafka 与 Zookeeper 部署在内网或受控网段,避免公网直连。
- 防火墙策略:使用 UFW 仅放行管理网段与业务网段对 Kafka 端口的访问,例如:sudo ufw allow from 10.0.0.0/8 to any port 9093 proto tcp;按需限制 Zookeeper 2181 的访问源。
- 系统与依赖:保持 Ubuntu 与 Java/Kafka 的安全补丁为最新,及时修复已知漏洞。
二 传输加密与认证
- 方案选型:优先采用 SASL_SSL(认证 + 加密);如暂无法启用 TLS,可先用 SASL_PLAINTEXT,但应尽快迁移到加密通道。
- 生成密钥与信任库(JKS,示例):
- 服务器密钥库:keytool -genkey -alias kafka -keyalg RSA -keystore kafka.server.keystore.jks -validity 3650
- 导出并分发证书:keytool -export -alias kafka -file kafka.server.crt -keystore kafka.server.keystore.jks
- 客户端/集群信任库:keytool -import -alias kafka -file kafka.server.crt -keystore kafka.server.truststore.jks
- Broker 端关键配置(server.properties):
- listeners=SASL_SSL://0.0.0.0:9093
- advertised.listeners=SASL_SSL://<broker_fqdn_or_ip>:9093
- security.inter.broker.protocol=SASL_SSL
- sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
- sasl.enabled.mechanisms=SCRAM-SHA-256
- ssl.truststore.location=/path/kafka.server.truststore.jks;ssl.truststore.password=***
- ssl.keystore.location=/path/kafka.server.keystore.jks;ssl.keystore.password=;ssl.key.password=
- 建议限定协议与套件:ssl.enabled.protocols=TLSv1.2,TLSv1.3;ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384
- 客户端示例(producer.properties/consumer.properties):
- security.protocol=SASL_SSL;sasl.mechanism=SCRAM-SHA-256
- sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“app-user” password="******";
三 身份认证与授权
- 动态创建用户(SCRAM,无需重启):
- 创建用户:kafka-configs.sh --bootstrap-server broker:9093 --alter --add-config ‘SCRAM-SHA-256=[iterations=8192,password=******]’ --entity-type users --entity-name app-user
- 如仍使用 Zookeeper 存储 ACL(旧版本),可用:kafka-configs.sh --zookeeper zk:2181 --alter --add-config ‘SCRAM-SHA-256=[iterations=8192,password=******]’ --entity-type users --entity-name app-user
- 启用 ACL(示例):
- 创建主题:kafka-topics.sh --bootstrap-server broker:9093 --create --topic orders --partitions 3 --replication-factor 3
- 授予权限:
- 生产权限:kafka-acls.sh --bootstrap-server broker:9093 --add --allow-principal User:app-user --operation Write --topic orders
- 消费权限:kafka-acls.sh --bootstrap-server broker:9093 --add --allow-principal User:app-user --operation Read --topic orders --group app-group
- 默认拒绝:为关键资源设置默认拒绝策略(Deny-All),仅对明确主体授予最小权限,遵循 最小权限原则。
四 元数据与内部通信安全
- Zookeeper 安全:为 Zookeeper 启用 SASL 认证(如 GSSAPI/Kerberos 或 DIGEST-MD5),并限制客户端来源;ACL 保护 znode,避免未授权访问元数据。
- Broker 间通信:将 inter.broker.protocol 设置为 SASL_SSL,与客户端一致使用 SCRAM-SHA-256 或 Kerberos,确保集群内部链路也经过认证与加密。
- 监听与广告地址:区分 listeners(供外部接入)与 advertised.listeners(客户端实际连接地址),避免误暴露内网地址;禁用未使用的 PLAINTEXT 监听。
五 运维监控与审计
- 日志与审计:启用 Kafka 访问日志 与 controller/authorizer 日志,集中到 SIEM 或日志平台进行实时监控与告警;定期审计 ACL 变更 与异常连接。
- 证书与凭据管理:为 keystore/truststore 设置强口令并妥善管控,证书到期前滚动更新;凭据使用 Vault/KMS 等安全存储与轮换机制。
- 备份与恢复:定期备份 Topic 数据 与 ACL 配置,并进行恢复演练;在变更窗口内执行滚动升级与回滚预案。
- 基线核查:建立安全基线(协议/套件、监听端口、ACL 规则、用户清单、备份策略),并纳入变更管理流程。