前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于ranger的kafka权限控制

基于ranger的kafka权限控制

作者头像
陈猿解码
发布2023-02-28 15:05:36
1.6K0
发布2023-02-28 15:05:36
举报
文章被收录于专栏:陈猿解码陈猿解码

上一篇文章讲到了kafka中的ACL,也提到了是以插件式的形式实现的,本文就来聊聊基于ranger的kafka访问控制。

【ranger插件安装】


要使用ranger插件,首先需要对ranger的kafka插件包进行解压缩,然后进入解压缩后的目录,修改安装的配置文件`install.properties`,具体修改的配置项包括:

代码语言:javascript
复制
# 插件安装位置(通常就是kafka的安装位置)
COMPONENT_INSTALL_DIR_NAME=/opt/kafka
# ranger服务端的地址(拉取策略的URL)
POLICY_MGR_URL=http://192.168.3.31:6080
# kafka服务的名称
REPOSITORY_NAME=hncscwc-kafka
CUSTOM_USER=kafka
CUSTOM_GROUP=kafka

注:CUSTOM_USER和CUSTOM_GROUP是执行脚本的系统用户及用户组,也就是说对应的用户与用户组必须存在。

完成配置后,执行`enable-kafka-plugin.sh`脚本,将ranger插件需要的配置文件及jar包拷贝到kafka安装目录的正确位置中。

对于ranger也开启kerberos的场景下,即插件需要通过https的方式从ranger服务端拉取策略。

可以先直接修改插件目录下`install/conf.templates/enable/ranger-kafka-secruity-changes.cfg`文件中的配置项`ranger.plugin.kafka.policy.rest.ssl.config.file`的值,例如:

代码语言:javascript
复制
ranger.plugin.kafka.policy.rest.ssl.config.file    %REST_SSL_CONFIG_FILE_PATH% mod create-if-not-exists

同样在上面的install.properties中也添加对应的配置项:

代码语言:javascript
复制
# https的配置信息
REST_SSL_CONFIG_FILE_PATH=/opt/kafka/config/ranger-policymgr-ssl.xml

这样,执行完`enable-kafka-plugin.sh`后,配置文件`ranger-policymgr-ssl.xml`会拷贝到正确的位置中,同时配置文件`ranger-kafka-security.xml`中对应的配置项的值也是正确的。

代码语言:javascript
复制
<property>
    <name>ranger.plugin.kafka.policy.rest.ssl.config.file</name>
    <value>/opt/kafka/config/ranger-policymgr-ssl.xml</value>
    <description>
        Path to the file containing SSL details to contact Ranger Admin
    </description>
</property>

否则,需要手动修改该配置文件的值(默认值为`/etc/kafka/conf/ranger-policymgr-ssl.xml`),或者将配置文件拷贝到对应路径中。

最后,还需要修改配置文件`server.properties`,指定鉴权类为ranger插件中对应的实现类。

代码语言:javascript
复制
authorizer.class.name=org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer

完成这些操作后,重启kafka服务进程。

【服务端配置】


这里主要就是添加一个kafka的服务,如下图所示:

对于ranger本身也开启kerberos的情况下,需要增加配置项`policy.download.auth.users`并正确配置kafka服务使用的kerberos的用户。

之后重启kafka服务后,在ranger的管理界面就可以看到对应的插件模块来拉取策略的日志信息了。

配置注意事项:

  • 配置文件加载失败问题

按照上面的步骤配置操作后,重启服务后可能有如下的错误信息:

代码语言:javascript
复制
[2022-08-15 19:25:35,779] ERROR addResourceIfReadable(ranger-kafka-audit.xml): couldn't find resource file location (org.apache.ranger.authorization.hadoop.config.RangerConfiguration)
[2022-08-15 19:25:35,781] ERROR addResourceIfReadable(ranger-kafka-security.xml): couldn't find resource file location (org.apache.ranger.authorization.hadoop.config.RangerConfiguration)
[2022-08-15 19:25:35,781] ERROR addResourceIfReadable(ranger-kafka-policymgr-ssl.xml): couldn't find resource file location (org.apache.ranger.authorization.hadoop.config.RangerConfiguration)
[2022-08-15 19:25:35,783] INFO PolicyEngineOptions: { evaluatorType: auto, evaluateDelegateAdminOnly: false, disableContextEnrichers: false, disableCustomConditions: false, disableTagPolicyEvaluation: false, enableTagEnricherWithLocalRefresher: false, disableTrieLookupPrefilter: false, optimizeTrieForRetrieval: false, cacheAuditResult: false } (org.apache.ranger.authorization.hadoop.config.RangerPluginConfig)
[2022-08-15 19:25:35,804] INFO Calling plugin.init() (org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer)

出现该错误意味着没有正确加载到插件所需要的配置文件,这样也就无法正确到ranger服务端完成策略信息的拉取。

之所以会出现这个错误,是因为插件中的配置类`RangerConfiguration`实际上是继承了hadoop中的配置类`org.apache.hadoop.conf.Configuration`,添加了对应的配置文件(资源后),默认会从CLASSPATH指定的路径中查找配置文件并读取,而实际kafka启动时的CLASSPATH并未指定配置文件的路径,因此会存在这样的错误信息。

可以通过在启动脚本`kafka-run-class.sh`脚本中给CLASSPATH添加对应的路径即可。

  • ranger开启kerberos情况下,客户端拉取策略失败问题

ranger服务端也开启kerberos的情况下,插件去拉取策略的方式不再是http,而是https。而插件中的rest客户端延用hadoop中的机制,从配置文件中读取`hadoop.security.authentication`的认证方式以决定使用http还是https。而这个配置项是存在于配置文件`core-site.xml`中的。

未正确配置的话,会有如下错误:

代码语言:javascript
复制
[2022-08-15 19:37:10,883] WARN Error getting policies. secureMode=false, user=kafka/hdp-kafka-hdp-kafka-0@BIGDATA.COM (auth:KERBEROS), response={"httpStatusCode":400,"statusCode":0}, serviceName=hncscwc-kafka (org.apache.ranger.admin.client.RangerAdminRESTClient)

因此,需要手动在kafka服务的配置文件目录下,添加`core-site.xml`配置文件,并增加对应的配置项:

代码语言:javascript
复制
<configuration>
    <property>
        <name>hadoop.security.authorization</name>
        <value>true</value>
    </property>
    <property>
        <name>hadoop.security.authentication</name>
        <value>kerberos</value>
    </property>
</configuration>

【插件使用与验证】


在ranger服务端可以看到插件成功拉取到策略后,剩下的就是策略的配置与具体的验证工作了。

对于策略的配置,也就是对不同的资源,设置不同用户在不同IP下的可操作权限,对我们而言,最常见的还是topic的生产消费了,添加允许指定用户生产消费的策略如下所示:

在服务端通过命令进行生产消费的验证如下所示:

使用过程中,也还有一些需要注意的地方。例如:topic中的生产和消费操作,这实际上对应于原生权限中的write+describe和read+describe,因此拒绝其中的一个操作而允许另外一个操作,其实连带describe权限也就拒绝了,那么实际上两个操作都不能正确执行(不管生产或消费都需要describe操作权限);另外,topic中的消费权限不像原生命令中"--consumer"的操作会同时设置topic和consumergroup的权限,ranger中需要分别进行权限的设置才行。

【总结】


本文介绍了kafka中如何正确配置ranger插件,并基于ranger进行权限控制,以及安装部署使用中容易踩坑的地方。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈猿解码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档