更新时间:2024-05-11 GMT+08:00

管理Kafka用户权限

操作场景

在启用Kerberos认证的集群中,用户使用Kafka前需要拥有对应的权限。MRS集群支持将Kafka的使用权限,授予不同用户。

Kafka默认用户组如表1所示。

在MRS 3.x及之后版本中,Kafka支持两种鉴权插件:“Kafka开源自带鉴权插件”和“Ranger鉴权插件”。

本章节描述的是基于“Kafka开源自带鉴权插件”的用户权限管理。若想使用 “Ranger鉴权插件”,请参考添加Kafka的Ranger访问权限策略

表1 Kafka默认用户组

用户组名称

描述

kafkaadmin

Kafka管理员用户组。添加入本组的用户,拥有所有主题的创建,删除,授权及读写权限。

kafkasuperuser

Kafka高级用户组。添加入本组的用户,拥有所有主题的读写权限。

kafka

Kafka普通用户组。添加入本组的用户,需要被kafkaadmin组用户授予特定主题的读写权限,才能访问对应主题。

前提条件

  • 已安装客户端。
  • 用户已明确业务需求,并准备一个属于kafkaadmin组的用户,作为Kafka管理员用户。例如“admin”

操作步骤

  1. 进入ZooKeeper实例页面:

    • MRS 2.0.1之前版本,登录MRS Manager,选择“服务管理 > ZooKeeper > 实例”。
    • MRS 2.0.1及至3.x之前版本,在MRS控制台单击集群名称,选择“组件管理 > ZooKeeper > 实例”。

      若集群详情页面没有“组件管理”页签,请先完成IAM用户同步(在集群详情页的“概览”页签,单击“IAM用户同步”右侧的“同步”进行IAM用户同步)。

  2. 查看ZooKeeper角色实例的IP地址。

    记录ZooKeeper角色实例其中任意一个的IP地址即可。

  3. 根据业务情况,准备好客户端,登录安装客户端的节点。

    请根据客户端所在位置,登录安装客户端的节点。

  4. 执行以下命令,切换到客户端目录,例如“/opt/client/Kafka/kafka/bin”。

    cd /opt/client/Kafka/kafka/bin

  5. 执行以下命令,配置环境变量。

    source /opt/client/bigdata_env

  6. 执行以下命令,进行用户认证。

    kinit 组件业务用户

  7. 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”确认删除权限。

  8. MRS 3.x及后续版本:使用“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