在 Ubuntu 上部署 Kafka 时,保证安全通常从 网络隔离、认证、授权、加密、审计与运维规范 几个方面入手。下面按“从基础到进阶”的方式说明常见安全配置。
# 仅允许内网访问
sudo ufw allow from 10.0.0.0/8 to any port 9092
sudo ufw enable
Kafka 默认端口:
不要用 root 启动 Kafka
sudo useradd -m kafka
sudo su - kafka
# zookeeper.properties
clientPortAddress=10.0.0.10
keytool -keystore kafka.server.keystore.jks -alias kafka -validity 365 -genkey
keytool -keystore kafka.client.truststore.jks -alias kafka -import -file ca-cert
listeners=SSL://:9093
security.inter.broker.protocol=SSL
ssl.keystore.location=/path/kafka.server.keystore.jks
ssl.keystore.password=xxx
ssl.key.password=xxx
ssl.truststore.location=/path/kafka.client.truststore.jks
ssl.truststore.password=xxx
listeners=SASL_SSL://:9093
security.inter.broker.protocol=SASL_SSL
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
ssl.keystore.location=...
ssl.truststore.location=...
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_client="client-secret";
};
启动:
export KAFKA_OPTS="-Djava.security.auth.login.config=/path/kafka_server_jaas.conf"
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="client" password="client-secret";
ssl.truststore.location=...
# 允许 client 读 topic
kafka-acls.sh \
--authorizer-properties zookeeper.connect=localhost:2181 \
--add \
--allow-principal User:client \
--operation Read \
--topic test-topic
server.properties:
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
Kafka 3.x+ 推荐 KRaft:
process.roles=broker,controller
controller.quorum.voters=1@localhost:9093
| 项目 | 是否必须 |
|---|---|
| 内网部署 | ✅ |
| 非 root 用户 | ✅ |
| SSL | ✅ |
| SASL | ✅ |
| ACL | ✅ |
| 版本更新 | ✅ |
如果你愿意,我可以:
你现在是 测试环境还是生产环境?