
# 添加Kafka的Ranger访问权限策略
#### 操作场景
Kafka作为核心的分布式消息队列组件，承载着业务数据的实时传输与分发任务，广泛应用于日志采集、数据同步、流式计算等关键业务流程。不同角色的用户（如数据开发工程师需向Kafka主题写入业务数据、分析师需读取主题数据进行统计分析、运维人员需管理集群主题与配置）均需基于职责访问Kafka资源。
Ranger提供了完善的Kafka权限配置方案，管理员可通过Ranger WebUI为Kafka用户配置精细化权限策略，助力企业实现Kafka资源的安全管控。
#### 约束与限制
- 通常Kafka内核支持"--zookeeper"和"--bootstrap-server"两种方式创建、删除或查询Topic，最新社区Kafka版本中已删掉了对"--zookeeper"方式的支持，所以建议用户使用"--bootstrap-server"的方式创建、删除或查询Topic。
- 目前Kafka只支持"--bootstrap-server"方式创建、删除或查询Topic行为的鉴权，不支持对"--zookeeper"方式的鉴权。
 
#### 前提条件
- 集群中已安装Ranger服务且服务运行正常。
- 集群中已创建需要配置权限的用户、用户组或Role，如果是新创建的用户，需等待用户自动同步至Ranger后才可以配置相关权限策略。
 
