Kafka

适用范围: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
(认证失败事件联动防火墙封禁,并上送安全平台告警)