在 Linux 上部署的 Kafka,常见鉴权(认证 + 授权)方式主要有以下几种,按使用频率从高到低说明:
Kafka 的安全通常包含三部分:
常用组合:
修改 server.properties:
listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
kafka_server_jaas.conf:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_user1="user1-secret";
};
启动 Kafka 时指定:
export KAFKA_OPTS="-Djava.security.auth.login.config=/path/kafka_server_jaas.conf"
producer.properties / consumer.properties:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="user1" \
password="user1-secret";
开启 ACL:
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
授权示例:
kafka-acls.sh --bootstrap-server localhost:9092 \
--add --allow-principal User:user1 \
--operation Read --topic test-topic \
--group test-group
适合内网强安全场景。
keytool -genkey -alias kafka -keystore kafka.server.keystore.jks
keytool -export -alias kafka -file ca-cert
keytool -import -file ca-cert -keystore kafka.client.truststore.jks
listeners=SSL://:9093
security.inter.broker.protocol=SSL
ssl.keystore.location=/path/kafka.server.keystore.jks
ssl.keystore.password=xxx
ssl.truststore.location=/path/kafka.server.truststore.jks
ssl.truststore.password=xxx
ssl.client.auth=required
组合:
listeners=SASL_SSL://:9092
security.inter.broker.protocol=SASL_SSL
sasl.enabled.mechanisms=SCRAM-SHA-256
ssl.keystore.location=...
ssl.truststore.location=...
security.protocol 是否一致| 场景 | 推荐 |
|---|---|
| 测试环境 | SASL_PLAINTEXT |
| 生产环境 | SASL_SSL + ACL |
| 金融/强安全 | SSL 双向 + ACL |
如果你愿意,可以告诉我:
我可以直接帮你写 完整可跑的配置文件。