在 Debian 上给 Kafka 做鉴权(Authentication + Authorization),常见做法是使用 SASL + ACL。下面我按「从零到可用」的思路,给你一份实用指南(基于 Debian 11/12 + Kafka 3.x)。
Kafka 里通常分两层:
最常用组合:
sudo apt update
sudo apt install openjdk-17-jdk -y
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz
mv kafka_2.13-3.7.0 /opt/kafka
/opt/kafka/config/kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret";
};
# 监听
listeners=SASL_PLAINTEXT://:9092
advertised.listeners=SASL_PLAINTEXT://your-debian-ip:9092
# 安全协议
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
# 允许匿名(初期可开,后面关)
allow.everyone.if.no.acl.found=true
# 启用 ACL
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
/opt/kafka/bin/kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter --add-config 'SCRAM-SHA-256=[password=alice-secret]' \
--entity-type users --entity-name alice
client.properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="alice" \
password="alice-secret";
测试:
kafka-console-producer.sh --bootstrap-server localhost:9092 \
--topic test --producer.config client.properties
kafka-acls.sh --bootstrap-server localhost:9092 \
--add --allow-principal User:alice \
--operation Write --topic test
kafka-acls.sh --bootstrap-server localhost:9092 \
--add --allow-principal User:alice \
--operation Read --topic test \
--group test-group
✅ 用 SASL_SSL(TLS)
✅ allow.everyone.if.no.acl.found=false
✅ 用 super.users 控制管理员
✅ Kafka + ZooKeeper 都做网络隔离
openjdk-17authorizer.class.name如果你愿意,我可以:
你现在是 测试环境还是生产环境?