kafka安全设置ubuntu上怎么操作
导读:Ubuntu上Kafka安全设置实操指南 一 准备与基线 安装 Java JDK 8(Kafka常用版本):sudo apt install openjdk-8-jdk;配置环境变量:export JAVA_HOME=/usr/lib/j...
Ubuntu上Kafka安全设置实操指南
一 准备与基线
- 安装 Java JDK 8(Kafka常用版本):sudo apt install openjdk-8-jdk;配置环境变量:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 与 export PATH=$JAVA_HOME/bin:$PATH。
- 下载并解压 Kafka(示例:kafka_2.13-3.6.0.tgz),创建数据与日志目录:/opt/software/kafka/{ log,zookeeper,log} 。
- 基线配置 server.properties(单机示例):
- broker.id=0
- listeners=PLAINTEXT://:9092
- advertised.listeners=PLAINTEXT://< 本机IP或域名> :9092
- log.dirs=/opt/software/kafka/log
- zookeeper.connect=localhost:2181
- 基线配置 zookeeper.properties:
- dataDir=/opt/software/kafka/zookeeper
- dataLogDir=/opt/software/kafka/zookeeper/log
- clientPort=2181
以上为后续开启认证、加密与ACL的基线环境。
二 启用SASL认证
- 选择机制:简单场景用 PLAIN,可动态加用户推荐 SCRAM-SHA-256/512。
- 配置 server.properties(Broker 端):
- listeners=SASL_PLAINTEXT://:9092
- advertised.listeners=SASL_PLAINTEXT://< 本机IP或域名> :9092
- security.inter.broker.protocol=SASL_PLAINTEXT
- sasl.enabled.mechanisms=PLAIN(或 SCRAM-SHA-512)
- sasl.mechanism.inter.broker.protocol=PLAIN(或 SCRAM-SHA-512)
- authorizer.class.name=kafka.security.authorizer.AclAuthorizer
- allow.everyone.if.no.acl.found=false(生产建议为 false)
- super.users=User:admin
- 创建 JAAS 文件(如:/opt/kafka/config/kafka_server_jaas.conf):
- PLAIN 示例:
- KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username=“admin” password=“admin-secret” user_admin=“admin-secret” user_producer=“prod-pass” user_consumer=“cons-pass”; } ;
- Client { org.apache.kafka.common.security.plain.PlainLoginModule required username=“kafka” password=“zk-pass”; } ;
- 如需 SCRAM,KafkaServer 使用:org.apache.kafka.common.security.scram.ScramLoginModule required; (无需在 JAAS 中明文放密码)。
- PLAIN 示例:
- 启动参数注入 JAAS:在 kafka-server-start.sh 的 exec 前加入(或导出 KAFKA_OPTS):
- export KAFKA_OPTS=“-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf”
- 若 Zookeeper 也启用 SASL(推荐):
- zookeeper.properties 追加:authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider;requireClientAuthScheme=sasl;jaasLoginRenew=3600000。
- 为 ZK 准备 JAAS(如 zk_server_jaas.conf),并在 zkEnv.sh 中注入:-Djava.security.auth.login.config=/path/zk_server_jaas.conf。
- 动态创建 SCRAM 用户(无需重启):
- ./bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config ‘SCRAM-SHA-512=[iterations=8192,password=UserPass]’ --entity-type users --entity-name alice
- 客户端最小配置(producer.properties/consumer.properties 或 --command-config):
- security.protocol=SASL_PLAINTEXT
- sasl.mechanism=PLAIN(或 SCRAM-SHA-512)
- sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username=“alice” password=“UserPass”;
以上覆盖了 Broker 间与客户端基于 SASL 的认证与动态用户管理。
三 配置SSL TLS加密
- 生成密钥库与信任库(JKS,示例有效期 3650 天):
- 服务器密钥库:keytool -genkey -alias kafka -keyalg RSA -keystore kafka.server.keystore.jks -validity 3650
- 导出服务器证书:keytool -export -alias kafka -file kafka.server.crt -keystore kafka.server.keystore.jks
- 客户端信任库并导入服务器证书:
- keytool -import -alias kafka -file kafka.server.crt -keystore kafka.client.truststore.jks
- 配置 server.properties(Broker 端):
- listeners=SASL_SSL://:9093(或仅 SSL:SSL://:9093)
- security.inter.broker.protocol=SASL_SSL(或 SSL)
- ssl.keystore.location=/path/kafka.server.keystore.jks
- ssl.keystore.password=store-pass
- ssl.key.password=key-pass
- ssl.truststore.location=/path/kafka.server.truststore.jks
- ssl.truststore.password=trust-pass
- ssl.enabled.protocols=TLSv1.2,TLSv1.3
- ssl.client.auth=required(双向校验;如仅服务端校验可为 none)
- 客户端最小配置:
- security.protocol=SASL_SSL(或 SSL)
- sasl.mechanism=PLAIN/SCRAM-SHA-512
- ssl.truststore.location=/path/kafka.client.truststore.jks
- ssl.truststore.password=trust-pass
以上实现了传输链路加密与(可选)双向 TLS 校验。
四 授权与访问控制 ACL
- 启用 ACL(Broker 端):authorizer.class.name=kafka.security.authorizer.AclAuthorizer;allow.everyone.if.no.acl.found=false;super.users=User:admin。
- 常用 ACL 示例(使用 --command-config 指定客户端 SASL/SSL 配置):
- 给生产者写权限:
- ./bin/kafka-acls.sh --bootstrap-server localhost:9092 --command-config ./client-sasl-ssl.properties --add --allow-principal User:producer --operation Write --topic test
- 给消费者组读权限:
- ./bin/kafka-acls.sh --bootstrap-server localhost:9092 --command-config ./client-sasl-ssl.properties --add --allow-principal User:consumer --operation Read --topic test --group test-group
- 给生产者写权限:
- 如需 Zookeeper ACL:在 zookeeper.properties 中设置 zookeeper.set.acl=true,并为 Kafka 使用的 ZK 用户配置相应 ACL(生产建议开启)。
以上通过 ACL 精细化控制 Topic/Group 的读写与集群管理权限。
五 网络安全与运维加固
- 防火墙仅放通必要端口(示例:UFW):sudo ufw allow 9092,9093,2181/tcp;云上安全组同理仅放白名单 CIDR。
- 监听与广告地址:advertised.listeners 使用 可路由的 IP 或域名,避免内外网错配导致客户端连错或被拒绝。
- 进程与文件权限:Kafka 以专用系统用户运行;证书与 JAAS 文件权限设为 600,属主为运行用户。
- 加密套件与协议:ssl.enabled.protocols=TLSv1.2,TLSv1.3;禁用 SSLv3/TLSv1.0/TLSv1.1;按需配置 ssl.cipher.suites。
- 监控与审计:集中采集 server.log 与 controller.log,对异常登录、Topic 频繁 ACL 变更、连接风暴等进行告警;定期升级 Kafka 与依赖组件。
- 高可用与密钥管理:多 Broker 跨可用区部署;证书与密钥集中托管与轮换;定期演练故障切换与恢复。
以上措施覆盖网络边界、传输加密、系统与运维层面的纵深防护。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: kafka安全设置ubuntu上怎么操作
本文地址: https://pptw.com/jishu/773574.html
