ubuntu

ubuntu上kafka安全设置怎么做

小樊
41
2025-11-15 16:26:56
栏目: 智能运维

Ubuntu上Kafka安全设置实操指南

一 安全目标与总体架构

二 生成证书与密钥库

KAFKA_HOME=/opt/kafka
mkdir -p $KAFKA_HOME/config/certs

keytool -genkey \
  -alias kafka \
  -keyalg RSA \
  -keystore $KAFKA_HOME/config/certs/kafka.server.keystore.jks \
  -validity 3650 \
  -keysize 2048
# 导出
keytool -export \
  -alias kafka \
  -file $KAFKA_HOME/config/certs/kafka.server.crt \
  -keystore $KAFKA_HOME/config/certs/kafka.server.keystore.jks

# 导入到信任库(客户端与集群内各 Broker 均执行)
keytool -import \
  -alias kafka \
  -file $KAFKA_HOME/config/certs/kafka.server.crt \
  -keystore $KAFKA_HOME/config/certs/kafka.server.truststore.jks

三 配置 Broker 安全参数

# 监听与对外地址(按实际主机名/IP填写)
listeners=SASL_SSL://0.0.0.0:9093
advertised.listeners=SASL_SSL://<your.kafka.host>:9093

# 内部通信安全
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
sasl.enabled.mechanisms=SCRAM-SHA-512

# SSL 参数
ssl.keystore.location=/opt/kafka/config/certs/kafka.server.keystore.jks
ssl.keystore.password=YourKeystorePass
ssl.key.password=YourKeyPass
ssl.truststore.location=/opt/kafka/config/certs/kafka.server.truststore.jks
ssl.truststore.password=YourTruststorePass
ssl.client.auth=required
ssl.enabled.protocols=TLSv1.2,TLSv1.3
# 可选:限制加密套件
# ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384

# 授权器(ACL)
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
# 超级用户(谨慎授予,运维/初始化用)
super.users=User:admin

四 配置 JAAS 与用户凭证

KafkaServer {
  org.apache.kafka.common.security.scram.ScramLoginModule required
  username="admin"
  password="AdminPass!";
};

# 如果仍使用 Zookeeper,需为 ZK 连接配置身份(示例)
Client {
  org.apache.zookeeper.server.auth.DigestLoginModule required
  username="zkadmin"
  password="ZkPass!";
};
export KAFKA_OPTS="-Djava.security.auth.login.config=$KAFKA_HOME/config/kafka_server_jaas.conf"
# 创建 admin(如上面 JAAS 已配置,可跳过或用于变更密码)
$KAFKA_HOME/bin/kafka-configs.sh --alter \
  --add-config 'SCRAM-SHA-512=[iterations=8192,password=AdminPass!]' \
  --entity-type users --entity-name admin

# 创建业务用户
$KAFKA_HOME/bin/kafka-configs.sh --alter \
  --add-config 'SCRAM-SHA-512=[iterations=8192,password=WriterPass!' \
  --entity-type users --entity-name writer

$KAFKA_HOME/bin/kafka-configs.sh --alter \
  --add-config 'SCRAM-SHA-512=[iterations=8192,password=ReaderPass!' \
  --entity-type users --entity-name reader

五 客户端与 ACL 验证及网络加固

security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
  username="writer" \
  password="WriterPass!";

ssl.truststore.location=/opt/kafka/config/certs/kafka.server.truststore.jks
ssl.truststore.password=YourTruststorePass
# 双向认证时再配置客户端密钥库
# ssl.keystore.location=/path/to/client.keystore.jks
# ssl.keystore.password=YourClientKeystorePass
# ssl.key.password=YourClientKeyPass
# 列出 Topic(使用 SCRAM 凭证)
$KAFKA_HOME/bin/kafka-topics.sh --list \
  --bootstrap-server <your.kafka.host>:9093 \
  --command-config <(echo -e "security.protocol=SASL_SSL\nsasl.mechanism=SCRAM-SHA-512\nsasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=\"writer\" password=\"WriterPass!\";")

# 生产消息
$KAFKA_HOME/bin/kafka-console-producer.sh --topic test-topic \
  --bootstrap-server <your.kafka.host>:9093 \
  --producer.config producer.properties

# 消费消息
$KAFKA_HOME/bin/kafka-console-consumer.sh --topic test-topic \
  --from-beginning \
  --bootstrap-server <your.kafka.host>:9093 \
  --consumer.config consumer.properties
# 写权限
$KAFKA_HOME/bin/kafka-acls.sh --add \
  --topic test-topic \
  --principal User:writer \
  --operation Write --operation Create \
  --host <client.ip.or.cidr> \
  --bootstrap-server <your.kafka.host>:9093

# 读权限
$KAFKA_HOME/bin/kafka-acls.sh --add \
  --topic test-topic \
  --principal User:reader \
  --operation Read --operation Describe \
  --group '*' \
  --host <client.ip.or.cidr> \
  --bootstrap-server <your.kafka.host>:9093

# 查看 ACL
$KAFKA_HOME/bin/kafka-acls.sh --list \
  --topic test-topic \
  --bootstrap-server <your.kafka.host>:9093
sudo ufw allow 9093/tcp
sudo ufw enable
# 云环境请同时配置安全组仅放通可信网段

0
看了该问题的人还看了