添加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后才可以配置相关权限策略。
操作步骤
- 使用Ranger管理员用户登录Ranger WebUI页面,具体操作可参考登录Ranger WebUI界面。
- 在首页中单击“KAFKA”区域的组件插件名称如“Kafka”。
- 单击“Add New Policy”,添加Kafka权限控制策略。
- 根据业务需求配置相关参数。
表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管理员权限
- 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。
- 选择“Policy Name”为“all - topic”的策略,单击
按钮编辑策略。 - 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Select/Deselect All”。
设置用户对Topic的创建权限
- 在“topic”配置Topic名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Create”。
设置用户对Topic的删除权限
- 在“topic”配置Topic名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Delete”。
设置用户对Topic的查询权限
- 在“topic”配置Topic名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Describe”和“Describe Configs”。
设置用户对Topic的生产权限
- 在“topic”配置Topic名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Publish”。
设置用户对Topic的消费权限
因为消费Topic时,涉及到Offset的管理操作,必须同时开启ConsumerGroup的“Consume”权限,详见“设置用户对ConsumerGroup Offsets的提交权限”。
- 在“topic”配置Topic名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Consume”。
设置用户对Topic的扩容权限(增加分区)
- 在“topic”配置Topic名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Alter”。
设置用户对Topic的配置修改权限
当前Kafka内核暂不支持基于“--bootstrap-server”的Topic参数修改行为,故当前Ranger不支持对此行为的鉴权操作。
设置用户对Cluster的所有管理权限
- 在“cluster”右侧输入并选择集群名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Kafka Admin”。
设置用户对Cluster的创建权限
对于Cluster的Create操作鉴权主要涉及以下两个场景:
- 集群开启了“auto.create.topics.enable”参数后,客户端向服务的还未创建的Topic发送数据的场景,此时会判断用户是否有集群的Create权限。
- 对于用户创建大量Topic的场景,如果授予用户Cluster Create权限,那么该用户可以在集群内部创建任意Topic。
- 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。
- 选择“Policy Name”为“all - cluster”的策略,单击
按钮编辑策略。 - 在“cluster”右侧输入并选择集群名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Create”。
设置用户对Cluster的配置修改权限
此处的配置修改权限,指的是Broker、Broker Logger的配置权限。当授予用户配置修改权限后,即使不授予配置查询权限也可查询配置详情(配置修改权限高于且包含配置查询权限)。
- 在“cluster”右侧输入并选择集群名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Alter Configs”。
设置用户对Cluster的配置查询权限
此处查询指的是查询集群内的Broker、Broker Logger信息,该查询不涉及Topic。
- 在“cluster”右侧输入并选择集群名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Describe”和 “Describe Configs”。
设置用户对Cluster的Idempotent Write权限
此权限会对用户客户端的Idempotent Produce行为进行鉴权。
- 在“cluster”右侧输入并选择集群名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Idempotent Write”。
设置用户对Cluster的分区迁移权限管理
Cluster的Alter权限可以对以下三种场景进行权限控制:
其中1和2都是集群内部Controller与Broker间、Broker与Broker间的操作,创建集群时,默认授予内置kafka用户此权限,普通用户授予此权限没有意义。
3涉及ACL的管理,ACL设计的就是用于鉴权,由于目前Kafka鉴权已全部托管给Ranger,所以这个场景也基本不涉及(配置后亦不生效)。
- 在“cluster”右侧输入并选择集群名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Alter”。
设置用户对Cluster的Cluster Action权限
此权限主要对集群内部副本主从同步、节点间通信进行控制,在集群创建时已经授权给内置的kafka用户,普通用户授予此权限没有意义。
- 在“cluster”右侧输入并选择集群名。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Cluster Action”。
设置用户对TransactionalId的权限
- “Publish”权限主要对用户开启了事务特性的客户端请求进行鉴权,例如事务开启、结束、提交offset、事务性数据生产等行为。
- “Describe”权限主要对于开启事务特性的客户端与Coordinator的请求进行鉴权。
- 建议在开启事务特性的场景下,给用户同时授予“Publish”和“Describe”权限。
- 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。
- 选择“Policy Name”为“all - transactionalid”的策略,单击
按钮编辑策略。
- 在“transactionalid”配置事务ID。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Publish”和“Describe”。
设置用户对DelegationToken的权限
设置用户对ConsumerGroup Offsets的查询权限
- 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。
- 选择“Policy Name”为“all - consumergroup”的策略,单击
按钮编辑策略。 - 在“consumergroup”配置需要管理的consumergroup。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Describe”。
设置用户对ConsumerGroup Offsets的提交权限
设置用户对ConsumerGroup Offsets的删除权限
- (可选)添加策略有效期。在页面右上角单击“Add Validity period”,设置“Start Time”和“End Time”,选择“Time Zone”。单击“Save”保存。
如需添加多条策略有效期,可单击
按钮添加。如需删除策略有效期,可单击
按钮删除。 - 单击“Add”,在策略列表可查看策略的基本信息。等待策略生效后,验证相关权限是否正常。
如需禁用某条策略,可单击
按钮编辑策略,设置策略开关为“Disabled”。如果不再使用策略,可单击
按钮删除策略。
相关文档
- 配置Ranger策略时,不同条件的优先级可参考Ranger权限策略条件判断优先级。
- 如需查看Ranger中的相关权限设置对象信息,例如用户、用户组、Role,可参考查看Ranger用户权限同步信息。
- MRS集群中新用户可在Manager中进行创建,可参考创建MRS集群用户。


