在 Debian 上部署的 Apache Kafka 中,鉴权(Authentication)通常和 SSL/TLS、SASL 一起使用。下面按「常见方案 + 操作步骤」给你一个清晰说明。
Kafka 支持以下几种鉴权机制(可组合使用):
PLAIN:用户名/密码SCRAM:更安全的用户名/密码(推荐)GSSAPI:Kerberos编辑 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
/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"
kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter \
--add-config 'SCRAM-SHA-256=[iterations=8192,password=user1-secret]' \
--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-secret";
使用:
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic test \
--consumer.config client.properties
# 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
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
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:user1 \
--operation Read \
--topic test
/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
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置模板。