下面按从基础到生产可用的顺序,说明在 Debian 上如何配置 Kafka 安全。假设你用的是 Kafka 3.x(KRaft 或 ZooKeeper 模式均可),并以 SASL + SSL 为主(这是最常见、最推荐的方式)。
Kafka 安全主要涉及 4 个方面:
✅ SASL_SCRAM + SSL(TLS)
优点:
sudo apt update
sudo apt install -y openjdk-17-jdk
Kafka 官方二进制:
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz
cd kafka_3.7.0
openssl req -new -x509 -keyout ca-key -out ca-cert -days 3650
keytool -genkey -alias kafka -keystore kafka.server.keystore.jks -validity 3650
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 -days 3650 -CAcreateserial
keytool -import -alias ca -keystore kafka.server.keystore.jks -file ca-cert
keytool -import -alias kafka -keystore kafka.server.keystore.jks -file kafka-cert-signed
keytool -import -alias ca -keystore kafka.client.truststore.jks -file ca-cert
server.propertieslisteners=SASL_SSL://:9093
advertised.listeners=SASL_SSL://kafka.example.com:9093
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
ssl.keystore.location=/opt/kafka/kafka.server.keystore.jks
ssl.keystore.password=keystorepass
ssl.key.password=keypass
ssl.truststore.location=/opt/kafka/kafka.client.truststore.jks
ssl.truststore.password=trustpass
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
allow.everyone.if.no.acl.found=false
bin/kafka-configs.sh \
--bootstrap-server localhost:9093 \
--alter --add-config 'SCRAM-SHA-256=[password=admin123]' \
--entity-type users --entity-name admin
其他用户同理。
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="admin" \
password="admin123";
ssl.truststore.location=/opt/kafka/kafka.client.truststore.jks
ssl.truststore.password=trustpass
bin/kafka-acls.sh \
--bootstrap-server localhost:9093 \
--add --allow-principal User:app1 \
--operation Read --topic orders \
--group app-group
✅ 用普通用户运行 Kafka
✅ 限制 9093 端口只对内网开放
✅ 日志目录权限 700
✅ systemd 管理 Kafka
示例 kafka.service:
[Unit]
Description=Apache Kafka
After=network.target
[Service]
User=kafka
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
Restart=on-failure
[Install]
WantedBy=multi-user.target
如果只是内网测试:
SASL_PLAINTEXT⚠️ 不建议生产使用
| 场景 | 推荐配置 |
|---|---|
| 生产 | SASL_SCRAM + SSL + ACL |
| 内网 | SASL_PLAINTEXT |
| 强安全 | Kerberos + SSL |
如果你愿意,我可以:
你现在是 测试还是生产环境?