温馨提示×

debian kafka如何鉴权

小樊
33
2026-09-09 21:44:06
栏目: 智能运维

在 Debian 上部署的 Kafka(通常用官方二进制包或通过 systemd 管理),鉴权一般和**认证(Authentication)+ 授权(Authorization)**一起做。Kafka 常见鉴权方式包括:

  • SASL/PLAIN(用户名密码)
  • SASL/SCRAM
  • SASL/GSSAPI(Kerberos)
  • SSL 双向认证(很少单独作为“鉴权”)
  • ACL(授权)

下面以 Debian + Kafka 3.x + SASL/SCRAM + ACL 为例,讲最常用、也是最推荐的“鉴权”做法。


一、基础准备(Debian)

假设:

  • Kafka 安装目录:/opt/kafka
  • 配置文件:/opt/kafka/config/server.properties
  • Kafka 以 kafka 用户运行
sudo useradd -r kafka

二、启用 SASL 认证(SCRAM)

1. 修改 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


2. 创建 JAAS 文件

/opt/kafka/config/kafka_server_jaas.conf

KafkaServer {
  org.apache.kafka.common.security.scram.ScramLoginModule required
  username="admin"
  password="admin-secret";
};

3. 配置 Kafka 启动参数

编辑 /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"

三、创建用户(SCRAM)

/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

五、ACL 授权(核心“鉴权”)

1. 给用户授权

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

2. 查看 ACL

kafka-acls.sh --bootstrap-server localhost:9092 --list

六、常见问题(Debian 场景)

1. 启动报错 ClassNotFound

  • 确保 Kafka 版本 ≥ 2.0
  • 检查 KAFKA_OPTS 是否生效

2. 无法连接

  • 防火墙:ufw allow 9092
  • advertised.listeners 必须可被客户端访问

3. 所有人都能访问

  • allow.everyone.if.no.acl.found=false 必须设置

七、总结(最简鉴权方案)

推荐组合

  • SASL/SCRAM(认证)
  • ACL(授权)
  • Debian + systemd 管理

如果你需要:

  • Kerberos 鉴权
  • Kafka + Zookeeper 鉴权
  • Docker / Kubernetes 场景
  • 只做“简单用户名密码”

可以告诉我你的使用场景,我可以给你更精简或生产级配置。

0