Kafka在Ubuntu上的安全配置指南
Kafka在Ubuntu上的安全配置指南
Kafka作为分布式消息系统,需通过认证、加密、授权及系统加固保障数据安全。以下是针对Ubuntu环境的详细安全配置步骤:
1. 前置准备
- 安装Java JDK:Kafka依赖Java环境,推荐使用OpenJDK 11+。
sudo apt update & & sudo apt install -y openjdk-11-jdk export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 添加至~/.bashrc永久生效 - 安装Kafka:从官网下载并解压至
/opt/kafka(示例版本3.0.0)。wget https://downloads.apache.org/kafka/3.0.0/kafka_2.13-3.0.0.tgz tar -xzf kafka_2.13-3.0.0.tgz -C /opt/ mv /opt/kafka_2.13-3.0.0 /opt/kafka
2. 配置SASL认证(身份验证)
SASL用于验证客户端与Broker的身份,推荐使用SCRAM-SHA-512(强度高于PLAIN)。
2.1 启用SASL_PLAINTEXT/SASL_SSL
编辑/opt/kafka/config/server.properties,添加以下配置:
listeners=SASL_SSL://:9093 # 使用SASL+SSL加密通信
security.inter.broker.protocol=SASL_SSL # Broker间通信协议
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512 # Broker间认证机制
sasl.enabled.mechanisms=SCRAM-SHA-512 # 支持的客户端认证机制
2.2 创建JAAS配置文件
在/opt/kafka/config/下创建kafka_server_jaas.conf,定义Broker用户(如admin):
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret" # 实际使用时替换为强密码
}
;
2.3 关联JAAS配置与Kafka
修改/opt/kafka/bin/kafka-server-start.sh,在启动命令前添加JVM参数:
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
2.4 注册Broker用户
使用kafka-configs.sh脚本将Broker用户添加至Kafka:
/opt/kafka/bin/kafka-configs.sh --zookeeper localhost:2181 \
--alter \
--add-config "SCRAM-SHA-512=[iterations=8192,password=admin-secret]" \
--entity-type users \
--entity-name admin
3. 配置SSL/TLS加密(数据传输安全)
SSL/TLS用于加密Broker与客户端、Broker间的通信,防止数据泄露。
3.1 生成证书与密钥库
使用OpenSSL生成CA证书、服务器证书及客户端证书:
# 创建证书目录
mkdir -p /opt/kafka/config/ssl &
&
cd /opt/kafka/config/ssl
# 生成CA私钥与证书(有效期10年)
openssl req -new -x509 -days 3650 -keyout ca-key.pem -out ca-cert.pem -subj "/CN=Kafka-CA"
# 生成服务器私钥与证书签名请求(CSR)
openssl req -newkey rsa:2048 -days 365 -nodes -keyout server-key.pem -out server-req.pem -subj "/CN=localhost"
# 用CA签署服务器证书
openssl x509 -req -in server-req.pem -days 365 -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
# 生成客户端私钥与CSR
openssl req -newkey rsa:2048 -days 365 -nodes -keyout client-key.pem -out client-req.pem -subj "/CN=client"
# 用CA签署客户端证书
openssl x509 -req -in client-req.pem -days 365 -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem
3.2 导入证书至Java Keystore/Truststore
将证书导入Broker的Keystore(存储自身私钥与证书)和Truststore(存储CA证书):
# 创建Broker Keystore并导入服务器证书
keytool -importkeystore -deststorepass kafka-pass -destkeypass kafka-pass -destkeystore kafka.keystore.jks -srckeystore server-cert.pem -srcstoretype PEM
# 导入CA证书至Broker Truststore(信任客户端证书)
keytool -import -alias ca -file ca-cert.pem -keystore kafka.truststore.jks -storepass kafka-pass -noprompt
3.3 配置Kafka使用SSL
编辑/opt/kafka/config/server.properties,添加SSL配置:
ssl.keystore.location=/opt/kafka/config/ssl/kafka.keystore.jks
ssl.keystore.password=kafka-pass
ssl.key.password=kafka-pass
ssl.truststore.location=/opt/kafka/config/ssl/kafka.truststore.jks
ssl.truststore.password=kafka-pass
ssl.client.auth=required # 强制客户端提供证书(双向TLS)
ssl.enabled.protocols=TLSv1.2,TLSv1.3 # 仅允许安全协议
ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384 # 限制加密套件
4. 配置授权(ACL,访问控制)
通过ACL限制用户对Kafka资源(Topic、Group等)的操作权限。
4.1 启用ACL授权器
编辑/opt/kafka/config/server.properties,添加以下配置:
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false # 无ACL时拒绝访问
super.users=User:admin # 定义超级用户(可管理所有资源)
4.2 创建ACL规则
使用kafka-acls.sh脚本为用户分配权限(示例:允许admin读写test-topic):
/opt/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--add \
--allow-principal User:admin \
--operation Read \
--operation Write \
--topic test-topic
5. 防火墙与操作系统加固
5.1 配置防火墙
仅开放Kafka使用的端口(默认9093),阻止非法访问:
sudo ufw allow 9093/tcp
sudo ufw enable # 启用防火墙
5.2 限制Kafka进程权限
将Kafka运行在非root用户(如kafka)下,减少权限滥用风险:
sudo useradd -r -m -d /opt/kafka -s /sbin/nologin kafka
sudo chown -R kafka:kafka /opt/kafka
sudo -u kafka /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
6. 验证配置
6.1 测试SASL/SSL连接
使用客户端配置文件/opt/kafka/config/client.properties连接Broker:
bootstrap.servers=localhost:9093
security.protocol=SASL_SSL
ssl.truststore.location=/opt/kafka/config/ssl/kafka.truststore.jks
ssl.truststore.password=kafka-pass
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-secret";
6.2 生产/消费消息
# 生产消息(需指定client.properties)
/opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9093 --topic test-topic --producer.config /opt/kafka/config/client.properties
# 消费消息
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic test-topic --consumer.config /opt/kafka/config/client.properties --from-beginning
通过以上步骤,Kafka在Ubuntu环境中的安全性将得到显著提升。需定期更新证书、监控日志,并根据业务需求调整权限策略。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Kafka在Ubuntu上的安全配置指南
本文地址: https://pptw.com/jishu/747621.html