#### 操作步骤
1. 使用Ranger管理员用户登录Ranger WebUI页面，具体操作可参考[登录Ranger WebUI界面](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1850.html)。
2. 在首页中单击"KAFKA"区域的组件插件名称如"Kafka"。
3. 单击"Add New Policy"，添加Kafka权限控制策略。
4. 根据业务需求配置相关参数。 
   表1Kafka权限参数 
   | 参数名称              | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   |:---|:---|
   | Policy Type       | 策略类型，Access策略是基于具体资源路径的权限控制。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | Policy Conditions | IP过滤策略，可自定义，配置当前策略适用的主机节点，可填写一个或多个IP或IP段，并且IP填写支持"\*"通配符。 例如：192.168.1.10,192.168.1.20或者192.168.1.\*。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | Policy Name       | 策略名称，可自定义，不能与本服务内其他策略名称重复。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | Policy Label      | 为当前策略指定一个标签，您可以根据这些标签搜索报告和筛选策略。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | topic             | 配置当前策略适用的topic名，可以填写多个值。 这里支持通配符，例如：test、test\*、\*。 "Include"策略适用于当前输入的对象，"Exclude"表示策略适用于除去当前输入内容之外的其他对象。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | Description       | 策略描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | Audit Logging     | 该策略命中时是否生成审计日志。 - Yes：当用户触发该策略的权限校验时，无论校验结果是允许（Allow）还是拒绝（Deny），会生成一条审计日志。  - No：当用户触发该策略的权限校验时，不会生成任何审计日志。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | Allow Conditions  | 策略允许条件，配置本策略内允许的权限及例外，例外条件优先级高于正常条件。 在"Select Role"、"Select Group"、"Select User"列选择已创建好的需要授予权限的Role、用户组或用户。 单击"Add Conditions"，添加策略适用的IP地址范围，单击"Add Permissions"，添加对应权限。 - Publish：生产权限。  - Consume：消费权限。  - Describe：查询权限。  - Create： 创建主题权限。  - Delete： 删除主题权限。  - Describe Configs：查询配置权限。  - Alter：修改topic的partition数量的权限。  - Alter Configs：修改配置权限。  - Select/Deselect All：全选/取消全选。   如需添加多条权限控制规则，可单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676907242.png)按钮添加。 如需当前条件中的用户或用户组管理本条策略，可勾选"Delegate Admin"，这些用户将成为受委托的管理员。被委托的管理员可以更新、删除本策略，它还可以基于原始策略创建子策略。 |
   | Deny Conditions   | 策略拒绝条件，配置本策略内拒绝的权限及例外，配置方法与"Allow Conditions"类似，拒绝条件的优先级高于"Allow Conditions"中配置的允许条件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      
   例如为用户"testuser"添加"test"主题的生产权限，配置如下：
   图1Kafka权限配置示例   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676747530.png "点击放大")
   表2常见权限配置场景 
   | **任务场景**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | **角色授权操作**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   |:---|:---|
   | 设置Kafka管理员权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 1. 在首页中单击"KAFKA"区域的组件插件名称，例如"Kafka"。  2. 选择"Policy Name"为"all - topic"的策略，单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676747514.png)按钮编辑策略。  3. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  4. 单击"Add Permissions"，勾选"Select/Deselect All"。                                                                                                                                                                                                                                                 |
   | 设置用户对Topic的创建权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 1. 在"topic"配置Topic名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Create"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 设置用户对Topic的删除权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 1. 在"topic"配置Topic名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Delete"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 设置用户对Topic的查询权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 1. 在"topic"配置Topic名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Describe"和"Describe Configs"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 设置用户对Topic的生产权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 1. 在"topic"配置Topic名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Publish"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 设置用户对Topic的消费权限 因为消费Topic时，涉及到Offset的管理操作，必须同时开启ConsumerGroup的"Consume"权限，详见"设置用户对ConsumerGroup Offsets的提交权限"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 1. 在"topic"配置Topic名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Consume"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 设置用户对Topic的扩容权限（增加分区）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 1. 在"topic"配置Topic名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Alter"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 设置用户对Topic的配置修改权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 当前Kafka内核暂不支持基于"--bootstrap-server"的Topic参数修改行为，故当前Ranger不支持对此行为的鉴权操作。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 设置用户对Cluster的所有管理权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 1. 在"cluster"右侧输入并选择集群名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Kafka Admin"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 设置用户对Cluster的创建权限 对于Cluster的Create操作鉴权主要涉及以下两个场景： - 集群开启了"auto.create.topics.enable"参数后，客户端向服务的还未创建的Topic发送数据的场景，此时会判断用户是否有集群的Create权限。  - 对于用户创建大量Topic的场景，如果授予用户Cluster Create权限，那么该用户可以在集群内部创建任意Topic。                                                                                                                                                                                                                                                                                                                                                                                                                                    | 1. 在首页中单击"KAFKA"区域的组件插件名称，例如"Kafka"。  2. 选择"Policy Name"为"all - cluster"的策略，单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724866609.png)按钮编辑策略。  3. 在"cluster"右侧输入并选择集群名。  4. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  5. 单击"Add Permissions"，勾选"Create"。                                                                                                                                                                                         |
   | 设置用户对Cluster的配置修改权限 此处的配置修改权限，指的是Broker、Broker Logger的配置权限。当授予用户配置修改权限后，即使不授予配置查询权限也可查询配置详情（配置修改权限高于且包含配置查询权限）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 1. 在"cluster"右侧输入并选择集群名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Alter Configs"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 设置用户对Cluster的配置查询权限 此处查询指的是查询集群内的Broker、Broker Logger信息，该查询不涉及Topic。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 1. 在"cluster"右侧输入并选择集群名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Describe"和 "Describe Configs"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 设置用户对Cluster的Idempotent Write权限 此权限会对用户客户端的Idempotent Produce行为进行鉴权。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 1. 在"cluster"右侧输入并选择集群名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Idempotent Write"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | 设置用户对Cluster的分区迁移权限管理 Cluster的Alter权限可以对以下三种场景进行权限控制： 1. Partition Reassign场景下，迁移副本的存储目录。  2. 集群里各分区内部leader选举。  3. ACL管理（添加或删除）。   其中[1]和[2]都是集群内部Controller与Broker间、Broker与Broker间的操作，创建集群时，默认授予内置kafka用户此权限，普通用户授予此权限没有意义。 [3]涉及ACL的管理，ACL设计的就是用于鉴权，由于目前Kafka鉴权已全部托管给Ranger，所以这个场景也基本不涉及（配置后亦不生效）。 | 1. 在"cluster"右侧输入并选择集群名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Alter"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 设置用户对Cluster的Cluster Action权限 此权限主要对集群内部副本主从同步、节点间通信进行控制，在集群创建时已经授权给内置的kafka用户，普通用户授予此权限没有意义。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 1. 在"cluster"右侧输入并选择集群名。  2. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  3. 单击"Add Permissions"，勾选"Cluster Action"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | 设置用户对TransactionalId的权限 - "Publish"权限主要对用户开启了事务特性的客户端请求进行鉴权，例如事务开启、结束、提交offset、事务性数据生产等行为。  - "Describe"权限主要对于开启事务特性的客户端与Coordinator的请求进行鉴权。  - 建议在开启事务特性的场景下，给用户同时授予"Publish"和"Describe"权限。                                                                                                                                                                                                                                                                                                                                                                                                                  | 1. 在首页中单击"KAFKA"区域的组件插件名称，例如"Kafka"。  2. 选择"Policy Name"为"all - transactionalid"的策略，单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676747510.png)按钮编辑策略。    3. 在"transactionalid"配置事务ID。  4. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  5. 单击"Add Permissions"，勾选"Publish"和"Describe"。                                                                                                      |
   | 设置用户对DelegationToken的权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 1. 在首页中单击"KAFKA"区域的组件插件名称，例如"Kafka"。  2. 选择"Policy Name"为"all - delegationtoken"的策略，单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724746725.png)按钮编辑策略。  3. 在"delegationtoken"配置delegationtoken。  4. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  5. 单击"Add Permissions"，勾选"Describe"。 **当前Ranger对DelegationToken的鉴权控制仅限于对查询的权限控制，不支持对DelegationToken的create、renew、expire操作的权限控制。**    |
   | 设置用户对ConsumerGroup Offsets的查询权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 1. 在首页中单击"KAFKA"区域的组件插件名称，例如"Kafka"。  2. 选择"Policy Name"为"all - consumergroup"的策略，单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724866601.png)按钮编辑策略。  3. 在"consumergroup"配置需要管理的consumergroup。  4. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  5. 单击"Add Permissions"，勾选"Describe"。                                                                                                                                                                    |
   | 设置用户对ConsumerGroup Offsets的提交权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 1. 在首页中单击"KAFKA"区域的组件插件名称，例如"Kafka"。  2. 选择"Policy Name"为"all - consumergroup"的策略，单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676747506.png)按钮编辑策略。  3. 在"consumergroup"配置需要管理的consumergroup。  4. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  5. 单击"Add Permissions"，勾选"Consume"。 **当给用户授予了ConsumerGroup的"Consume"权限后，用户会同时被授予"Describe"权限。**                                                  |
   | 设置用户对ConsumerGroup Offsets的删除权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 1. 在首页中单击"KAFKA"区域的组件插件名称，例如"Kafka"。  2. 选择"Policy Name"为"all - consumergroup"的策略，单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676907238.png)按钮编辑策略。  3. 在"consumergroup"配置需要管理的consumergroup。  4. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  5. 单击"Add Permissions"，勾选"Delete"。 **当给用户授予了ConsumerGroup的"Delete"权限后，用户会同时被授予"Describe"权限。**                                                     |
      
   
   
5. （可选）添加策略有效期。在页面右上角单击"Add Validity period"，设置"Start Time"和"End Time"，选择"Time Zone"。单击"Save"保存。 
   如需添加多条策略有效期，可单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676747522.png)按钮添加。如需删除策略有效期，可单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676907246.png)按钮删除。
   
   
6. 单击"Add"，在策略列表可查看策略的基本信息。等待策略生效后，验证相关权限是否正常。 
   如需禁用某条策略，可单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724746729.png)按钮编辑策略，设置策略开关为"Disabled"。
   如果不再使用策略，可单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676747534.png)按钮删除策略。
   
   
 
#### 相关文档
- 配置Ranger策略时，不同条件的优先级可参考[Ranger权限策略条件判断优先级](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1851.html#mrs_01_1851__section2381255446)。
- 如需查看Ranger中的相关权限设置对象信息，例如用户、用户组、Role，可参考[查看Ranger用户权限同步信息](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1854.html)。
- MRS集群中新用户可在Manager中进行创建，可参考[创建MRS集群用户](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0345.html)。
 
