Linux上Kafka安全配置实操指南
一 安全基线
sudo chown -R kafka:kafka /opt/kafka /var/log/kafka。二 传输加密与网络边界
server.properties 中配置 ssl.keystore.location、ssl.keystore.password、ssl.truststore.location、ssl.truststore.password,并将监听器设为 SSL 或 SASL_SSL。listeners 与 advertised.listeners,避免将内网地址暴露给公网客户端。三 身份认证与授权
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_producer="producer-secret"
user_consumer="consumer-secret";
};
listeners=SASL_PLAINTEXT://:9092
advertised.listeners=SASL_PLAINTEXT://your-hostname:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=SCRAM-SHA-256
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
listener.name.sasl_plaintext.scram-sha-256.sasl.jaas.config=file:/path/to/kafka_server_jaas.conf
export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf"。bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=producer-secret]' --entity-type users --entity-name producer(同理创建 consumer)。bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic \
--producer-property security.protocol=SASL_PLAINTEXT \
--producer-property sasl.mechanism=SCRAM-SHA-256 \
--producer-property sasl.jaas.config='org.apache.kafka.common.security.scram.ScramLoginModule required username="producer" password="producer-secret";'
authorizer.class.name=org.apache.kafka.common.security.auth.SimpleAclAuthorizer,将 allow.everyone.if.no.acl.found=false,并通过 super.users=User:admin 配置超级用户;使用 kafka-acls.sh 按 User:principal 授予最小权限(如 Read/Write/Describe 等)。四 审计监控与维护
五 快速检查清单
| 领域 | 关键动作 | 验证方式 |
|---|---|---|
| 身份 | 启用 SASL/SCRAM 或 Kerberos | 客户端带凭据连接成功,非法凭据被拒 |
| 授权 | 启用 ACL、最小权限、super.users |
未授权操作被拒绝,授权用户仅获所需权限 |
| 加密 | 启用 SSL/TLS 或 SASL_SSL | 抓包或日志显示加密通道建立 |
| 网络 | firewalld/iptables 白名单、仅开放 9092 | 非白名单 IP 无法连接 |
| 主机 | 专用 kafka 用户、目录权限正确 | ps -u kafka、ls -ld 检查属主与权限 |
| 审计 | 日志集中、关键操作可追踪 | 审计日志与告警命中异常事件 |