在 Ubuntu 上保障 Kafka 安全的实用方案

一 安全架构与最小原则
二 传输加密与认证配置
KafkaServer {org.apache.kafka.common.security.scram.ScramLoginModule requiredusername="admin"password="Admin@Sec2025"user_admin="Admin@Sec2025"user_producer="Prod@Sec2025"user_consumer="Cons@Sec2025";};listeners=SASL_PLAINTEXT://:9092advertised.listeners=SASL_PLAINTEXT://<your-hostname-or-ip>:9092security.inter.broker.protocol=SASL_PLAINTEXTsasl.enabled.mechanisms=SCRAM-SHA-256sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256listener.name.sasl_plaintext.scram-sha-256.sasl.jaas.config=file:/opt/kafka/conf/kafka_server_jaas.conf# Kafka 2.xbin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=Prod@Sec2025]' --entity-type users --entity-name producerbin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=Cons@Sec2025]' --entity-type users --entity-name consumer# Kafka 3.xbin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config 'SCRAM-SHA-256=[password=Prod@Sec2025]' --entity-type users --entity-name producerbin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config 'SCRAM-SHA-256=[password=Cons@Sec2025]' --entity-type users --entity-name consumerbin/kafka-console-producer.sh --bootstrap-server <host>:9092 --topic test-topic --producer-property security.protocol=SASL_PLAINTEXT --producer-property sasl.mechanism=SCRAM-SHA-256 --producer-property sasl.jaas.config='org.apache.kafka.common.security.scram.ScramLoginModule required username="producer" password="Prod@Sec2025";'bin/kafka-console-consumer.sh --bootstrap-server <host>:9092 --topic test-topic --from-beginning --consumer-property security.protocol=SASL_PLAINTEXT --consumer-property sasl.mechanism=SCRAM-SHA-256 --consumer-property sasl.jaas.config='org.apache.kafka.common.security.scram.ScramLoginModule required username="consumer" password="Cons@Sec2025";'keytool -genkey -alias kafka -keyalg RSA -keystore kafka.server.keystore.jks -validity 3650keytool -export-alias kafka -file kafka.server.crt -keystore kafka.server.keystore.jkskeytool -import-alias kafka -file kafka.server.crt -keystore kafka.client.truststore.jkslisteners=SASL_SSL://:9093advertised.listeners=SASL_SSL://<your-hostname-or-ip>:9093security.inter.broker.protocol=SASL_SSLsasl.enabled.mechanisms=SCRAM-SHA-256sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256listener.name.sasl_ssl.scram-sha-256.sasl.jaas.config=file:/opt/kafka/conf/kafka_server_jaas.confssl.keystore.location=/opt/kafka/security/kafka.server.keystore.jksssl.keystore.password=<keystore-pass>ssl.key.password=<key-pass>ssl.truststore.location=/opt/kafka/security/kafka.client.truststore.jksssl.truststore.password=<truststore-pass>三 授权与访问控制
# 创建主题bin/kafka-topics.sh --create --topic sensitive-data --bootstrap-server <host>:9092 --partitions 3 --replication-factor 1# 授予生产者写权限(Kafka 2.x 使用 --zookeeper;3.x 使用 --bootstrap-server)bin/kafka-acls.sh --bootstrap-server <host>:9092 --add --allow-principal User:producer --operation Write --operation Create --topic sensitive-data# 授予消费者组读权限bin/kafka-acls.sh --bootstrap-server <host>:9092 --add --allow-principal User:consumer --operation Read --operation Describe --group console-consumer# 查看 ACLbin/kafka-acls.sh --bootstrap-server <host>:9092 --list --topic sensitive-data四 网络安全与系统加固
sudo ufw allow from <app-subnet> to any port 9093 proto tcpsudo ufw deny 9092/tcp # 禁用明文端口sudo ufw enable && sudo ufw status verbose五 快速核查清单