kafka sasl权限认证需先配置sasl身份认证再叠加acl访问控制:服务端启用scram-sha-256或plain机制并配ssl加密,客户端匹配机制提供凭据,最后用kafka-acls.sh设置用户对topic的读写等细粒度权限。

Kafka 配置 SASL 权限认证,核心是先完成身份认证(SASL),再叠加访问控制(ACL),两者配合才能真正保障通信安全。单纯开启 SASL 只能验证“你是谁”,而 ACL 才决定“你能做什么”。下面分三块讲清楚关键配置点:
SASL 认证机制选型与服务端配置
SASL 本身不加密,需搭配 security.protocol 使用。生产环境推荐 SCRAM-SHA-256(动态加用户、不重启 Broker)或 PLAIN(简单,但必须配 SSL 加密通道)。
Broker 端需在 server.properties 中设置:
-
sasl.enabled.mechanisms=SCRAM-SHA-256(或PLAIN) -
security.inter.broker.protocol=SASL_SSL(Broker 间也走认证+加密) -
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256 -
listeners=SASL_SSL://:9093(暴露带认证的监听地址) -
listener.security.protocol.map=SASL_SSL:SASL_SSL
同时指定 JAAS 文件路径(如 kafka_server_jaas.conf),内容示例(SCRAM):
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required;
};
启动前通过 kafka-configs.sh 添加用户(无需重启):
bin/kafka-configs.sh --bootstrap-server localhost:9093 \ --alter --add-config 'SCRAM-SHA-256=[password=alice123]' \ --entity-type users --entity-name alice
客户端连接配置(Producer/Consumer)
客户端必须匹配服务端机制,并提供凭据:
-
security.protocol=SASL_SSL -
sasl.mechanism=SCRAM-SHA-256 -
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="alice" password="alice123"; -
ssl.truststore.location=/path/to/kafka.client.truststore.jks(SSL 必须配信任库)
若用 PLAIN,sasl.jaas.config 写法类似,但绝不可用于明文协议(SASL_PLAINTEXT)——否则密码裸奔。
ACL 权限控制绑定用户
认证通过后,靠 ACL 限定操作范围。例如:
- 允许用户
alice对 topicorders有读写权限:bin/kafka-acls.sh --bootstrap-server localhost:9093 \ --add --allow-principal "User:alice" \ --operation Read --operation Write \ --topic orders
- 拒绝所有用户对内部 topic 的访问:
bin/kafka-acls.sh --bootstrap-server localhost:9093 \ --add --deny-principal "User:*" \ --operation All --topic __consumer_offsets
ACL 规则按“精确匹配 > 前缀匹配 > 默认规则”生效,建议显式拒绝敏感操作。
不复杂但容易忽略











