在 Debian 上部署的 Kafka(通常是 Apache Kafka,而不是云厂商托管的),鉴权一般指的是「身份认证(Authentication)」+「权限控制(Authorization)」。Kafka 原生支持以下几种常用方式:
| 方式 | 说明 | 常用场景 |
|---|---|---|
| SASL/PLAIN | 用户名 + 密码 | 内部系统、测试 |
| SASL/SCRAM | 用户名 + 密码(更安全) | 生产推荐 |
| SASL/GSSAPI | Kerberos | 企业域环境 |
| SSL | 仅加密 / 双向证书 | 传输安全 |
| ACL | 配合 SASL 使用 | 权限控制 |
✅ 生产推荐:SASL/SCRAM + ACL + SSL
# 假设 Kafka 解压在
/opt/kafka
cd /opt/kafka
server.properties# 开启监听
listeners=SASL_PLAINTEXT://:9092
advertised.listeners=SASL_PLAINTEXT://your-host:9092
# 安全协议
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
# 开启 ACL
allow.everyone.if.no.acl.found=false
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
创建文件:
/opt/kafka/config/kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin123";
};
编辑 kafka-server-start.sh 或启动命令:
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
bin/kafka-server-start.sh config/server.properties
bin/kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter \
--add-config 'SCRAM-SHA-256=[iterations=8192,password=admin123]' \
--entity-type users \
--entity-name admin
bin/kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter \
--add-config 'SCRAM-SHA-256=[password=user123]' \
--entity-type users \
--entity-name testuser
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="testuser" password="user123";
bin/kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:testuser \
--operation Read \
--topic test-topic
bin/kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:testuser \
--operation Write \
--topic test-topic
如果你不想用 PLAINTEXT,可以改为:
listeners=SASL_SSL://:9093
ssl.keystore.location=...
ssl.truststore.location=...
✅ 确认:
KAFKA_OPTS 已 export✅ 因为 allow.everyone.if.no.acl.found=false
最简可用鉴权:
SASL/SCRAM + ACL
生产级:
SASL/SCRAM + SSL + ACL
如果你愿意,我可以:
你现在的 Kafka 是 裸机 / Docker / 集群?