
# Kafka用户权限说明
#### 操作场景
在启用Kerberos认证的集群中，用户使用Kafka前需要拥有对应的权限。MRS集群支持将Kafka的使用权限，授予不同用户。
Kafka默认用户组如[表1]所示。
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
在MRS 3.x及之后版本中，Kafka支持两种鉴权插件："Kafka开源自带鉴权插件"和"Ranger鉴权插件"。
本章节描述的是基于"Kafka开源自带鉴权插件"的用户权限管理。若想使用 "Ranger鉴权插件"，请参考[添加Kafka的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_1861.html)。
 表1Kafka默认用户组 
| **用户组名称**      | **描述**                                                    |
|:---|:---|
| kafkaadmin     | Kafka管理员用户组。添加入本组的用户，拥有所有主题的创建，删除，授权及读写权限。                |
| kafkasuperuser | Kafka高级用户组。添加入本组的用户，拥有所有主题的读写权限。                          |
| kafka          | Kafka普通用户组。添加入本组的用户，需要被kafkaadmin组用户授予特定主题的读写权限，才能访问对应主题。 |
   
#### 前提条件
- 已安装客户端。
- 用户已明确业务需求，并准备一个属于kafkaadmin组的用户，作为Kafka管理员用户。例如"admin"。
 
#### 操作步骤
1. 进入ZooKeeper实例页面： 
   - MRS3.x之前版本，单击集群名称，登录集群详情页面，选择"组件管理 \> ZooKeeper \> 实例"。
     ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
     若集群详情页面没有"组件管理"页签，请先完成IAM用户同步（在集群详情页的"概览"页签，单击"IAM用户同步"右侧的"同步"进行IAM用户同步）。
     
   
   - MRS 3.x及后续版本，登录FusionInsight Manager，具体请参见[访问FusionInsight Manager（MRS 3.x及之后版本）](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_2124.html)。然后选择"集群 \> *待操作的集群名*称 \> 服务 \> ZooKeeper \> 实例"。
   
   
   
   
2. 查看ZooKeeper角色实例的IP地址。 
   记录ZooKeeper角色实例其中任意一个的IP地址即可。
   
   
3. 根据业务情况，准备好客户端，登录安装客户端的节点。 
   请根据客户端所在位置，参考[使用MRS客户端](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_2126.html)章节，登录安装客户端的节点。
   
   
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** *消费者组名称*
     
   
   
   ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
   删除权限时需要输入两次"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**
     
   
   
   
   
 
