Ubuntu Kafka安全设置指南
Kafka的安全配置需围绕认证、加密、授权三大核心展开,以下是Ubuntu环境下Kafka安全设置的详细步骤:
sudo apt update && sudo apt install -y openjdk-11-jdk
/opt/kafka)。wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
tar -xzf kafka_2.13-3.6.1.tgz -C /opt/
cd /opt/kafka_2.13-3.6.1
SASL是Kafka的主流认证框架,推荐使用SCRAM-SHA-256/512(比PLAIN更安全)。
/opt/kafka/config/下创建kafka_server_jaas.conf,定义用户凭证(如admin用户)。KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret";
};
server.properties,启用SASL并关联JAAS文件。# 启用SASL_PLAINTEXT监听器(生产环境建议用SASL_SSL)
listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
# 指定JAAS配置文件路径
sasl.jaas.config=file:/opt/kafka/config/kafka_server_jaas.conf
kafka-configs.sh脚本创建用户(若未提前在JAAS中定义)。bin/kafka-configs.sh --bootstrap-server localhost:9092 \
--alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=admin-secret]' \
--entity-type users --entity-name admin
bin/kafka-server-stop.sh && bin/kafka-server-start.sh config/server.properties
SSL/TLS用于加密Kafka客户端与Broker之间的通信,防止数据泄露。
# 生成CA私钥和证书
openssl req -x509 -newkey rsa:4096 -keyout ca-key.pem -out ca-cert.pem -days 365 -nodes -subj "/CN=Kafka-CA"
# 生成服务器私钥和证书签名请求(CSR)
openssl req -newkey rsa:4096 -keyout server-key.pem -out server-req.pem -days 365 -nodes -subj "/CN=localhost"
# 用CA签署服务器证书
openssl x509 -req -in server-req.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 365
# 生成客户端证书(可选,用于客户端认证)
openssl req -newkey rsa:4096 -keyout client-key.pem -out client-req.pem -days 365 -nodes -subj "/CN=client"
openssl x509 -req -in client-req.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -days 365
# 创建服务器Keystore并导入证书
keytool -import -alias ca -file ca-cert.pem -keystore server-keystore.jks -storepass kafka-pass -noprompt
keytool -import -alias server -file server-cert.pem -keystore server-keystore.jks -storepass kafka-pass -noprompt
# 创建客户端Keystore(可选)
keytool -import -alias ca -file ca-cert.pem -keystore client-keystore.jks -storepass kafka-pass -noprompt
keytool -import -alias client -file client-cert.pem -keystore client-keystore.jks -storepass kafka-pass -noprompt
server.properties,启用SSL。# 启用SSL监听器(生产环境建议用SASL_SSL)
listeners=SSL://:9093
security.inter.broker.protocol=SSL
ssl.keystore.location=/opt/kafka/config/server-keystore.jks
ssl.keystore.password=kafka-pass
ssl.key.password=kafka-pass
ssl.truststore.location=/opt/kafka/config/server-keystore.jks
ssl.truststore.password=kafka-pass
ssl.enabled.protocols=TLSv1.2,TLSv1.3
ssl.client.auth=required # 要求客户端提供证书(可选,严格模式)
client.properties,指定SSL参数。security.protocol=SSL
ssl.truststore.location=/opt/kafka/config/client-keystore.jks
ssl.truststore.password=kafka-pass
ssl.keystore.location=/opt/kafka/config/client-keystore.jks
ssl.keystore.password=kafka-pass
ssl.key.password=kafka-pass
bin/kafka-server-stop.sh && bin/kafka-server-start.sh config/server.properties
授权用于限制用户对Kafka资源(Topic、Group等)的操作权限。
server.properties,配置ACL授权器。authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=false # 无ACL时拒绝访问
super.users=User:admin # 定义超级用户(可跳过授权)
bin/kafka-server-stop.sh && bin/kafka-server-start.sh config/server.properties
kafka-acls.sh脚本为用户分配权限(示例:允许admin用户读写test-topic)。bin/kafka-acls.sh --bootstrap-server localhost:9093 \
--add --allow-principal User:admin \
--operation Read --operation Write \
--topic test-topic
listeners和advertised.listeners配置,仅允许特定IP访问Kafka。listeners=SASL_SSL://192.168.1.100:9093 # 绑定内网IP
advertised.listeners=SASL_SSL://kafka.example.com:9093 # 对外暴露域名
ufw仅开放Kafka端口(如9092/9093)。sudo ufw allow from 192.168.1.0/24 to any port 9092
sudo ufw allow from 192.168.1.0/24 to any port 9093
sudo ufw enable
kafka-console-producer.sh测试生产权限。bin/kafka-console-producer.sh --broker-list localhost:9092 \
--topic test-topic \
--producer.config config/client.properties \
--command-config config/kafka_client_jaas.conf # 指定客户端JAAS文件(含用户名密码)
openssl s_client检查SSL握手是否成功。openssl s_client -connect localhost:9093 -showcerts
test-topic),应被拒绝。通过以上步骤,可构建Ubuntu环境下Kafka的基本安全体系。生产环境中还需根据业务需求调整配置(如启用SASL_SSL、细化ACL规则等)。