文档编写目的
在CDH中,Sentry服务是一个基于角色授权的管理组件,通常我们将Sentry用来管理Hive、Impala等组件,但是同样的,Sentry也可以为Solr提供基于角色的细粒度授权,在启用Sentry后,可以对各种操作进行权限上的限制,无论对数据的访问是来自命令行、浏览器还是Hue,都会基于授予的角色拥有的权限来进行管理和限制。要注意的是,启用Sentry对Solr进行权限控制前需要先启用Kerberos,本文档将介绍如何使用Sentry对Solr进行赋权。
- 测试环境:
1.CM和CDH版本为6.2.0
2.Solr版本为7.4
3.集群启用Sentry
4.集群启用Kerberos
5.操作系统版本为RedHat7.2
Solr集成Sentry
在Solr中进行相关的配置,勾选Sentry服务,与Solr集成。用户组和映射类选择Hadoop的用户组,不建议选择本地组
![fd02d4afa2820293dd95eda7ab6df3cc.png](https://i-blog.csdnimg.cn/blog_migrate/06417ce252637894639cd03d11f84216.jpeg)
在Solr中选择安全身份验证为Kerberos,由于集群已经启用了Kerberos,这里直接勾选Kerberos
![1669fdcc631f7f141e1efdd2acfc23bd.png](https://i-blog.csdnimg.cn/blog_migrate/5b91a3428443c39fe7e35f4a7ae8b544.jpeg)
将配置保存后,重启Solr服务,完成Solr与Sentry的集成
![d63ab01a1ad4a43f0203c30d8ef88049.png](https://i-blog.csdnimg.cn/blog_migrate/d8e49b2a36725b79d3967b16c760b133.jpeg)
使用Sentry对Solr进行赋权
本文档主要介绍如何使用Sentry对Solr中的Collection进行权限管理,对于Collection的权限有三种:QUERY、UPDATE、 *,QUERY提供读的访问权限,UPDATE提供写访问权限,通配符*表示所有权限,在授权时,同样可以使用collection=*的方式来授予角色所有collection 的相应权限。在Solr中使用Sentry来赋权,与其他组件一致,是将权限赋予角色,然后将角色授予相应的用户组,让用户组下的用户能够执行相应的权限,下面在Sentry中以命令行的方式对Solr进行赋权。
3.1 对Solr进行赋权的前置准备
1.准备好测试文件,一个10行数据的csv文件
![a5d187323b24eb7334fb3fe2377bc1ba.png](https://i-blog.csdnimg.cn/blog_migrate/d7b35cc7a3c6969e531ef3f8e3c29843.jpeg)
2.准备好创建Collection所需要的schema.xml配置文件,对每个字段进行一一对应的配置
<?xml version="1.0" encoding="UTF-8" ?>s1
![05d93ac27660e05ef98791d5bcb2e8bf.png](https://i-blog.csdnimg.cn/blog_migrate/8576808a205ac5e7380aa5c4ad7d6fc5.jpeg)
3.准备好创建Collection的脚本,在脚本中,标注的那两行操作是将solrconfig.xml.secure这一配置文件替换掉原本的schema.xml,因为在启用Sentry的Solr中,必须要使用solrconfig.xml.secure这个配置文件才能让Sentry的权限管理生效
#!/bin/shZK="cdh178.macro.com"COLLECTION="collection0731"BASE=`pwd`SHARD=3REPLICA=1echo "create solr collection"rm -rf tmp/*solrctl --zk $ZK:2181/solr instancedir --generate tmp/${COLLECTION}_configsmv tmp/${COLLECTION}_configs/conf/solrconfig.xml tmp/${COLLECTION}_configs/conf/solrconfig.xml.bkmv tmp/${COLLECTION}_configs/conf/solrconfig.xml.secure tmp/${COLLECTION}_configs/conf/solrconfig.xmlcp conf/schema.xml tmp/${COLLECTION}_configs/conf/solrctl --zk $ZK:2181/solr instancedir --create $COLLECTION tmp/${COLLECTION}_configssolrctl --zk $ZK:2181/solr collection --create $COLLECTION -s $SHARD -r $REPLICAsolrctl --zk $ZK:2181/solr collection --list
![796b2d84887a5280d9db3f7d5829abf6.png](https://i-blog.csdnimg.cn/blog_migrate/55cc360fae01a60471b9a17d05f2f968.jpeg)
4.创建Collection,这一步操作需要使用solr系统用户登录Kerberos来完成
使用solr系统用户登陆Kerberos
![88a83ad0271ecf4e48ea9c8a7199595d.png](https://i-blog.csdnimg.cn/blog_migrate/8bbb58a822e1edaea4ddc987f209305d.jpeg)
执行脚本创建Collection,collection0731创建成功
![a5d5735785efba00c8f4471d0a5adc50.png](https://i-blog.csdnimg.cn/blog_migrate/b4ba0c9ab72946af99141a6a6f2e35e3.jpeg)
5.将准备的csv数据文件导入到Solr中,这一步同样需要solr系统用户来完成
使用solr用户登陆Kerberos
![0c801f00c76e487a9abecc2934f2d047.png](https://i-blog.csdnimg.cn/blog_migrate/9dc4c44b127c0e9ba7bcf1b0dec30875.jpeg)
导入csv数据文件
curl --negotiate -u : 'http://cdh178.macro.com:8983/solr/collection0731/update/csv?commit=true' -H 'Content-Type: application/csv' --data-binary @/root/test0726/data.csv
![a07d0d6c0698cad347ef1f28b3b8a098.png](https://i-blog.csdnimg.cn/blog_migrate/47fa9e7436af0346707465c1ad8c231e.jpeg)
查看数据导入是否成功
curl --negotiate -u : "http://cdh178.macro.com:8983/solr/collection0731/query?q=*%3A*&wt=json&indent=true"
![69c83ab7e40396b502194c6884cfbae4.png](https://i-blog.csdnimg.cn/blog_migrate/d3ef7505ad76199a7aa79ce54c5db7e8.jpeg)
至此,Collection创建成功,csv数据文件也导入成功,下面用Sentry对Solr进行赋权
3.2 使用Sentry对Solr进行赋权
先创建一个admin角色,并赋予所有权限,然后将admin角色授予solr用户组,该操作需要使用solr系统用户登陆Kerberos来完成
![b2e29202ad6e3b83228b339642839477.png](https://i-blog.csdnimg.cn/blog_migrate/048a7e64c46cc6e8e000ae484e4e8443.jpeg)
创建角色admin并赋权然后给到solr用户组
solrctl sentry --create-role adminsolrctl sentry --add-role-group admin solrsolrctl sentry --grant-privilege admin 'collection=*->action=*'solrctl sentry --grant-privilege admin 'config=*->action=*'
![25825a057aa74a61e219c7d41f451778.png](https://i-blog.csdnimg.cn/blog_migrate/c7b45632aaa61d0e0bd1e7584806d592.jpeg)
查看角色admin的权限
solrctl sentry --list-privileges admin
![88907fbc9ee3b99da1ea3fee537cb32e.png](https://i-blog.csdnimg.cn/blog_migrate/9eae460cdfc1419ddb9df172f6dfe8cc.jpeg)
下面对test用户进行权限测试
1.使用test用户登陆Kerberos,此时未使用Sentry对test用户组进行授权
![f1b3d4f6d8c490827f612a6c4af5c873.png](https://i-blog.csdnimg.cn/blog_migrate/a8e2c0a29d4877a5f33d9df69546cece.jpeg)
2.使用未授予任何权限的test用户来查看之前创建的Collection
curl --negotiate -u : "http://cdh178.macro.com:8983/solr/collection0731/query?q=*%3A*&wt=json&indent=true"
![35356598fa0d2ace335a9c4109b673ba.png](https://i-blog.csdnimg.cn/blog_migrate/50288bf1541278e9861d917bac31aae4.jpeg)
由上图可以看出,test用户并没有查看Collection的权限
3.使用未授予任何权限的test用户来对之前创建的Collection进行更新操作
curl --negotiate -u : 'http://cdh178.macro.com:8983/solr/collection0731/update' > -H 'Content-Type: application/json' > -d '[{"s1":"11