0
点赞
收藏
分享

微信扫一扫

0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析

DYBOY 2022-09-08 阅读 191

作者:冉南阳


1

文档编写目的


Sentry在CDH平台中定位为统一的授权框架,即所有的组件都要受Sentry的管理,当然也是为了方便用户的操作,一个入口为所有数据相关进行授权。Solr作为CDH的关键组件之一也不例外,安全授权同样受到Sentry的管理。在前面的文章中,Fayson介绍过Sentry与Solr如何结合使用,参考《​​0294-如何使用Sentry为Solr赋权​​》,《​​0301-使用命令行创建collection时Sentry给Solr赋权的问题​​》和《​​0304-如何在Hue中使用Sentry为Solr赋权​​》。但在CDH5中,Solr的版本较低是4.10.3,而CDH6的Solr是7.4,Solr的更新较大,在使用上也会有些差别。


本文描述在CDH6.1.0集群中,使用Sentry给Solr的collection赋予Query后,查询时不会报权限问题,但是不能查询到数据的问题解决。


  • 测试环境:

1.CM/CDH6.1.0

2.操作系统版本为Redhat7.4

3.采用root用户进行操作

4.集群已启用Kerberos


2

创建collection并导入数据


1.首先准备一个8个字段的csv文件,一共1行,使用逗号分隔,用来导入Solr并实现全文索引。


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_hadoop


注意:这个csv定义了文件头,一共8个字段,从field_1到field_8。


2. 定义一个schema文件,一共8个字段,从field_1到field_8,其中field_1为主键。


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_数据_02


3. 准备创建collection的脚本,并创建collection

创建collection脚本


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_数据_03


创建collection:创建collection需要使用solr的principle。


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_hadoop_04


4. 将准备好的csv文件导入到collection1

导入文件也需要使用solr的principle


curl --negotiate -u : 'http://hadoop12:8983/solr/collection1/update/csv?commit=true' \
-H 'Content-Type: application/csv' \
--data-binary @/data1/solr/data.csv


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_solr_05


5. 查询collection1确认数据都已经导入成功。


curl --negotiate -u : "http://hadoop12:8983/solr/collection1/query?q=*%3A*&wt=json&indent=true"


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_hadoop_06


3

故障重现


1.首先创建一个admin角色,并赋予所有权限,并对应到solr用户组。


solrctl sentry --create-role admin
solrctl sentry --add-role-group admin solr
solrctl sentry --grant-privilege admin 'collection=*->action=*'
solrctl sentry --grant-privilege admin 'config=*->action=*'
solrctl sentry --list-privileges admin


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_hadoop_07


2.未赋予kibana用户任何权限时查看数据

会报403错


kinit kibana
curl --negotiate -u : "http://hadoop12:8983/solr/collection1/query?q=*%3A*&wt=json&indent=true"


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_数据_08


3.授予kibana用户查询权限


solrctl sentry --create-role kibana
solrctl sentry --grant-privilege kibana 'collection=*->action=Update'
solrctl sentry --add-role-group kibana kibana
solrctl sentry --list-privileges kibana


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_数据_09

0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_数据_10


4.使用kibana查询数据


kinit kibana
curl --negotiate -u : "http://hadoop12:8983/solr/collection1/query?q=*%3A*&wt=json&indent=true"


此时未报错,但是查询时没有数据。


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_hadoop_11


4

问题解决


1、修改配置文件

修改配置文件tmp/${COLLECTION}_configs/conf/solrconfig.xml,把<searchComponent name="queryDocAuthorization"class="org.apache.solr.handler.component.QueryDocAuthorizationComponent" >下的 <bool name="enabled">true</bool>改成 false。


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_solr_12


2. reload collection


kinit solr
solrctl collection --reload collection1


reload需要使用solr用户


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_数据_13


3.再次使用kibana用户查看数据,成功查询数据


curl --negotiate -u : "http://hadoop12:8983/solr/collection1/query?q=*%3A*&wt=json&indent=true"


0617-6.1.0-使用Sentry给Solr的collection赋予Query权限后查询异常分析_hadoop_14


5

总结


1. CDH 6.1里移除了collection level的授权,如果不需要document level授权认证的话,需要在solrconfig.xml 中把 <searchComponent name="queryDocAuthorization" class="org.apache.solr.handler.component.QueryDocAuthorizationComponent" > 下的 <bool name="enabled">true</bool> 改成 false。这样默认会是collection 级别的授权认证。


2.如果要使用document level的授权认证,那么schema中必须包含特殊的列 senty_auth,它的值就是sentry的role 名,以决定哪个role可以查看这个document。


举报

相关推荐

0 条评论