# 配置Kafka Topic权限
Kafka实例开启密文接入后，支持对Topic进行ACL（Access Control List）权限管理。为不同用户配置不同Topic的生产消费消息权限，实现用户间权限隔离。
本章节主要介绍Kafka实例开启密文接入后，如何对Topic进行用户授权。
#### 约束与限制
- 当"allow.everyone.if.no.acl.found"为"true"时，若Topic未授权任何用户，则所有用户均可发布/订阅该Topic。若Topic已授权某一个或多个用户，则仅授权用户可以发布/订阅该Topic，未授权用户不能发布/订阅该Topic。"allow.everyone.if.no.acl.found"在[配置参数](https://support.huaweicloud.com/usermanual-kafka/kafka-ug-0007.html)中修改。
- 当"allow.everyone.if.no.acl.found"为"false"时，仅初始用户（即首次开启密文接入时设置的用户）拥有发布/订阅所有Topic的权限，其他用户在未授权时不能发布/订阅Topic。"allow.everyone.if.no.acl.found"在[配置参数](https://support.huaweicloud.com/usermanual-kafka/kafka-ug-0007.html)中修改。
- 若"allow.everyone.if.no.acl.found"从初始默认值"true"修改为"false"后，无论后续该配置值是否再次修改，初始用户始终拥有所有Topic的发布/订阅权限。
- 如果Topic同时设置"默认用户"权限和单个用户权限，取两者的并集。
- 单机实例不支持配置Topic权限。
- 批量配置Topic权限后，会覆盖Topic之前的权限。
- 修改Topic权限过程中，可能存在权限短暂失效的情况，客户端报"AuthorizationException"错误，建议在客户端设置重试机制，具体方法请参考[Kafka客户端使用建议](https://support.huaweicloud.com/usermanual-kafka/Kafka-client-best-practice.html)。
 
#### 前提条件
- Kafka实例已[开启密文接入](https://support.huaweicloud.com/usermanual-kafka/kafka_ug_0044.html)。
- 已[创建用户](https://support.huaweicloud.com/usermanual-kafka/kafka-ug-0003.html)。
 
#### 在Topic详情页查看Topic权限
1. 登录[Kafka控制台](https://console.huaweicloud.com/dms/?engine=kafka&locale=zh-cn#/queue/manager/newKafkaList)。
2. 在管理控制台左上角单击![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0143929918.png)，选择Kafka实例所在的区域。
3. 单击Kafka实例名称，进入实例详情页面。
4. 在左侧导航栏单击"实例管理 \> Topic管理"，进入Topic列表页面。
5. 单击Topic名称，进入Topic详情页面。
6. 单击"用户权限"，进入"用户权限"页签。
7. 查看该Topic的所有授权用户及其对应权限。 
   图1Topic的用户权限   
   ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002378009609.png "点击放大")
   表1用户权限 
   | 参数名称 | 说明                 |
   |:---|:---|
   | 用户名     | 拥有发布/订阅Topic权限的用户。 |
   | 权限    | 该用户对应的权限。          |
      
   
   
 
#### 配置Topic权限
您可为SASL用户授予发布/订阅权限，支持为单个Topic授权，也可同时为多个Topic授权。
通过以下方式配置Topic权限。
- 为多个用户授予同一Topic权限：在"实例管理 \> Topic管理"页面，为多个用户授予单个Topic的发布/订阅权限。
- 为多个用户授予多个Topic权限：在"实例管理 \> Topic管理"页面，为多个用户授予多个Topic的发布/订阅权限。
 
- [为多个用户授予同一Topic权限]
  1. 登录[Kafka控制台](https://console.huaweicloud.com/dms/?engine=kafka&locale=zh-cn#/queue/manager/newKafkaList)。
  
  2. 在管理控制台左上角单击![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0143929918.png)，选择Kafka实例所在的区域。
  
  3. 单击Kafka实例名称，进入实例详情页面。
  
  4. 在左侧导航栏单击"实例管理 \> Topic管理"，进入Topic列表页面。
  
  5. 通过以下任意一种方法，进入配置用户权限页面。 
     - 在待配置用户权限的Topic所在行，单击"用户权限"，弹出"用户权限"对话框。
     
     - 单击待配置用户权限的Topic名称，进入Topic详情页面。单击右上角的"设置权限"，弹出"用户权限"对话框。
     
     - 单击待配置用户权限的Topic名称，进入Topic详情页面。单击"用户权限"，进入"用户权限"页签。单击"设置权限"，弹出"用户权限"对话框。
     
     
     
     
  
  6. 为用户配置Topic权限。 
     - 如需为所有用户配置相同的权限，勾选"默认用户"，并设置权限。如下图所示，所有用户都拥有发布此Topic的权限。
       图2为所有用户配置相同的权限   
       ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002188618648.png "点击放大") 
     
     - 如需为某个用户配置权限，不勾选"默认用户"，在"用户列表"区域，勾选需要订阅/发布/发布+订阅此Topic的用户名。如果用户过多，在搜索框中输入用户名，快速查找用户。在"Topic权限"区域，为用户配置不同的权限。如下图所示，此时只有"test"、"send"和"receive"用户可以订阅/发布此Topic，"send_receive"用户无法订阅/发布此Topic。
       图3为某个用户配置权限   
       ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002312280198.png "点击放大") 
     
     
     **同时设置了"默认用户"权限和单个用户权限时，取两者的并集。**如下图所示，"test"和"receive"用户可以订阅+发布此Topic，其他用户只能发布此Topic。
     图4为用户配置Topic权限   
     ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002312283230.png "点击放大")
     
     
  
  7. 在"用户权限"对话框底部，单击"一键输入"，系统自动在输入框中输入"MODIFY"，确认修改权限。然后单击"确定"，跳转到"即时任务"页面。
  
  8. 当"设置Topic权限"任务状态为"成功"时，表示配置Topic权限成功。
  
  9. 验证权限设置是否正确。 
     1. 在左侧导航栏单击"Topic管理"，进入Topic列表页面。
     
     2. 单击已设置用户权限的Topic名称，进入Topic详情页面。
     
     3. 单击"用户权限"，进入"用户权限"页签。
     
     4. 查看已设置的用户权限。
        图5查看已经授权的用户及其对应的权限   
        ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002378250801.png "点击放大") 
     
     
     
     
   
- [为多个用户授予多个Topic权限]
  1. 登录[Kafka控制台](https://console.huaweicloud.com/dms/?engine=kafka&locale=zh-cn#/queue/manager/newKafkaList)。
  
  2. 在管理控制台左上角单击![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0143929918.png)，选择Kafka实例所在的区域。
  
  3. 单击Kafka实例名称，进入实例详情页面。
  
  4. 在左侧导航栏单击"实例管理 \> Topic管理"，进入Topic列表页面。
  
  5. 在Topic名称左侧的方框中，勾选待设置用户权限的Topic，单击页面上方的"设置用户权限"，弹出"批量设置权限"对话框。
  
  6. 为用户批量设置Topic权限。 
     **批量设置权限页面不展示已设置的权限，且设置之后会覆盖之前的权限。** 例如："test"用户初始拥有"发布+订阅"Topic01权限，在批量设置Topic权限时，将"test"用户设置为"发布"权限，最终"test"用户只拥有"发布"Topic01权限。
     - 如需为所有用户设置相同的权限，勾选"默认用户"，并设置权限。如下图所示，所有用户都拥有发布topic01和topic02的权限。
       图6为所有用户设置相同的权限   
       ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002223699629.png "点击放大") 
     
     - 如需为某个用户设置权限，不勾选"默认用户"，在"用户列表"区域，勾选待授权的用户名。如果用户过多，在搜索框中输入用户名，快速查找用户。在"Topic权限"区域，为用户设置不同的权限。如下图所示，此时只有"test"、"send"和"receive"用户可以订阅/发布topic01和topic02，"send_receive"用户无法订阅/发布topic01和topic02。
       图7为多个用户设置权限   
       ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002312157540.png "点击放大") 
      
     **同时设置了"默认用户"权限和单个用户权限时，取两者的并集。**如下图所示，"test"和"receive"用户可以订阅+发布topic01和topic02，其他用户只能发布topic01和topic02。
     图8为用户设置Topic权限   
     ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002346082189.png "点击放大")
     
     
  
  7. 在"批量设置权限"对话框底部，单击"一键输入"，系统自动在输入框中输入"MODIFY"，确认修改权限。然后单击"确定"，跳转到"即时任务"页面。
  
  8. 当"设置Topic权限"任务状态为"成功"时，表示配置Topic权限成功。
  
  9. 验证权限设置是否正确。 
     1. 在左侧导航栏单击"Topic管理"，进入Topic列表页面。
     
     2. 单击已设置用户权限的Topic名称，进入Topic详情页面。
     
     3. 单击"用户权限"，进入"用户权限"页签。
     
     4. 查看已设置的用户权限。
        图9查看已经授权的用户及其对应的权限   
        ![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0000002378250801.png "点击放大") 
     
     
     
     
   
