在 Debian 上部署的 Kafka(通常用官方二进制包或通过 systemd 管理),鉴权一般和**认证(Authentication)+ 授权(Authorization)**一起做。Kafka 常见鉴权方式包括:
下面以 Debian + Kafka 3.x + SASL/SCRAM + ACL 为例,讲最常用、也是最推荐的“鉴权”做法。
假设:
/opt/kafka/opt/kafka/config/server.propertieskafka 用户运行sudo useradd -r kafka
server.properties# 监听 SASL
listeners=SASL_PLAINTEXT://:9092
advertised.listeners=SASL_PLAINTEXT://localhost:9092
# 安全协议
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
# 启用 ACL
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin
生产环境建议用
SASL_SSL
/opt/kafka/config/kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret";
};
编辑 /opt/kafka/bin/kafka-server-start.sh 或 systemd:
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
systemd 示例
[Service]
Environment="KAFKA_OPTS=-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
/opt/kafka/bin/kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter \
--add-config 'SCRAM-SHA-256=[iterations=8192,password=admin-secret]' \
--entity-type users \
--entity-name admin
客户端用户:
kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter \
--add-config 'SCRAM-SHA-256=[password=user1-pass]' \
--entity-type users \
--entity-name user1
client.properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="user1" password="user1-pass";
使用示例:
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic test \
--consumer.config client.properties
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:user1 \
--operation Read \
--topic test
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:user1 \
--operation Write \
--topic test
kafka-acls.sh --bootstrap-server localhost:9092 --list
ClassNotFoundKAFKA_OPTS 是否生效ufw allow 9092advertised.listeners 必须可被客户端访问allow.everyone.if.no.acl.found=false 必须设置✅ 推荐组合
如果你需要:
可以告诉我你的使用场景,我可以给你更精简或生产级配置。