如何使用Sentry为Solr赋权

2018-07-12 15:23:56 浏览数 (1)

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

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的一些细化操作,如下所示:

限于篇幅,本文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。

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

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

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

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

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


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

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

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

点击“create index”

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

点击“upload a file”

点击“Next”

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

点击“Submit”

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

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

代码语言:javascript复制
[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=*:*&wt=json&indent=true"

(可左右滑动)

5.Solr的collection赋权测试


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

代码语言:javascript复制
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

(可左右滑动)

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

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

代码语言:javascript复制
[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

(可左右滑动)

如上所述会报错

代码语言:javascript复制
User fayson does not have privileges for admin

(可左右滑动)

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

代码语言:javascript复制
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

(可左右滑动)

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

代码语言:javascript复制
[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)

(可左右滑动)

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

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

代码语言:javascript复制
[root@cdh02 solr]# curl --negotiate -u : "http://cdh04.fayson.com:8983/solr/collection1/query?q=*:*&wt=json&indent=true"

(可左右滑动)

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

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

代码语言:javascript复制
[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"}]'

(可左右滑动)

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

代码语言:javascript复制
curl --negotiate -u : "http://cdh04.fayson.com:8983/solr/collection1/query?q=*:*&wt=json&rows=20"

(可左右滑动)

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

代码语言:javascript复制
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

(可左右滑动)

8.使用fayson用户查询collection1,

代码语言:javascript复制
curl --negotiate -u : "http://cdh04.fayson.com:8983/solr/collection1/query?q=*:*&wt=json&rows=20"

(可左右滑动)

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

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

代码语言:javascript复制
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"}]'

(可左右滑动)

更新失败,提示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=*:*&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干货,欢迎转发和分享。

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

0 人点赞