在Linux上为Kafka启用安全认证,通常涉及以下几个关键步骤:
kafka_server_jaas.conf
和kafka_client_jaas.conf
文件,并在其中指定用户名和密码。kafka_server_jaas.conf
示例:
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret";
};
kafka_client_jaas.conf
示例:
KafkaClient {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="alice"
password="alice-secret";
};
server.properties
中,启用SASL认证并指定JAAS配置文件的位置。listeners=SASL_SSL://your_host:port
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
sasl.login.config=/path/to/kafka_server_jaas.conf
keytool
工具生成密钥库(keystore)和信任库(truststore)。keytool -genkey -alias localhost -keyalg RSA -keystore server.keystore.jks -validity 365
keytool -export -alias localhost -file server.certificate.jks -keystore server.keystore.jks
keytool -import -alias localhost -file server.certificate.jks -keystore client.truststore.jks
server.properties
中配置SSL相关的参数,包括密钥库和信任库的位置以及密码。listeners=SSL://your_host:port
ssl.keystore.location=/path/to/server.keystore.jks
ssl.keystore.password=your_keystore_password
ssl.key.password=your_key_password
ssl.truststore.location=/path/to/client.truststore.jks
ssl.truststore.password=your_truststore_password
producer.properties
和consumer.properties
)中,添加类似的SSL配置。security.protocol=SSL
ssl.truststore.location=/path/to/client.truststore.jks
ssl.truststore.password=your_truststore_password
确保Kafka所需的端口(如9092、9093等)在防火墙中打开,以限制访问。
sudo ufw allow 9092
使用Kafka的ACL功能来定义用户和角色,为用户分配适当的权限。
kafka-configs --zookeeper localhost:2181 --alter --add-config 'ACL=[user=alice,topic=test,read=true]' --entity-type users --entity-name alice
启用Kafka的日志记录功能,以便跟踪活动和异常情况。定期审查日志文件,检查潜在的安全问题或异常行为。
从Kafka 2.8版本开始,建议禁用PLAINTEXT端口,只允许通过SASL/SSL端口进行连接,以减少潜在的安全风险。
通过上述步骤,可以在Linux上为Kafka配置安全认证,确保数据传输和存储的安全。