在 Debian 上部署 Kafka 时,安全设置一般包括 认证(Authentication)、鉴权(Authorization)、网络加密(SSL/TLS) 以及 操作系统与文件系统安全。下面我按生产环境常见做法,给你一个完整、可落地的 Kafka 安全配置指南。
Kafka 安全主要涉及四方面:
| 安全层 | 说明 |
|---|---|
| 认证 | SASL(SCRAM / PLAIN / GSSAPI)或 mTLS |
| 鉴权 | ACL(基于用户/客户端的访问控制) |
| 传输加密 | SSL/TLS |
| 主机安全 | Debian 系统层面 |
sudo apt update
sudo apt install openjdk-17-jdk -y
Kafka 官方推荐:
# CA
openssl genrsa -out ca-key.pem 2048
openssl req -new -x509 -key ca-key.pem -out ca-cert.pem -days 3650
# Kafka Server 证书
openssl genrsa -out kafka-server-key.pem 2048
openssl req -new -key kafka-server-key.pem -out kafka-server-csr.pem -subj "/CN=kafka01"
openssl x509 -req -in kafka-server-csr.pem -CA ca-cert.pem -CAkey ca-key.pem \
-CAcreateserial -out kafka-server-cert.pem -days 3650
openssl pkcs12 -export \
-in kafka-server-cert.pem \
-inkey kafka-server-key.pem \
-out kafka-server.p12 \
-name kafka-server \
-passout pass:changeit
keytool -importkeystore \
-destkeystore kafka.server.keystore.jks \
-srckeystore kafka-server.p12 \
-srcstoretype PKCS12 \
-alias kafka-server \
-storepass changeit
listeners=SSL://:9093
ssl.keystore.location=/opt/kafka/ssl/kafka.server.keystore.jks
ssl.keystore.password=changeit
ssl.key.password=changeit
ssl.truststore.location=/opt/kafka/ssl/kafka.truststore.jks
ssl.truststore.password=changeit
ssl.client.auth=required
listeners=SASL_SSL://:9093
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
sasl.enabled.mechanisms=SCRAM-SHA-512
bin/kafka-configs.sh \
--bootstrap-server localhost:9093 \
--alter \
--add-config 'SCRAM-SHA-512=[password=admin-secret]' \
--entity-type users \
--entity-name admin
/opt/kafka/config/kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret";
};
/opt/kafka/config/kafka_client_jaas.conf
KafkaClient {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret";
};
启动 Kafka 时:
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin
bin/kafka-acls.sh \
--bootstrap-server localhost:9093 \
--add \
--allow-principal User:producer1 \
--producer \
--topic test-topic
bin/kafka-acls.sh \
--bootstrap-server localhost:9093 \
--add \
--allow-principal User:consumer1 \
--consumer \
--topic test-topic \
--group test-group
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="producer1" \
password="producer-secret";
ssl.truststore.location=/opt/kafka/ssl/kafka.truststore.jks
ssl.truststore.password=changeit
✅ 使用非 root 用户运行 Kafka
✅ 限制 Kafka 端口(9093)只允许内网
✅ 禁止 Kafka 目录写入执行权限
✅ 定期更新 Debian & Kafka
✅ 日志与数据目录分离
✅ 使用 systemd 限制资源
[Service]
User=kafka
LimitNOFILE=100000
✔ SASL_SSL + SCRAM-SHA-512
✔ 强制 ACL
✔ TLS 双向认证
✔ Debian AppArmor / firewall
如果你愿意,我可以:
你现在是 测试环境还是生产环境?