kafka在ubuntu上的权限管理
导读:Kafka 在 Ubuntu 上的权限管理实践 一 操作系统与文件权限基线 创建专用系统用户与组(禁止 root 直跑):sudo groupadd kafka;sudo useradd -g kafka kafka。将安装目录与数据目录...
Kafka 在 Ubuntu 上的权限管理实践
一 操作系统与文件权限基线
- 创建专用系统用户与组(禁止 root 直跑):sudo groupadd kafka;sudo useradd -g kafka kafka。将安装目录与数据目录归属到 kafka:sudo chown -R kafka:kafka /opt/kafka;sudo chown -R kafka:kafka /var/lib/kafka。必要时仅授予日志目录写权限,其他目录只读。
- 以最小权限运行服务:为 Zookeeper 与 Kafka 分别创建 systemd 单元,指定 User=kafka,避免使用 sudo 启动进程。完成后可移除 kafka 的 sudo 权限并锁定密码:sudo deluser kafka sudo;sudo passwd kafka -l(需要维护时再解锁:sudo passwd kafka -u)。
- 网络与防火墙:仅开放必要端口(如 9092/9093),例如 UFW:sudo ufw allow 9092/tcp;云环境同步配置安全组白名单。
二 传输与认证安全
- SASL/PLAIN 认证(示例为明文传输,适合内网或配合 TLS 使用):
- 创建 JAAS 文件(config/kafka_server_jaas.conf):KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username=“admin” password=“admin-secret” user_admin=“admin-secret” user_writer=“writer-secret” user_reader=“reader-secret”; } ;
- 在 server.properties 启用 SASL:listeners=SASL_PLAINTEXT://:9092;security.inter.broker.protocol=SASL_PLAINTEXT;sasl.mechanism.inter.broker.protocol=PLAIN;sasl.enabled.mechanisms=PLAIN;authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer;super.users=User:admin。
- 启动脚本注入 JAAS:在 kafka-server-start.sh 的 exec 行尾部追加 -Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf。
- 客户端(producer/consumer)各自准备 KafkaClient JAAS 并在 producer.properties/consumer.properties 中设置:security.protocol=SASL_PLAINTEXT;sasl.mechanism=PLAIN。
- SSL/TLS 加密(推荐与 SASL 组合为 SASL_SSL):
- 生成密钥库/信任库:keytool -genkey -alias kafka -keyalg RSA -keystore kafka.server.keystore.jks -validity 3650;keytool -export -alias kafka -file kafka.server.cer -keystore kafka.server.keystore.jks;keytool -import -alias kafka -file kafka.server.cer -keystore kafka.server.truststore.jks。
- server.properties 配置:listeners=SSL://:9093;security.inter.broker.protocol=SSL;ssl.keystore.location=/path/kafka.server.keystore.jks;ssl.keystore.password=ks-pass;ssl.key.password=key-pass;ssl.truststore.location=/path/kafka.server.truststore.jks;ssl.truststore.password=ts-pass。
- 客户端使用相同协议与信任库:security.protocol=SSL;ssl.truststore.location=…;ssl.truststore.password=…。
- 安全加固建议:从 Kafka 2.8 起可使用 KRaft 模式替代 Zookeeper;生产环境建议禁用 PLAINTEXT 端口,仅保留 SASL_SSL,并定期轮换密钥与证书。
三 基于 ACL 的授权模型
- 启用 ACL 后,未授权的主体默认无权限(白名单模式):authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer;allow.everyone.if.no.acl.found=false;super.users=User:admin。
- 常用授权示例(使用 kafka-acls.sh):
- 为主题写入授权:kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:writer --operation Write --topic test。
- 为主题读取与消费者组授权:kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:reader --operation Read --topic test --group test-consumer-group。
- 查看 ACL:kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --list --topic test。
- 客户端最小权限原则:生产者仅需 Topic 的 Write;消费者需 Topic 的 Read 与其 ConsumerGroup 的 Read;运维/管理操作使用 User:admin。
- 版本提示:KRaft 模式下,ACL 命令的 Zookeeper 参数需替换为 –bootstrap-server 直连 Broker。
四 快速验证与排错清单
- 基线连通与端口:ss -lntp | grep -E ‘(:9092|:9093)’;ufw status;如走内网域名,确保客户端 hosts 或 DNS 与 listeners 一致。
- SASL/SSL 连通性:使用带认证与协议的客户端配置测试生产/消费;若失败,优先检查 JAAS 路径、principal 名称(如 User:writer)、密码、以及 listeners 与 advertised.listeners 的一致性。
- ACL 生效验证:以无权限用户尝试生产/消费应被拒绝;为对应用户授予权限后再测;必要时用 --list 查看生效的 ACL 条目。
- 日志与审计:检查 server.log 与 controller.log 中的认证/授权错误;开启适当的日志保留策略,便于审计与回溯。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: kafka在ubuntu上的权限管理
本文地址: https://pptw.com/jishu/749605.html
