更新时间:2025-11-26 GMT+08:00
分享

Kafka用户权限说明

操作场景

集群已启用Kerberos认证(安全模式)时,用户直接访问Kafka资源会因权限不足导致操作失败。MRS集群支持通过两种鉴权插件(Kafka开源自带鉴权插件和Ranger鉴权插件)进行精细化权限管理。

  • Kafka开源自带鉴权插件:使用kafka-acl.sh脚本授予用户查看某Topic权限控制列表、操作Producer、操作Consumer等权限。
  • Ranger鉴权插件:通过Ranger为Kafka用户配置Kafka主题的读、写、管理权限以及集群的管理权限。详细使用请参考添加Kafka的Ranger访问权限策略

本章节介绍如何使用基于Kafka开源自带鉴权插件的用户权限管理。

前提条件

  • 已安装客户端,例如安装目录为“/opt/client,以下操作的客户端目录只是举例,请根据实际安装目录修改

    下载并安装集群客户端的具体操作,请参考安装MRS集群客户端

操作步骤

  1. 登录MRS集群Manager。

    登录集群Manager具体操作,请参考访问MRS集群Manager

  2. 获取Kafka节点业务IP及端口

    1. 选择“集群 > 服务 > Kafka > 实例”,查看并记录任意一个Broker角色实例的业务IP地址。
    2. Kafka集群端口号:

      集群已启用Kerberos认证(安全模式):默认为21007

      集群未启用Kerberos认证(普通模式):默认为9092

  3. 获取ZooKeeper节点业务IP及端口。

    1. 选择“集群 > 服务 > ZooKeeper > 实例”,查看并记录任意一个ZooKeeper角色实例的业务IP地址。
    2. 选择“配置 > 全部配置”,搜索“clientPort”,查看并记录端口号。

      默认端口如下:

      • 开源端口默认值为:2181
      • 定制端口默认值为:24002

      端口定制/开源区分:创建LTS版本类型集群时,可以选择“组件端口”为“开源”或是“定制”,选择“开源”使用开源端口,选择“定制”使用定制端口。

  4. 以客户端安装用户,登录安装客户端的节点。
  5. 执行以下命令,切换到客户端安装目录,例如安装目录为“/opt/client,具体以实际替换

    cd /opt/client

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

    source bigdata_env

  7. 执行以下命令,进行用户认证。(集群未启用Kerberos认证(普通模式)跳过此步骤)

    kinit 组件业务用户

  8. 执行以下命令进入Kafka客户端“bin”目录。

    cd Kafka/kafka/bin

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

相关文档