在Ubuntu上配置Kafka安全设置主要包括SSL加密、SASL认证和ACL授权,步骤如下:
安装Java
sudo apt update
sudo apt install openjdk-11-jdk
生成SSL证书
使用OpenSSL生成CA、服务器和客户端证书(示例为自签名证书):
mkdir -p kafka_ssl/{ca,server,client}
# 生成CA
openssl req -x509 -newkey rsa:2048 -keyout kafka_ssl/ca/ca-key.pem -out kafka_ssl/ca/ca-cert.pem -days 3650 -subj "/CN=KafkaCA"
# 生成服务器证书
openssl req -newkey rsa:2048 -keyout kafka_ssl/server/server-key.pem -out kafka_ssl/server/server-req.pem -days 365 -subj "/CN=kafka-server"
openssl x509 -req -in kafka_ssl/server/server-req.pem -CA kafka_ssl/ca/ca-cert.pem -CAkey kafka_ssl/ca/ca-key.pem -CAcreateserial -out kafka_ssl/server/server-cert.pem -days 365
# 生成客户端证书
openssl req -newkey rsa:2048 -keyout kafka_ssl/client/client-key.pem -out kafka_ssl/client/client-req.pem -days 365 -subj "/CN=kafka-client"
openssl x509 -req -in kafka_ssl/client/client-req.pem -CA kafka_ssl/ca/ca-cert.pem -CAkey kafka_ssl/ca/ca-key.pem -CAcreateserial -out kafka_ssl/client/client-cert.pem -days 365
配置Kafka服务器
server.properties:listeners=SSL://:9093,SASL_SSL://:9094 # 启用SSL和SASL_SSL监听
ssl.keystore.location=/path/to/server-keystore.jks
ssl.keystore.password=your_password
ssl.truststore.location=/path/to/server-truststore.jks
ssl.truststore.password=your_password
sasl.enabled.mechanisms=PLAIN
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=PLAIN
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer # 启用ACL
allow.everyone.if.no.acl.found=false
super.users=User:admin
keytool -import -alias server -file kafka_ssl/server/server-cert.pem -keystore kafka_ssl/server/server-keystore.jks -storepass your_password
keytool -import -alias ca -file kafka_ssl/ca/ca-cert.pem -keystore kafka_ssl/server/server-truststore.jks -storepass your_password
配置SASL认证
kafka_server_jaas.conf):KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret";
};
bin/kafka-server-start.sh config/server.properties --override java.security.auth.login.config=/path/to/kafka_server_jaas.conf
配置客户端
编辑客户端配置文件(如client.properties):
security.protocol=SASL_SSL
ssl.truststore.location=/path/to/client-truststore.jks
ssl.truststore.password=your_password
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret";
验证配置
sudo systemctl start kafka
bin/kafka-console-producer.sh --broker-list localhost:9093 --topic test --property security.protocol=SASL_SSL --property ssl.truststore.location=/path/to/client-truststore.jks --property sasl.jaas.config='org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret";'
说明:
SSL用于加密通信,SASL用于身份认证,两者可结合使用(如SASL_SSL)。ACL用于控制主题访问权限,需通过kafka-acls.sh脚本配置。