温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。


Fayson的github:

​https://github.com/fayson/cdhproject​


提示:代码块部分可以左右滑动查看噢


1.文档编写目的




Sentry在CDH平台中定位为统一的授权框架,即所有的组件都要受Sentry的管理,当然也是为了方便用户的操作,一个入口为所有数据相关进行授权。Fayson在前面的文章中介绍了大量Sentry与Hive/Impala的集成文章,其实Sentry除了可以给Hive/Impala表授权外,还可以管理HDFS ACL,Kafka,Solr,Kudu等。本文Fayson主要是介绍如何使用Sentry给Solr的collection进行赋权。


  • 内容概述:

1.Solr与Sentry的集成赋权介绍

2.启用Solr的Sentry赋权

3.创建collection以及导入样例数据

4.Solr的collection赋权测试

5.总结


  • 测试环境:

1.CM5.14.3/CDH5.14.2

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

3.采用root用户进行操作

4.集群已启用Kerberos


2.Solr与Sentry的集成赋权介绍




Sentry是基于角色的权限管理组件,我们在Hive/Impala中使用时,一般是先创建好一个角色,然后对这个角色赋权比如赋予某些数据库或者表的权限,然后将这个角色对应到一个或者多个用户group里。


在Solr中也是一样的,只是角色的权限不再是数据库,表或字段,而是Solr collection与Solr config。对于collection的权限有三种:Query,Update与*,星号代表的是所有权限。


对于Solr config对象来说只有一种权限*,即星号,代表所有权限,但是config可以细分为很多种对象,主要对应到API的一些细化操作,如下所示:


如何使用Sentry为Solr赋权_solr


限于篇幅,本文Fayson不会介绍config的权限分配。而主要介绍基于collection的赋权。对于Solr config具体可以参考:

​https://www.cloudera.com/documentation/enterprise/latest/topics/search_configuration.html#concept_zjx_yvm_zbb​


3.启用Solr的Sentry赋权



1.首先如果要启用Solr的Sentry赋权,Solr服务必须启用Kerberos认证,所以请确保你的CDH集群已经启用了Kerberos。


如何使用Sentry为Solr赋权_json_02


2.然后对Solr服务进行以下配置


如何使用Sentry为Solr赋权_solr_03

如何使用Sentry为Solr赋权_solr_04


保存配置并按照要求重启服务。


3.确保Hue已经集成Sentry与Solr服务。


如何使用Sentry为Solr赋权_json_05

如何使用Sentry为Solr赋权_solr_06


保存配置并按照要求重启服务。


4.创建collection以及导入样例数据




1.这里我们首先准备一个8个字段的csv文件,一共10行,使用逗号分隔,用来导入Solr并实现全文索引。并将该文件put到一个hdfs目录。


如何使用Sentry为Solr赋权_hive_07


2.注意:因为我们开启了Sentry,在创建collection的时候我们需要使用solr用户。否则是没有权限创建collection的。这里跟在Hive/Impala中使用Sentry时,使用hive作为管理员用户是相似的。我们在Hue中创建一个solr的group,以及solr用户,然后用solr用户登录Hue,创建过程略。


如何使用Sentry为Solr赋权_json_08

如何使用Sentry为Solr赋权_solr_09


3.使用solr用户登录hue后,选择“indexes”。


如何使用Sentry为Solr赋权_hive_10


点击“create index”


如何使用Sentry为Solr赋权_solr_11


点击选择第一步我们上传的csv文件


如何使用Sentry为Solr赋权_json_12


点击“upload a file”


如何使用Sentry为Solr赋权_json_13


点击“Next”


如何使用Sentry为Solr赋权_solr_14


注意还要输入collection的名字,这里我们输入“collection1”,选择主键以及其他字段,这里我们选择field_1也即第一个字段为主键。


如何使用Sentry为Solr赋权_json_15


点击“Submit”


如何使用Sentry为Solr赋权_hive_16


这里创建collection以及导入数据成功


如何使用Sentry为Solr赋权_hive_17


4.使用solr用户登录Kerberos,查询collection1确认数据都已经导入成功。


[root@cdh02 _fayson]# kinit -kt /root/solr.keytab solr/cdh02.fayson.com
[root@cdh02 _fayson]# curl --negotiate -u : "http://cdh04.fayson.com:8983/solr/collection1/query?q=*%3A*&wt=json&indent=true"

(可左右滑动)


如何使用Sentry为Solr赋权_hive_18


5.Solr的collection赋权测试




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

(可左右滑动)


如何使用Sentry为Solr赋权_solr_19


注意:必须使用solr用户的principle。


如何使用Sentry为Solr赋权_hive_20


2.接下来,我们开始使用fayson用户进行solr的collection的权限测试。


[root@cdh02 solr]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: fayson@FAYSON.COM
Valid starting Expires Service principal
06/10/2018 11:51:09 06/11/2018 11:51:09 krbtgt/FAYSON.COM@FAYSON.COM
renew until 06/17/2018 11:51:09
06/10/2018 11:51:29 06/11/2018 11:51:09 HTTP/cdh02.fayson.com@FAYSON.COM
renew until 06/15/2018 11:51:29
[root@cdh02 solr]# sh create.sh

