• 基于ranger的kafka权限控制


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

    【ranger插件安装】


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

    1. # 插件安装位置(通常就是kafka的安装位置)
    2. COMPONENT_INSTALL_DIR_NAME=/opt/kafka
    3. # ranger服务端的地址(拉取策略的URL)
    4. POLICY_MGR_URL=http://192.168.3.31:6080
    5. # kafka服务的名称
    6. REPOSITORY_NAME=hncscwc-kafka
    7. CUSTOM_USER=kafka
    8. 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`的值,例如:

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

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

    1. # https的配置信息
    2. REST_SSL_CONFIG_FILE_PATH=/opt/kafka/config/ranger-policymgr-ssl.xml

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

    1.     ranger.plugin.kafka.policy.rest.ssl.config.file
    2.     /opt/kafka/config/ranger-policymgr-ssl.xml
    3.     
    4.         Path to the file containing SSL details to contact Ranger Admin
    5.     

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

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

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

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

    【服务端配置】


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

    f1ee05e1089ced5b29af85c85aabc9c9.png

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

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

    9add713f722655a713f5b6cc7cfef776.png

    配置注意事项:

    • 配置文件加载失败问题

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

    1. [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)
    2. [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)
    3. [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)
    4. [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)
    5. [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`配置文件,并增加对应的配置项:

    1.     
    2.         hadoop.security.authorization
    3.         true
    4.     
    5.     
    6.         hadoop.security.authentication
    7.         kerberos
    8.     

    【插件使用与验证】


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

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

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

    c588330b486cff5decb10c9d6950dfe7.png

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

    【总结】


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

    好了,这就是本文的全部内容,如果觉得本文对您有帮助,请多多转发,也欢迎加我微信交流~

  • 相关阅读:
    Vue双向绑定原理
    python安装 learn2learn库 || 在线安装方式或者本地安装
    宏观经济和风电预测误差分析(Matlab代码实现)
    力扣 -- 516. 最长回文子序列
    Nuxt 配置meta内所有seo标签,同时共用给所有vue组件的噢
    堪称最全的Java面试笔记(准备+基础+数据库+框架+面经)
    MIT6.830-2022-lab1实验思路详细讲解
    [附源码]计算机毕业设计JAVAjsp校园活动募集平台
    【计算机网络】数据链路层
    使用 PyTorch 的计算机视觉简介 (4/6)
  • 原文地址:https://blog.csdn.net/hncscwc/article/details/126357774