管理Kafka用户权限
操作场景
在启用Kerberos认证的集群中,用户使用Kafka前需要拥有对应的权限。MRS集群支持将Kafka的使用权限,授予不同用户。
Kafka默认用户组如表1所示。
Kafka支持两种鉴权插件:“Kafka开源自带鉴权插件”和“Ranger鉴权插件”。
本章节描述的是基于“Kafka开源自带鉴权插件”的用户权限管理。若想使用 “Ranger鉴权插件”,请参考添加Kafka的Ranger访问权限策略。
如果集群已启用Kerberos认证(安全模式),并且Kafka开启了Ranger鉴权,如果服务端参数“allow.everyone.if.no.acl.found”配置为“true”,则Ranger对任何操作将不鉴权。
前提条件
- 已安装客户端。
- 用户已明确业务需求,并准备一个属于kafkaadmin组的用户,作为Kafka管理员用户。例如“admin”。
操作步骤
- 查看ZooKeeper角色实例的IP地址。
记录ZooKeeper角色实例其中任意一个的IP地址即可。
- 根据业务情况,准备好客户端,登录安装客户端的节点。
请根据客户端所在位置,登录安装客户端的节点。
- 执行以下命令,切换到客户端目录,例如“/opt/client/Kafka/kafka/bin”。
cd /opt/client/Kafka/kafka/bin
- 执行以下命令,配置环境变量。
source /opt/client/bigdata_env
- 执行以下命令,进行用户认证。
kinit 组件业务用户
- 使用“kafka-acls.sh”进行用户授权常用命令如下。
- 查看某Topic权限控制列表:
./kafka-acls.sh --authorizer-properties zookeeper.connect=<ZooKeeper的任意一个节点的业务IP:2181/kafka > --list --topic <Topic名称>
./kafka-acls.sh --bootstrap-server <Kafka集群IP:21007> --command-config ../config/client.properties --list --topic <Topic名称>
- 添加给某用户Producer权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=<ZooKeeper的任意一个节点的业务IP:2181/kafka > --add --allow-principal User:<用户名> --producer --topic <Topic名称>
./kafka-acls.sh --bootstrap-server <Kafka集群IP:21007> --command-config ../config/client.properties --add --allow-principal User:<用户名> --producer --topic <Topic名称>
- 给某用户批量添加Producer权限
./kafka-acls.sh --authorizer-properties zookeeper.connect=<ZooKeeper的任意一个节点的业务IP:2181/kafka > --add --allow-principal User:<用户名> --producer --topic <Topic名称> --resource-pattern-type prefixed
./kafka-acls.sh --bootstrap-server <Kafka集群IP:21007> --command-config ../config/client.properties --add --allow-principal User:<用户名> --producer --topic <Topic名称>--resource-pattern-type prefixed
- 删除某用户Producer权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=<ZooKeeper的任意一个节点的业务IP:2181/kafka > --remove --allow-principal User:<用户名> --producer --topic <Topic名称>
./kafka-acls.sh --bootstrap-server <Kafka集群IP:21007> --command-config ../config/client.properties --remove --allow-principal User:<用户名> --producer --topic <Topic名称>
- 批量删除某用户Producer权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=<ZooKeeper的任意一个节点的业务IP:2181/kafka > --remove --allow-principal User:<用户名> --producer --topic <Topic名称> --resource-pattern-type prefixed
./kafka-acls.sh --bootstrap-server <Kafka集群IP:21007> --command-config ../config/client.properties --remove --allow-principal User:<用户名> --producer --topic <Topic名称>--resource-pattern-type prefixed
- 添加给某用户Consumer权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=<ZooKeeper的任意一个节点的业务IP:2181/kafka > --add --allow-principal User:<用户名> --consumer --topic <Topic名称> --group <消费者组名称>
./kafka-acls.sh --bootstrap-server <Kafka集群IP:21007> --command-config ../config/client.properties --add --allow-principal User:<用户名> --consumer --topic <Topic名称> --group <消费者组名称>
- 给某用户批量添加Consumer权限
./kafka-acls.sh --authorizer-properties zookeeper.connect=<ZooKeeper的任意一个节点的业务IP:2181/kafka > --add --allow-principal User:<用户名> --consumer --topic <Topic名称> --group <消费者组名称> --resource-pattern-type prefixed
./kafka-acls.sh --bootstrap-server <Kafka集群IP:21007> --command-config ../config/client.properties --add --allow-principal User:<用户名> --consumer --topic <Topic名称> --group <消费者组名称> --resource-pattern-type prefixed
- 删除某用户Consumer权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=<ZooKeeper的任意一个节点的业务IP:2181/kafka > --remove --allow-principal User:<用户名> --consumer --topic <Topic名称> --group <消费者组名称>
./kafka-acls.sh --bootstrap-server <Kafka集群IP:21007> --command-config ../config/client.properties --remove --allow-principal User:<用户名> --consumer --topic <Topic名称> --group <消费者组名称>
- 批量删除某用户Consumer权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=<ZooKeeper的任意一个节点的业务IP:2181/kafka > --remove --allow-principal User:<用户名> --consumer --topic <Topic名称> --group <消费者组名称> --resource-pattern-type prefixed
./kafka-acls.sh --bootstrap-server <Kafka集群IP:21007> --command-config ../config/client.properties --remove --allow-principal User:<用户名> --consumer --topic <Topic名称> --group <消费者组名称> --resource-pattern-type prefixed
- 查看某Topic权限控制列表: