
# Kafka用户权限说明
#### 操作场景
当集群已启用Kerberos认证（安全模式）时，用户直接访问Kafka资源会因权限不足导致操作失败。MRS集群支持通过两种鉴权插件（Kafka开源自带鉴权插件和Ranger鉴权插件）进行精细化权限管理。
- Kafka开源自带鉴权插件：使用kafka-acl.sh脚本授予用户查看某Topic权限控制列表、操作Producer、操作Consumer等权限。
- Ranger鉴权插件：通过Ranger为Kafka用户配置Kafka主题的读、写、管理权限以及集群的管理权限。详细使用请参考[添加Kafka的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1861.html)。
本章节介绍如何使用基于Kafka开源自带鉴权插件的用户权限管理。
#### 前提条件
- 已安装客户端，例如安装目录为"/opt/client"，以下操作的客户端目录只是举例，请根据实际安装目录修改。 下载并安装集群客户端的具体操作，请参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
  

- 已创建一个Kafka管理员用户，并加入kafkaadmin用户组。创建用户相关操作请参考[创建Kafka用户并绑定角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1032.html#mrs_01_1032__section15172119027)。
 
#### 操作步骤
1. 登录MRS集群Manager。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 获取Kafka节点业务IP及端口。 
   1. 选择"集群 \> 服务 \> Kafka \> 实例"，查看并记录任意一个Broker角色实例的业务IP地址。
   
   2. 选择"配置 \> 全部配置"，并根据集群模式获取端口号：
      - 集群已启用Kerberos认证（安全模式）：搜索"sasl.port"参数，查看并记录端口号，默认为21007。
      
      - 集群未启用Kerberos认证（普通模式）：搜索"port"参数，查看并记录端口号，默认为9092。
       
   
   
   
   
3. 获取ZooKeeper节点业务IP及端口。 
   1. 选择"集群 \> 服务 \> ZooKeeper \> 实例"，查看并记录任意一个ZooKeeper角色实例的业务IP地址。
   
   2. 选择"配置 \> 全部配置"，搜索"clientPort"，查看并记录端口号。 创建LTS版本类型集群时，可以选择"组件端口"为"开源"场景或"定制"场景，选择"开源"时ZooKeeper默认端口为2181，选择"定制"时ZooKeeper默认端口为24002。
      
   
   
   
   
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
     ```
     
   
   
   
   
 
#### 相关文档
- 使用Kafka客户端命令创建Topic时，报错NoAuthException、KeeperErrorCode = NoAuth for /config/topics，请参考[创建Kafka Topic时报错"NoAuthException"](https://support.huaweicloud.com/trouble-mrs/mrs_03_0121.html)章节进行处理。

- 使用Kafka客户端命令设置Topic ACL权限时，发现Topic无法被设置，报错NoAuthException: KeeperErrorCode = NoAuth for /kafka-acl-changes/acl_changes_0000000002，请参考[设置Kafka Topic ACL权限时报错"NoAuthException"](https://support.huaweicloud.com/trouble-mrs/mrs_03_0122.html)章节进行处理。
- 启动Kafka服务失败，查看服务启动日志中报错"failed.export and check keytab file failed"，请参考[账号锁定导致启动Kafka组件失败](https://support.huaweicloud.com/trouble-mrs/mrs_03_0106.html)章节进行处理。
- 系统预置的角色、用户组、用户及其介绍，请参考[MRS集群默认权限信息说明](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300031.html)。
 
