前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Sentry为Solr赋权

如何使用Sentry为Solr赋权

作者头像
Fayson
发布2018-07-12 15:23:56
9560
发布2018-07-12 15:23:56
举报
文章被收录于专栏:Hadoop实操Hadoop实操

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

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=*%3A*&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=*%3A*&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=*%3A*&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=*%3A*&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=*%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干货,欢迎转发和分享。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档