如何使用Sentry为Solr赋权

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

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确认数据都已经导入成功。

[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用户组。

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的权限测试。

[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

(可左右滑动)

如上所述会报错

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

(可左右滑动)

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)

(可左右滑动)

说明对于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"

(可左右滑动)

说明对所有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"}]'

(可左右滑动)

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

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

(可左右滑动)

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

(可左右滑动)

8.使用fayson用户查询collection1,

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

(可左右滑动)

查询成功,说明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"}]'

(可左右滑动)

更新失败,提示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实操

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2018-06-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop实操

如何在Redhat7.4安装CDH6.0

Cloudera在前天8月30日,对外宣布正式发布Cloudera Enterprise 6,相关介绍可以参考Fayson昨天的文章《Cloudera Ente...

1.8K6
来自专栏挖掘大数据

通过Sqoop将MySQL数据导入到HDFS/HBase

本文将利用Sqoop将MySQL海量测试数据导入到HDFS和HBase。

3580
来自专栏PPV课数据科学社区

【工具】大数据在线分析利器:Hue

? Hue百科: Hue 是一种基于Apche hadoop基础平台的在线开源数据分析接口,参见 gethue.com ? Hue的主要功能: 提供SQL 接...

4746
来自专栏Hadoop实操

如何在Redhat7.4安装CDH6.0.0_beta1

7732
来自专栏蓝天

Hive 1.2.1&Spark&Sqoop安装指南

本文的安装参照《Hive 0.12.0安装指南》,内容来源于官方的:GettingStarted,将Hive 1.2.1安装在Hadoop 2.7.1上。本...

2441
来自专栏纯洁的微笑

springboot(十七):使用Spring Boot上传文件

上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spring Boot上传文件的小案例。 1、pom包配置 我们使用S...

7444
来自专栏菩提树下的杨过

jboss eap 6.2+ 版本中 加密datasource密码等敏感信息

默认情况下,在jboss eap 6.2+ 管理控制台创建datasource后,会在standalone.xml(独立模式)或host.xml(域模式)中以明...

2907
来自专栏Hadoop实操

8.如何使用RedHat7的OpenLDAP和Sentry权限集成

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

52711
来自专栏乐沙弥的世界

基于Innobackupex的全备恢复

    对于MySQL数据库的热备,xtrabackup是大多数DBA朋友们的选择。xtrabackup内嵌了一个innobackupex可用于热备MySQL数...

3902
来自专栏一名合格java开发的自我修养

sqoop关系型数据迁移原理以及map端内存为何不会爆掉窥探

  序:map客户端使用jdbc向数据库发送查询语句,将会拿到所有数据到map的客户端,安装jdbc的原理,数据全部缓存在内存中,但是内存没有出现爆掉情况,这是...

1072

扫码关注云+社区

领取腾讯云代金券