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

管理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对任何操作将不鉴权。

表1 Kafka默认用户组

用户组名称

描述

kafkaadmin

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

kafkasuperuser

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

kafka

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

kafkaui

Kafka UI用户组。添加入本组的用户,拥有Kafka UI的查看权限。

前提条件

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

操作步骤

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

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

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

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

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

    cd /opt/client/Kafka/kafka/bin

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

    source /opt/client/bigdata_env

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

    kinit 组件业务用户

  6. 使用“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