更新时间:2026-01-09 GMT+08:00
分享

添加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界面
  2. 在首页中单击“KAFKA”区域的组件插件名称如“Kafka”。
  3. 单击“Add New Policy”,添加Kafka权限控制策略。
  4. 根据业务需求配置相关参数。

    表1 Kafka权限参数

    参数名称

    描述

    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:全选/取消全选。

    如需添加多条权限控制规则,可单击按钮添加。

    如需当前条件中的用户或用户组管理本条策略,可勾选“Delegate Admin”,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除本策略,它还可以基于原始策略创建子策略。

    Deny Conditions

    策略拒绝条件,配置本策略内拒绝的权限及例外,配置方法与“Allow Conditions”类似,拒绝条件的优先级高于“Allow Conditions”中配置的允许条件。

    例如为用户“testuser”添加“test”主题的生产权限,配置如下:

    图1 Kafka权限配置示例
    表2 常见权限配置场景

    任务场景

    角色授权操作

    设置Kafka管理员权限

    1. 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。
    2. 选择“Policy Name”为“all - topic”的策略,单击按钮编辑策略。
    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”的策略,单击按钮编辑策略。
    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管理(添加或删除)。

    其中12都是集群内部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”的策略,单击按钮编辑策略。
    1. 在“transactionalid”配置事务ID。
    2. 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
    3. 单击“Add Permissions”,勾选“Publish”和“Describe”。

    设置用户对DelegationToken的权限

    1. 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。
    2. 选择“Policy Name”为“all - delegationtoken”的策略,单击按钮编辑策略。
    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”的策略,单击按钮编辑策略。
    3. 在“consumergroup”配置需要管理的consumergroup。
    4. 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
    5. 单击“Add Permissions”,勾选“Describe”。

    设置用户对ConsumerGroup Offsets的提交权限

    1. 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。
    2. 选择“Policy Name”为“all - consumergroup”的策略,单击按钮编辑策略。
    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”的策略,单击按钮编辑策略。
    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”保存。

    如需添加多条策略有效期,可单击按钮添加。如需删除策略有效期,可单击按钮删除。

  6. 单击“Add”,在策略列表可查看策略的基本信息。等待策略生效后,验证相关权限是否正常。

    如需禁用某条策略,可单击按钮编辑策略,设置策略开关为“Disabled”。

    如果不再使用策略,可单击按钮删除策略。

相关文档

相关文档