#### 删除单个Topic权限
1. 登录[Kafka控制台](https://console.huaweicloud.com/dms/?engine=kafka&locale=zh-cn#/queue/manager/newKafkaList)。
2. 在管理控制台左上角单击![](https://support.huaweicloud.com/usermanual-kafka/zh-cn_image_0143929918.png)，选择Kafka实例所在的区域。
3. 单击Kafka实例名称，进入实例详情页面。
4. 在左侧导航栏单击"实例管理 \> Topic管理"，进入Topic列表页面。
5. 通过以下任意一种方法，进入设置用户权限页面。 
   - 在待删除用户权限的Topic所在行，单击"用户权限"，弹出"用户权限"对话框。
   
   - 单击待删除用户权限的Topic名称，进入Topic详情页面。单击右上角的"设置权限"，弹出"用户权限"对话框。
   
   - 单击待删除用户权限的Topic名称，进入Topic详情页面。单击"用户权限"，进入"用户权限"页签。单击"设置权限"，弹出"用户权限"对话框。
   
   
   
   
6. 在"Topic权限"区域，在待删除权限的用户所在行，单击"删除"。
7. 在"用户权限"对话框底部，单击"一键输入"，系统自动在输入框中输入"MODIFY"，确认修改权限。然后单击"确定"，跳转到"即时任务"页面。
8. 当"设置Topic权限"任务状态为"成功"时，表示删除Topic权限成功。
9. 验证权限是否已删除。 
   1. 在左侧导航栏单击"Topic管理"，进入Topic列表页面。
   
   2. 单击已删除用户权限的Topic名称，进入Topic详情页面。
   
   3. 单击"用户权限"，进入"用户权限"页签。
   
   4. 已删除的用户不再显示在"用户权限"中，表明权限已成功删除。
   
   
   
   
 
#### 相关文档
如果您希望通过API设置Topic权限，请参考[设置用户权限](https://support.huaweicloud.com/api-kafka/UpdateTopicAccessPolicy.html)。
