温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
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实操