在 Debian 上部署的 Kafka(通常指 Apache Kafka),开启**认证(Authentication)**一般是通过 SASL 来实现的。常见方式有三种:
下面以 Debian + Kafka 3.x 为例,讲最常见的两种:SASL/PLAIN 和 SASL/SCRAM。
/opt/kafka/opt/kafka/configsudo vi /opt/kafka/config/kafka_server_jaas.conf
内容:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_test="test-secret";
};
说明:
admin / admin-secret 是 broker 之间通信账号test / test-secret 是客户端账号sudo vi /opt/kafka/config/server.properties
添加或修改:
listeners=SASL_PLAINTEXT://:9092
advertised.listeners=SASL_PLAINTEXT://your-host:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
编辑 Kafka 启动脚本或 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"
vi /opt/kafka/config/client.properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="test" \
password="test-secret";
测试:
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server localhost:9092 \
--topic test \
--producer.config /opt/kafka/config/client.properties
先启动一个普通 Kafka(或用 SASL/PLAIN 临时)。
/opt/kafka/bin/kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=test-secret]' \
--entity-type users --entity-name test
listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret";
};
| 方式 | 安全性 |
|---|---|
| SASL_PLAINTEXT | 账号认证,明文传输 |
| SASL_SSL | 认证 + 加密(生产推荐) |
生产环境建议:
listeners=SASL_SSL://:9092
KAFKA_OPTS 是否生效sasl.mechanism 一致allow.everyone.if.no.acl.found=true 排错如果你愿意,我可以:
你现在是 单机还是集群?PLAIN 还是 SCRAM?