Kafka
Categories:
4 分钟阅读
适用范围:Apache Kafka 2.x/3.x、KRaft 或 ZooKeeper 架构场景。
不适用标识说明:
- 使用
【不适用】明确标记现场可判定为不适用的控制点。 - 判定依据采用 GB/T 28448-2019“按测评对象实际处理流程和安全边界判定”的原则;Kafka 多为消息中间件,很多个人信息保护项需先确认消息内容和平台功能边界。
基础信息
核查命令:
ps -ef | grep kafka
grep -n "broker.id\\|node.id\\|listeners" config/server.properties 2>/dev/null
bin/kafka-topics.sh --version 2>/dev/null
- 备注:确认版本、Broker 角色、集群模式、监听地址、日志目录、数据目录和配置文件路径。
- 预期证据:版本截图、进程截图、配置文件截图、集群节点截图。
示例输出(节选)
ps -ef | grep kafka
kafka 2201 java -Xmx4G -server kafka.Kafka config/server.properties
config/server.properties:
broker.id=1
listeners=SASL_SSL://192.168.10.21:9093
bin/kafka-topics.sh --version
2.8.1 (Commit:839b886f9b732b15)
身份鉴别
A. 管理与客户端认证方式
核查命令:
grep -n "security.inter.broker.protocol\\|sasl.enabled.mechanisms\\|listeners\\|listener.security.protocol.map" config/server.properties 2>/dev/null
- 备注:核查是否启用 SASL、SSL、双向证书、Kerberos 等身份鉴别机制。
- 预期证据:认证配置截图、证书或 JAAS 配置截图。
示例输出(节选)
security.inter.broker.protocol=SASL_SSL
sasl.enabled.mechanisms=SCRAM-SHA-256
listener.security.protocol.map=SASL_SSL:SASL_SSL,PLAINTEXT:PLAINTEXT
B. 用户与主体
核查命令:
grep -R "KafkaServer\\|Client" config *.jaas 2>/dev/null
- 备注:如接入 LDAP、Kerberos、SCRAM,应结合主体、用户、服务账号统一核查。
- 预期证据:JAAS 配置截图、账号台账、访谈记录。
示例输出(节选)
config/kafka_server_jaas.conf:
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="***";
};
C. 口令与失败处理
核查命令:
grep -R "SCRAM\\|PLAIN\\|OAUTH" config 2>/dev/null
- 备注:Kafka 对登录失败锁定能力有限,通常通过认证平台、前置网关或主机控制实现等效措施。
- 【不适用】若 Kafka 未提供面向人工用户的交互式登录控制台,仅作为 Broker 接收客户端连接,则“人工用户登录失败锁定/会话超时”可判定为不适用;应转而核查 SASL、SSL、ACL 与网络控制。依据:GB/T 28448-2019 身份鉴别控制点按实际鉴别场景适用。
- 预期证据:认证方案说明、制度、平台材料。
示例输出(节选)
grep SCRAM/PLAIN/OAUTH conf
sasl.enabled.mechanisms=SCRAM-SHA-256
(采用 SCRAM-SHA-256,未启用弱 PLAIN 机制对外)
D. 运维会话与远程管理
核查命令:
grep -n "authorizer.class.name\\|super.users" config/server.properties 2>/dev/null
- 备注:重点关注运维是经 JumpServer、Ansible、发布平台还是直接登录主机操作。
- 预期证据:运维平台截图、堡垒机记录、制度。
示例输出(节选)
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
allow.everyone.if.no.acl.found=false
访问控制
A. ACL 与授权
核查命令:
bin/kafka-acls.sh --bootstrap-server <地址> --list 2>/dev/null
- 备注:应区分 Topic、Consumer Group、Cluster 等对象的授权,避免全部放开。
- 预期证据:ACL 列表截图、权限说明。
示例输出(节选)
bin/kafka-acls.sh --bootstrap-server 192.168.10.21:9093 --list(节选)
Current ACLs for resource `Topic:demo-order`:
principal=User:demo-producer, operation=WRITE
principal=User:demo-consumer, operation=READ, host=*
B. 监听与来源限制
核查命令:
grep -n "listeners\\|advertised.listeners" config/server.properties 2>/dev/null
- 备注:管理平面和业务平面应分离,敏感监听不宜对无关网络开放。
- 预期证据:监听配置截图、网络 ACL 材料。
示例输出(节选)
listeners=SASL_SSL://192.168.10.21:9093
advertised.listeners=SASL_SSL://mq.demo.local:9093
(仅开放 SASL_SSL 端口,PLAINTEXT 9092 未监听)
C. 默认账户与测试主题
核查命令:
bin/kafka-topics.sh --bootstrap-server <地址> --list 2>/dev/null
- 备注:测试主题、临时主题、无主业务对象应清理或纳入说明。
- 预期证据:主题清单截图、处置说明。
示例输出(节选)
demo-order
demo-payment
demo-log-collect
__consumer_offsets
__transaction_state
D. 文件与进程权限
核查命令:
ps -o user,pid,cmd -C java
ls -l config/server.properties 2>/dev/null
- 备注:运行账户不宜过高,配置和日志目录权限应最小化。
- 预期证据:运行用户截图、权限截图。
示例输出(节选)
USER PID COMMAND
kafka 2201 java -Xmx4G kafka.Kafka
-rw-r----- 1 kafka kafka 5678 config/server.properties
安全审计
A. Broker 日志
核查命令:
grep -n "log.dirs\\|authorizer.class.name" config/server.properties 2>/dev/null
find logs -type f 2>/dev/null | head
- 备注:区分 Broker 日志、控制器日志、授权日志和客户端接入日志。
- 预期证据:日志目录截图、日志样例。
示例输出(节选)
log.dirs=/data/kafka/logs
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
find logs:
server.log
controller.log
state-change.log
B. 认证与授权审计
核查命令:
grep -R "authorizer" config 2>/dev/null
- 备注:应能追踪失败认证、拒绝授权和关键管理操作。
- 预期证据:审计截图、日志平台材料。
示例输出(节选)
grep authorizer config
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
(未授权主体默认拒绝;broker 级操作日志由 server.log 记录)
C. 留存与轮转
核查命令:
grep -R "log4j" config 2>/dev/null
- 备注:日志留存与轮转通常由 Log4j 或系统侧实现,现场需明确留存周期。
- 预期证据:轮转配置截图、制度、访谈记录。
示例输出(节选)
config/log4j.properties:
log4j.appender.kafkaAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stateChangeAppender=DailyRollingFileAppender
(按日轮转,配合外部清理脚本保留 30 天)
D. 集中审计
核查命令:
journalctl | grep kafka | tail -n 50
- 备注:Kafka 现场建议结合主机日志、日志平台和集群监控平台综合取证。
- 预期证据:平台截图、告警截图。
示例输出(节选)
journalctl | grep kafka(节选)
Aug 24 08:59:59 host systemd[1]: Started kafka.service
Aug 24 09:00:03 host kafka[2201]: [KafkaServer id=1] started (kafka.server.KafkaServer)
Aug 24 10:14:20 host kafka[2201]: [SocketServer] Failed authentication with /192.168.8.66 (Sasl authentication error)
数据完整性
A. 副本与同步状态
核查命令:
bin/kafka-topics.sh --bootstrap-server <地址> --describe 2>/dev/null
- 备注:关注副本因子、ISR、未同步副本和控制器状态。
- 预期证据:主题描述截图、集群状态截图。
示例输出(节选)
bin/kafka-topics.sh --describe(节选)
Topic: demo-order PartitionCount: 6 ReplicationFactor: 3
Topic: demo-order Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
Topic: demo-order Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1
(多副本且 ISR 完整,保障消息完整性)
B. 传输完整性
核查命令:
grep -n "ssl\\|sasl" config/server.properties 2>/dev/null
- 备注:Broker 间通信和客户端接入若依赖 TLS/SASL,应明确其完整性保护作用。
- 预期证据:TLS/SASL 配置截图、证书材料。
示例输出(节选)
ssl.keystore.location=/etc/kafka/ssl/broker.jks
ssl.truststore.location=/etc/kafka/ssl/truststore.jks
ssl.client.auth=required
sasl.enabled.mechanisms=SCRAM-SHA-256
数据保密性
A. TLS 与加密传输
核查命令:
grep -n "ssl.keystore\\|ssl.truststore\\|ssl.client.auth" config/server.properties 2>/dev/null
- 备注:敏感业务消息和管理连接应优先通过 TLS 保护。
- 预期证据:SSL 参数截图、证书截图。
示例输出(节选)
ssl.keystore.location=/etc/kafka/ssl/broker.jks
ssl.truststore.location=/etc/kafka/ssl/truststore.jks
ssl.client.auth=required
ssl.endpoint.identification.algorithm=HTTPS
B. 敏感配置保护
核查命令:
grep -R "password\\|secret\\|jaas" config 2>/dev/null
- 备注:JAAS 文件、Keystore/Truststore 密码、脚本参数中的敏感信息是重点。
- 预期证据:脱敏截图、权限截图、密钥管理说明。
示例输出(节选)
grep password/jaas config
config/kafka_server_jaas.conf: password="***";
config/client.properties: ssl.truststore.password=***
(密钥库口令经 KMS 加密或环境变量注入,文件权限 600)
备份恢复
A. 配置备份
核查命令:
find config -type f 2>/dev/null
- 备注:应覆盖
server.properties、JAAS、证书、脚本和集群关键配置。 - 预期证据:备份目录截图、策略说明。
示例输出(节选)
config/server.properties
config/consumer.properties
config/kafka_server_jaas.conf
config/log4j.properties
B. 元数据与日志段保护
核查命令:
grep -n "log.dirs" config/server.properties 2>/dev/null
- 备注:主题数据和元数据保护依赖集群副本、磁盘备份和故障切换策略综合实现。
- 预期证据:数据目录截图、备份说明、架构材料。
示例输出(节选)
log.dirs=/data/kafka/logs
ls /data/kafka/logs | head
demo-order-0/ demo-order-1/ __consumer_offsets-0/
C. 恢复能力
核查命令:
bin/kafka-topics.sh --bootstrap-server <地址> --list 2>/dev/null
- 备注:现场应说明节点故障、Topic 恢复、配置回滚或重建策略。
- 预期证据:恢复手册、演练记录、工单。
示例输出(节选)
bin/kafka-topics.sh --list
demo-order
demo-payment
demo-log-collect
__consumer_offsets
剩余信息保护
A. 历史日志段与测试主题
核查命令:
find . -type d | grep -E "logs|old|backup"
- 备注:历史日志段、测试主题、临时脚本和无用 broker 数据应及时清理。
- 预期证据:目录截图、清理说明。
示例输出(节选)
find . -type d
logs/ logs/archive/ old-broker-backup/
(存在归档目录与旧版本备份,纳入备份策略管理)
B. 凭据残留
核查命令:
grep -R "password\\|secret\\|token" . 2>/dev/null
- 备注:配置、日志和脚本中残留敏感信息应记录并整改。
- 预期证据:脱敏截图、整改说明。
示例输出(节选)
grep password/secret/token .(节选)
config/kafka_server_jaas.conf: password="***"
logs/server.log:[2026-08-24 10:14:20] Sasl authentication error for User:demo-consumer
(口令均为掩码注入,日志中无敏感明文)
个人信息保护
A. 消息主题中的个人信息
核查命令:
bin/kafka-topics.sh --bootstrap-server <地址> --list 2>/dev/null
- 备注:不建议现场直接消费敏感消息,可通过主题命名、业务说明和授权流程判断是否承载个人信息。
- 【不适用】若 Kafka 传输内容经业务确认不含个人信息,或仅承载系统事件、监控指标、非敏感技术消息,则该点可判定为不适用。依据:GB/T 28448-2019 个人信息保护控制点仅适用于实际处理个人信息的对象。
- 预期证据:主题清单截图、业务访谈记录。
示例输出(节选)
bin/kafka-topics.sh --list
demo-order
demo-payment
__consumer_offsets
(topic 命名不包含个人信息字段)
B. 导出与共享控制
核查命令:
find . -type f | grep -i "export\\|consumer"
- 备注:需关注测试消费者、导出脚本、离线同步任务对个人信息的复制和扩散风险。
- 【不适用】若 Kafka 平台无面向运维的消息导出、批量共享能力,且消息中亦不含个人信息,则该点对 Kafka 组件可判定为不适用。依据:GB/T 28448-2019 按对象实际处理和输出能力判定。
- 预期证据:权限说明、制度、访谈记录。
示例输出(节选)
find . -type f | grep consumer
bin/kafka-console-consumer.sh
bin/kafka-consumer-groups.sh
(控制台消费工具保留,使用需堡垒机审批并留痕)
入侵防范
A. 管理端口与未授权访问
核查命令:
grep -n "listeners\\|advertised.listeners" config/server.properties 2>/dev/null
ss -lntp | grep 9092
- 备注:重点核查 Broker、控制面和管理接口是否暴露到无关网络。
- 预期证据:端口截图、配置截图、网络 ACL 材料。
示例输出(节选)
listeners=SASL_SSL://192.168.10.21:9093
ss -lntp | grep 9092
(9092 无监听输出,仅 9093 SASL_SSL 对外)
LISTEN 0 50 192.168.10.21:9093
B. 高危 Topic 与默认开放能力
核查命令:
bin/kafka-acls.sh --bootstrap-server <地址> --list 2>/dev/null
- 备注:关注未启用 ACL、测试 Topic、大范围匿名访问和过度授权问题。
- 预期证据:ACL 截图、Topic 清单、处置说明。
示例输出(节选)
bin/kafka-acls.sh --list(节选)
Current ACLs for resource `Group:demo-group`:
principal=User:demo-consumer, operation=READ
Current ACLs for resource `Cluster:kafka-cluster`:
principal=User:admin, operation=ClusterAction
C. 版本与漏洞风险
核查命令:
bin/kafka-topics.sh --version 2>/dev/null
- 备注:需确认版本、依赖组件和历史漏洞整改情况。
- 预期证据:版本截图、补丁或整改记录。
示例输出(节选)
bin/kafka-topics.sh --version
2.8.1 (Commit:839b886f9b732b15)
(版本 2.8.1,已知漏洞修复情况见补丁台账)
D. 防护与告警联动
核查命令:
journalctl | grep kafka | tail -n 50
- 备注:Kafka 入侵防范通常依赖网络隔离、主机防护、日志平台和监控告警联动。
- 预期证据:平台截图、告警记录、主机防护材料。
示例输出(节选)
journalctl | grep kafka(节选)
Aug 24 10:14:20 host kafka[2201]: Failed authentication with /192.168.8.66
Aug 24 10:14:25 host firewall: DROP SRC=192.168.8.66 DST=192.168.10.21 PROTO=TCP DPT=9093
(认证失败事件联动防火墙封禁,并上送安全平台告警)