管理Kafka用户权限
操作场景
在启用Kerberos认证的集群中,用户使用Kafka前需要拥有对应的权限。MRS集群支持将Kafka的使用权限,授予不同用户。
Kafka默认用户组如表1所示。
在MRS 3.x及之后版本中,Kafka支持两种鉴权插件:“Kafka开源自带鉴权插件”和“Ranger鉴权插件”。
本章节描述的是基于“Kafka开源自带鉴权插件”的用户权限管理。若想使用 “Ranger鉴权插件”,请参考添加Kafka的Ranger访问权限策略。
前提条件
- 已安装客户端。
- 用户已明确业务需求,并准备一个属于kafkaadmin组的用户,作为Kafka管理员用户。例如“admin”。
操作步骤
- 进入ZooKeeper实例页面:
- MRS 3.x之前版本,单击集群名称,登录集群详情页面,选择“组件管理 > ZooKeeper > 实例”。
若集群详情页面没有“组件管理”页签,请先完成IAM用户同步(在集群详情页的“概览”页签,单击“IAM用户同步”右侧的“同步”进行IAM用户同步)。
- MRS 3.x及后续版本,登录FusionInsight Manager,具体请参见访问FusionInsight Manager(MRS 3.x及之后版本)。然后选择“集群 > 待操作的集群名称 > 服务 > ZooKeeper > 实例”。
- MRS 3.x之前版本,单击集群名称,登录集群详情页面,选择“组件管理 > ZooKeeper > 实例”。
- 查看ZooKeeper角色实例的IP地址。
记录ZooKeeper角色实例其中任意一个的IP地址即可。
- 根据业务情况,准备好客户端,登录安装客户端的节点。
请根据客户端所在位置,参考使用MRS客户端章节,登录安装客户端的节点。
- 执行以下命令,切换到客户端目录,例如“/opt/client/Kafka/kafka/bin”。
cd /opt/client/Kafka/kafka/bin
- 执行以下命令,配置环境变量。
source /opt/client/bigdata_env
- 执行以下命令,进行用户认证。
kinit 组件业务用户
- MRS 3.x之前版本:选择业务需要对应的场景,管理Kafka用户权限。
- 查看某个主题的权限控制列表
sh kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper角色实例所在节点IP地址:2181/kafka --list --topic 主题名称
- 为某个用户添加生产者的权限
sh kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper角色实例所在节点IP地址:2181/kafka --add --allow-principal User:用户名 --producer --topic 主题名称
- 删除某个用户的生产者权限
sh kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper角色实例所在节点IP地址:2181/kafka --remove --allow-principal User:用户名 --producer --topic 主题名称
- 为某个用户添加消费者的权限
sh kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper角色实例所在节点IP地址:2181/kafka --add --allow-principal User:用户名 --consumer --topic 主题名称 --group 消费者组名称
- 删除某个用户的消费者权限
sh kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper角色实例所在节点IP地址:2181/kafka --remove --allow-principal User:用户名 --consumer --topic 主题名称 --group 消费者组名称
删除权限时需要输入两次“y”确认删除权限。
- 查看某个主题的权限控制列表
- MRS 3.x及后续版本:使用“kafka-acl.sh”进行用户授权常用命令如下。
- 查看某Topic权限控制列表:
./kafka-acls.sh --authorizer-properties zookeeper.connect=<ZooKeeper的任意一个节点的业务IP:21812181/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:21812181/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:21812181/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:21812181/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:21812181/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:21812181/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:21812181/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:21812181/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:21812181/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权限控制列表: