龙空技术网

基于ranger的kafka权限控制

Java技术识堂 194

前言:

此时你们对“java的权限控制”大约比较珍视,兄弟们都想要分析一些“java的权限控制”的相关知识。那么小编在网上汇集了一些关于“java的权限控制””的相关知识,希望咱们能喜欢,我们快快来了解一下吧!

【ranger插件安装】

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

# 插件安装位置(通常就是kafka的安装位置)COMPONENT_INSTALL_DIR_NAME=/opt/kafka# ranger服务端的地址(拉取策略的URL)POLICY_MGR_URL= kafka服务的名称REPOSITORY_NAME=hncscwc-kafkaCUSTOM_USER=kafkaCUSTOM_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`的值,例如:

ranger.plugin.kafka.policy.rest.ssl.config.file    %REST_SSL_CONFIG_FILE_PATH% mod create-if-not-exists

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

# 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`中对应的配置项的值也是正确的。

<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插件中对应的实现类。

authorizer.class.name=org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer

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

【服务端配置】

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

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

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

配置注意事项:

配置文件加载失败问题

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

[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` 中的。

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

[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`配置文件,并增加对应的配置项:

<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进行权限控制,以及安装部署使用中容易踩坑的地方。

标签: #java的权限控制