
# 创建Kafka权限角色
#### 操作场景
在启用Kerberos认证（安全模式）的Kafka集群中，不同用户对Kafka的权限需求不同。如果不进行精细化的权限控制，所有用户将拥有相同的操作权限，存在安全风险和数据误操作隐患。
该任务指导MRS集群管理员在Manager创建一个角色并为用户绑定该角色，绑定该角色的用户将拥有对应角色的权限。Kafka角色可设置对Topic的创建、删除权限，或者对Topic的生产和消费权限等。
#### 约束与限制
- 本章节内容适用于MRS 3.x及后续版本。
- 集群已启用Kerberos认证（安全模式）支持创建Kafka角色，集群未启用Kerberos认证（普通模式）不支持创建Kafka角色。
- 如果当前组件使用了Ranger进行权限控制，须基于Ranger配置相关策略进行权限管理，具体操作可参考[添加Kafka的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1861.html)。
 
 #### 创建Kafka角色
1. 登录MRS集群Manager。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 选择"系统 \> 权限 \> 角色"。
3. 单击"添加角色"，然后在"角色名称"和"描述"输入角色名字与描述。例如角色名称为"kafkarole"。
4. 在"配置资源权限"中，选择"*待操作集群的名称* \> Kafka"。
   
   根据业务需求选择权限，具体配置项，请参见[表1]。
    表1配置项说明 
   | **任务场景**        | **角色授权操作**                                                                                                                                                                                                                               |
   |:---|:---|
   | 设置Kafka管理员权限    | 在"配置资源权限"的表格中勾选"Kafka Manager权限"。 **设置此权限后，拥有Topic的创建、修改、删除等权限，但是不具备任何Topic的生产和消费权限。**                                                                                                                    |
   | 设置用户对Topic的生产权限 | 1. 在"配置资源权限"的表格中单击"Kafka Topic生产和消费权限"。  2. 在指定Topic的"权限"列，勾选"Kafka生产者权限"。       |
   | 设置用户对Topic的消费权限 | 1. 在"配置资源权限"的表格中单击"Kafka Topic生产和消费权限"。  2. 在指定Topic的"权限"列，勾选"Kafka消费者权限"。   |
      
   
   
5. 单击"确定"完成，返回"角色"页面。 
   角色创建完成后，绑定该角色的用户将拥有对应权限。
   
   
 
 #### 创建Kafka用户并绑定角色
本操作以创建一个具有Kafka管理员权限的人机用户为例进行说明。
1. 登录MRS集群Manager。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 选择"系统 \> 权限 \> 用户"。
3. 在用户列表上方，单击"添加用户"，配置如下参数。 
   - 用户名：自定义，例如"kafkauser"
   
   - 用户类型：人机
   
   - 密码、确认新密码：自定义用户密码
   
   - 用户组：单击"添加"，选择用户组，例如选择"kafkaadmin"，单击"确定"。 Kafka默认用户组如下表所示。
     表2Kafka默认用户组 
     | **用户组名称**      | **描述**                                                          |
     |:---|:---|
     | kafka          | Kafka普通用户组。添加入本组的用户，需要被kafkaadmin组用户授予特定Topic的读写权限，才能访问对应Topic。 |
     | kafkaadmin     | Kafka管理员用户组。添加入本组的用户，拥有所有Topic的创建，删除，授权及读写权限。                   |
     | kafkasuperuser | Kafka高级用户组。添加入本组的用户，拥有所有Topic的读写权限。                             |
     | kafkaui        | Kafka UI用户组。添加入本组的用户，拥有Kafka UI的查看权限。                           |
        
     
   
   - 主组：根据业务实际需要选择，例如"kafkaadmin"。
   
   - 角色：单击"添加"，为用户绑定角色。 可以选择系统预置的角色，如果系统预置的角色不满足需求，可以参考[创建Kafka角色]创建角色后在此处进行绑定。例如"kafkarole"。
     
   
   
   
   
4. 单击"确定"完成用户创建。 
   "人机"用户创建成功后，通常需要修改初始密码后才可以正常使用。可以单击Manager页面右上角用户名称，选择"退出登录"并单击"确定"，使用新创建的用户登录MRS集群Manager，按照界面提示重置密码即可。
   
   
5. 检查新创建用户的权限。以下步骤以创建Topic为例进行说明。 
   1. 以客户端安装用户，登录安装客户端的节点。
   
   2. 执行以下命令，切换到客户端安装目录，例如安装目录为"/opt/client"，具体以实际替换。
      ```
      cd /opt/client
      ```
      
   
   3. 执行以下命令配置环境变量。
      ```
      source bigdata_env
      ```
      
   
   4. 执行以下命令，进行用户认证，该用户为新创建的用户名，例如**kafka** **user** 。（集群未启用Kerberos认证（普通模式）跳过此步骤）
      ```
      kinit kafkauser
      ```
      
   
   5. 执行以下命令进入Kafka客户端"bin"目录。
      ```
      cd Kafka/kafka/bin
      ```
      
   
   6. 执行以下命令，使用**kafka-topics.sh** 创建Kafka主题，例如主题名称为"topic1"。
      ```
      ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
      ```
      - 如果使用的用户**包含** 创建Topic的权限，则执行成功，例如返回结果如下：
        ```
        Created topic topic1.
        ...
        ```
        
      
      - 如果使用的用户**不包含** 创建Topic的权限，则执行失败，例如返回结果如下：
        ```
        Error while executing topic command : Authorization failed.
        [xxx] ERROR org.apache.kafka.common.errors.TopicAuthorizationException: Authorization failed.
         (kafka.admin.TopicCommand$)
        ...
        ```
        
       
   
   
   
   
 
#### 相关文档
- 使用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)。
 