(可左右滑动)


如何使用Sentry为Solr赋权_json_21


如上所述会报错


User fayson does not have privileges for admin

(可左右滑动)


3.通过solr用户重新创建一个fayson角色,并赋予所有collection的Update权限。注意需要使用solr用户登录Kerberos


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

(可左右滑动)


如何使用Sentry为Solr赋权_json_22

如何使用Sentry为Solr赋权_json_23


4.再次使用fayson用户登录Kerberos,然后再次创建collection2,可以成功。


[root@cdh02 solr]# kinit fayson
Password for fayson@FAYSON.COM:
[root@cdh02 solr]# sh create.sh
create solr collection
Uploading configs from tmp/collection2_configs/conf to cdh01.fayson.com:2181/solr. This may take up to a minute.
collection1 (2)
collection2 (2)

(可左右滑动)


如何使用Sentry为Solr赋权_json_24


说明对于collection的Update权限即可以创建collection


5.继续使用fayson用户对collection1进行查询。


[root@cdh02 solr]# curl --negotiate -u : "http://cdh04.fayson.com:8983/solr/collection1/query?q=*%3A*&wt=json&indent=true"

(可左右滑动)


如何使用Sentry为Solr赋权_json_25


说明对所有collection有Update权限后可以创建collection,但是查询collection1中的数据失败了,因为fayson用户只有Update权限,而没有Query权限。


6.我们使用fayson用户对collection1进行update操作,测试update权限。


[root@cdh02 solr]# curl --negotiate -u : 'http://cdh04.fayson.com:8983/solr/collection1/update' \
-H 'Content-Type: application/json' \
-d '[{"field_1":"7", "field_2":"1", "field_3":"1", "field_4":"1", "field_5":"1", "field_6":"1", "field_7":"1", "field_8":"1"}]'

(可左右滑动)


如何使用Sentry为Solr赋权_solr_26


插入成功,没有报错,使用solr用户查询collection1,发现新的数据已经插入成功。


curl --negotiate -u : "http://cdh04.fayson.com:8983/solr/collection1/query?q=*%3A*&wt=json&rows=20"

(可左右滑动)


如何使用Sentry为Solr赋权_hive_27

如何使用Sentry为Solr赋权_solr_28


7.我们删除fayson角色,然后重新创建后再次给fayson角色赋予Query权限,然后再次进行测试。


solrctl sentry --drop-role fayson
solrctl sentry --create-role fayson
solrctl sentry --grant-privilege fayson 'collection=*->action=Query'
solrctl sentry --add-role-group fayson fayson
solrctl sentry --list-privileges fayson

(可左右滑动)


如何使用Sentry为Solr赋权_hive_29


8.使用fayson用户查询collection1,


curl --negotiate -u : "http://cdh04.fayson.com:8983/solr/collection1/query?q=*%3A*&wt=json&rows=20"

(可左右滑动)


如何使用Sentry为Solr赋权_solr_30


查询成功,说明Query权限生效。


9.使用fayson用户对collection1进行update操作


curl --negotiate -u : 'http://cdh04.fayson.com:8983/solr/collection1/update' \
-H 'Content-Type: application/json' \
-d '[{"field_1":"8", "field_2":"1", "field_3":"1", "field_4":"1", "field_5":"1", "field_6":"1", "field_7":"1", "field_8":"1"}]'

(可左右滑动)


如何使用Sentry为Solr赋权_json_31


更新失败,提示fayson用户没有权限,因为fayson用户只有query权限,而没有update权限。


6.总结




1.通过Sentry可以对Solr的collection进行权限管理,主要是query和update。


2.如果对某个用户只赋予update权限,则该用户可以创建collection,但是依旧无法查询collection。


3.如果是在Solr中使用Sentry权限管理,CDH集群必须启用Kerberos,同时Solr服务也需要启用Kerberos认证。


4.一旦对solr启用Sentry授权以后,solr用户就是管理员,一切管理员操作都需要使用solr用户来操作,我们在Hue中也同时要创建solr用户与solr组,这个与我们在Hive/Impala中使用Sentry时,hive用户是管理员原理是一样的。


5.一旦Solr服务启用了Kerberos后,curl命令操作solr时,需要加上--negotiate -u参数,具体请参考Fayson昨天的文章《​​如何在Kerberos下使用Solr​​》


6.默认使用“http://xx/xx/xx/query?q=*%3A*&wt=json”时,返回的只有10条,加入“&rows=20”控制返回结果条数。但是使用Hue或者Solr Admin UI则没有限制。


参考:

​https://www.cloudera.com/documentation/enterprise/latest/topics/search_sentry.html#concept_m2p_knc_3w​

​https://www.cloudera.com/documentation/enterprise/latest/topics/cm_sg_sentry_service.html#search_privilege_model​

​https://www.cloudera.com/documentation/enterprise/latest/topics/search_solrctl_examples.html​

​https://www.cloudera.com/documentation/enterprise/latest/topics/search_configuration.html#concept_l3y_txb_mt​



提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。



推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

如何使用Sentry为Solr赋权_solr_32

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操