Kafka Linux環境安全設置指南
kafka
)和組(如kafka
),用于運行Kafka進程,避免使用root用戶。sudo groupadd kafka
sudo useradd -g kafka kafka
/usr/local/kafka
)及日志目錄(如/usr/local/kafka/kafka-logs
)的所有權賦予kafka
用戶/組,設置合理權限(目錄750
、配置文件644
)。sudo chown -R kafka:kafka /usr/local/kafka
sudo chmod -R 750 /usr/local/kafka
sudo chmod 644 /usr/local/kafka/config/server.properties
kafka
用戶啟動Kafka和Zookeeper,防止權限提升。#!/bin/bash
sudo -u kafka /usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties &
sleep 5
sudo -u kafka /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &
firewalld
或iptables
限制Kafka端口(默認9092
、2181
)的訪問,僅允許受信任的IP地址或網絡段連接。sudo firewall-cmd --permanent --add-port=9092/tcp --add-port=2181/tcp
sudo firewall-cmd --reload
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
SCRAM-SHA-256
或SCRAM-SHA-512
算法(強度高于PLAIN
)。
server.properties
,指定SASL協議、機制及JAAS文件路徑。security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
kafka_server_jaas.conf
),定義用戶憑據:KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret";
};
--override
參數指定JAAS文件。bin/kafka-server-start.sh config/server.properties --override java.security.auth.login.config=/path/to/kafka_server_jaas.conf
security.protocol
(如SASL_SSL
)和sasl.mechanism
(如SCRAM-SHA-256
),并提供用戶憑據。security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="producer" password="producer-secret";
server.properties
中設置authorizer.class.name
為kafka.security.authorizer.AclAuthorizer
,禁止未定義ACL的默認訪問。authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
kafka-acls.sh
工具為用戶或用戶組分配資源權限(如主題的讀、寫、創建權限)。# 允許用戶"producer"向"test-topic"寫入數據
kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow-principal User:producer --operation Write --topic test-topic
# 允許用戶"consumer"從"test-topic"讀取數據
kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow-principal User:consumer --operation Read --topic test-topic
keytool
生成密鑰庫(Keystore)和信任庫(Truststore)。keytool -genkeypair -alias kafka -keyalg RSA -keystore kafka.keystore.jks -validity 365 -storepass password -keypass key-password
keytool -exportcert -alias kafka -file kafka.crt -keystore kafka.keystore.jks -storepass password
keytool -importcert -alias kafka -file kafka.crt -keystore kafka.truststore.jks -storepass truststore-password -noprompt
server.properties
,指定SSL端口、密鑰庫及信任庫路徑。listeners=SSL://:9093
security.inter.broker.protocol=SSL
ssl.keystore.location=/path/to/kafka.keystore.jks
ssl.keystore.password=password
ssl.key.password=key-password
ssl.truststore.location=/path/to/kafka.truststore.jks
ssl.truststore.password=truststore-password
security.protocol=SSL
ssl.truststore.location=/path/to/kafka.truststore.jks
ssl.truststore.password=truststore-password
INFO
),記錄關鍵操作(如認證、授權、ACL變更),便于審計。log4j.logger.kafka=INFO
log4j.logger.org.apache.zookeeper=INFO
log4j.logger.kafka.authorizer.logger=DEBUG
yum update
),及時安裝系統補丁。kafka.log.LogConfig
中的audit.enable=true
),記錄所有客戶端的訪問操作(如生產、消費、創建主題)。