温馨提示×

debian中kafka如何鉴权

小樊
40
2026-09-28 02:08:40
栏目: 智能运维

在 Debian 上部署的 Apache Kafka 中,鉴权(Authentication)通常和 SSL/TLS、SASL 一起使用。下面按「常见方案 + 操作步骤」给你一个清晰说明。


一、Kafka 鉴权常见方式

Kafka 支持以下几种鉴权机制(可组合使用):

  1. SSL(双向 TLS)
    • 客户端和 Broker 互相验证证书
  2. SASL
    • PLAIN:用户名/密码
    • SCRAM:更安全的用户名/密码(推荐)
    • GSSAPI:Kerberos
  3. SSL + SASL(生产环境推荐)

二、方式一:SASL/SCRAM 鉴权(最常用)

1. 修改 Kafka 配置文件

编辑 server.properties(通常在 /etc/kafka/ 或 /opt/kafka/config/):

# 启用 SASL
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

# 授权(可选但推荐)
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false

2. 创建 JAAS 文件

/etc/kafka/kafka_server_jaas.conf

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

在 kafka-server-start.sh 或 systemd 中指定:

export KAFKA_OPTS="-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf"

3. 创建用户

kafka-configs.sh \
  --bootstrap-server localhost:9092 \
  --alter \
  --add-config 'SCRAM-SHA-256=[iterations=8192,password=user1-secret]' \
  --entity-type users \
  --entity-name user1

4. 客户端配置

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-secret";

使用:

kafka-console-consumer.sh \
  --bootstrap-server localhost:9092 \
  --topic test \
  --consumer.config client.properties

三、方式二:SSL 双向认证(更安全)

1. 生成证书

# CA
openssl req -new -x509 -keyout ca-key -out ca-cert -days 365

# Broker
keytool -genkey -alias kafka -keystore kafka.server.keystore.jks
keytool -certreq -alias kafka -keystore kafka.server.keystore.jks -file kafka.csr
openssl x509 -req -CA ca-cert -CAkey ca-key -in kafka.csr -out kafka-cert-signed
keytool -import -alias ca -keystore kafka.server.keystore.jks -file ca-cert

2. server.properties

listeners=SSL://:9093
security.inter.broker.protocol=SSL
ssl.keystore.location=/var/private/ssl/kafka.server.keystore.jks
ssl.keystore.password=password
ssl.key.password=password
ssl.truststore.location=/var/private/ssl/kafka.server.truststore.jks
ssl.truststore.password=password
ssl.client.auth=required

四、权限控制(ACL)

kafka-acls.sh \
  --bootstrap-server localhost:9092 \
  --add \
  --allow-principal User:user1 \
  --operation Read \
  --topic test

五、Debian systemd 示例

/etc/systemd/system/kafka.service

[Service]
Environment=KAFKA_OPTS=-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf
ExecStart=/opt/kafka/bin/kafka-server-start.sh /etc/kafka/server.properties
systemctl daemon-reload
systemctl restart kafka

六、推荐生产方案

✅ SASL_SCRAM + SSL
✅ 启用 ACL
✅ 禁止 allow.everyone.if.no.acl.found=true


如果你愿意,可以告诉我:

  • Kafka 版本(如 3.x)
  • 是否上云 / 容器
  • 是否需要 Kerberos

我可以给你一份可直接用的配置模板。

0 踩