kafka在centos上的权限管理方法
导读:Kafka 在 CentOS 上的权限管理方法 一 核心概念与总体思路 权限管理通常包含三层: 认证 Authentication:确认客户端/ Broker / Zookeeper 的身份,常用机制有 SASL/PLAIN、SASL/...
Kafka 在 CentOS 上的权限管理方法
一 核心概念与总体思路
- 权限管理通常包含三层:
- 认证 Authentication:确认客户端/ Broker / Zookeeper 的身份,常用机制有 SASL/PLAIN、SASL/SCRAM-SHA-256/512、SASL/GSSAPI(Kerberos);
- 授权 Authorization:基于 ACL 控制主体(Principal,如 User:alice)对资源(如 Topic、Group、Cluster)的操作(如 Read、Write、Create、Delete、Describe);
- 信道加密 Encryption:通过 SSL/TLS 对传输链路加密(可与 SASL 组合使用)。
- 在 CentOS 上的落地顺序建议:先启用认证(SASL),再开启授权(ACL),必要时叠加 SSL/TLS。
二 方案一 SASL/SCRAM 动态认证 + ACL(推荐)
- 适用场景:需要动态增删用户、不重启 Broker;内网或外网均可。
- 核心步骤:
- 创建 SCRAM 用户(Kafka 2.0+ 推荐用 –bootstrap-server;老版本可用 –zookeeper)
- 创建管理员:
bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config ‘SCRAM-SHA-256=[iterations=4096,password=Admin@123]’ --entity-type users --entity-name admin - 创建业务用户:
bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config ‘SCRAM-SHA-256=[iterations=4096,password=Producer@123]’ --entity-type users --entity-name producer
bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config ‘SCRAM-SHA-256=[iterations=4096,password=Consumer@123]’ --entity-type users --entity-name consumer - 查看/删除:
bin/kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type users
bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --delete-config ‘SCRAM-SHA-256’ --entity-type users --entity-name producer
- 创建管理员:
- 配置 Broker 启用 SASL/SCRAM
- server.properties 关键项:
listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
allow.everyone.if.no.acl.found=false
super.users=User:admin - JAAS 配置(如 /usr/local/kafka/config/kafka_server_jaas.conf):
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required;
} ; - 启动参数引入 JAAS:
export KAFKA_OPTS=“-Djava.security.auth.login.config=/usr/local/kafka/config/kafka_server_jaas.conf”
- server.properties 关键项:
- 配置客户端(生产者/消费者)
- 生产者 client.properties:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“producer” password=“Producer@123”; - 消费者 client.properties:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“consumer” password=“Consumer@123”;
- 生产者 client.properties:
- 使用 ACL 授权
- 主题写入权限:
bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:producer --operation Write --topic test-topic - 主题读取权限(含消费者组):
bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:consumer --operation Read --topic test-topic --group test-group - 查看/删除:
bin/kafka-acls.sh --bootstrap-server localhost:9092 --list --topic test-topic
bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --allow-principal User:producer --operation Write --topic test-topic
- 主题写入权限:
- 验证
- 未授权用户应出现 Not authorized to access topics 或 TopicAuthorizationException;授权用户可正常生产/消费。
- 创建 SCRAM 用户(Kafka 2.0+ 推荐用 –bootstrap-server;老版本可用 –zookeeper)
三 方案二 SASL/PLAIN 静态认证 + ACL(简单但不易动态扩用户)
- 适用场景:用户规模小、变更不频繁;配置简单。
- 核心步骤:
- Broker 启用 SASL/PLAIN
- server.properties:
listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
allow.everyone.if.no.acl.found=false
super.users=User:admin - JAAS(/usr/local/kafka/config/kafka_server_jaas.conf):
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username=“admin” password=“Admin@123”
user_admin=“Admin@123”
user_producer=“Producer@123”
user_consumer=“Consumer@123”;
} ; - 启动参数:export KAFKA_OPTS=“-Djava.security.auth.login.config=/usr/local/kafka/config/kafka_server_jaas.conf”
- server.properties:
- 客户端(client.properties):
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username=“producer” password=“Producer@123”; - ACL 授权(与 SCRAM 相同):
bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:producer --operation Write --topic test-topic
bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:consumer --operation Read --topic test-topic --group test-group - 说明
- SASL/PLAIN 的用户与口令需要在 JAAS 中预置,新增用户需重启 Broker;SASL/SCRAM 支持运行时增删用户,更灵活。
- Broker 启用 SASL/PLAIN
四 常见注意事项与排错要点
- 权限主体格式为 User:用户名(如 User:alice);ACL 资源需明确到 Topic/Group/Cluster,消费者组权限要与实际 group.id 一致。
- 未授权访问常见报错:Not authorized to access topics 或 TopicAuthorizationException;请核对 ACL、principal、以及客户端配置是否一致。
- 若启用 Zookeeper SASL,需为 ZK 配置 SASL 认证与 JAAS,并将 Kafka 相关依赖 JAR 放入 ZK 的 classpath,否则 Broker 与 ZK 通信会失败。
- 生产建议:优先选择 SASL/SCRAM + ACL;如需链路加密,叠加 SSL/TLS;为运维账号配置 super.users,并严格控制最小权限。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: kafka在centos上的权限管理方法
本文地址: https://pptw.com/jishu/770026.html
