Kafka用户权限说明
操作场景
当集群已启用Kerberos认证(安全模式)时,用户直接访问Kafka资源会因权限不足导致操作失败。MRS集群支持通过两种鉴权插件(Kafka开源自带鉴权插件和Ranger鉴权插件)进行精细化权限管理。
- Kafka开源自带鉴权插件:使用kafka-acl.sh脚本授予用户查看某Topic权限控制列表、操作Producer、操作Consumer等权限。
- Ranger鉴权插件:通过Ranger为Kafka用户配置Kafka主题的读、写、管理权限以及集群的管理权限。详细使用请参考添加Kafka的Ranger访问权限策略。
本章节介绍如何使用基于Kafka开源自带鉴权插件的用户权限管理。
前提条件
- 已安装客户端,例如安装目录为“/opt/client”,以下操作的客户端目录只是举例,请根据实际安装目录修改。
下载并安装集群客户端的具体操作,请参考安装MRS集群客户端。
- 已创建一个Kafka管理员用户,并加入kafkaadmin用户组。创建用户相关操作请参考创建Kafka用户并绑定角色。
操作步骤
- 登录MRS集群Manager。
登录集群Manager具体操作,请参考访问MRS集群Manager。
- 获取Kafka节点业务IP及端口。
- 获取ZooKeeper节点业务IP及端口。
- 以客户端安装用户,登录安装客户端的节点。
- 执行以下命令,切换到客户端安装目录,例如安装目录为“/opt/client”,具体以实际替换。
cd /opt/client - 执行以下命令配置环境变量。
source bigdata_env
- 执行以下命令,进行用户认证。(集群未启用Kerberos认证(普通模式)时跳过此步骤)
kinit 组件业务用户 - 执行以下命令进入Kafka客户端“bin”目录。
cd Kafka/kafka/bin
- 使用“kafka-acl.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权限控制列表: