Impala目前在新版本3.4中提供了Sentry和Ranger的2种权限管控,我们这里分别介绍一下最新的使用,这里跟2.12.0的版本有所不同。
Sentry
在impala-2.12.0版本中,我们可以通过如下配置来指定sentry文件:
代码语言:javascript复制-server_name=hive-cluster1
-authorization_policy_file=/user/impala/policy.cfg
-authorization_policy_provider_class=org.apache.sentry.provider.file.LocalGroupResourceAuthorizationProvider
这样,即使没有Sentry服务,我们也可以进行权限的管理操作。但是在3.4版本中authorization_policy_file配置项被移除了,所以我们没办法直接配置hdfs上的Sentry文件作为权限管理了。因此需要通过配置sentry-site.xml来进行权限控制,关于最新版本的Sentry配置可以参考:Impala权限管理 。由于我们内部都是使用的Ranger服务,关于Sentry服务的配置,就不多做介绍。下面主要来讲一下Ranger服务的配置。
Ranger
社区相关JIRA:IMPALA-7916
Impala在新版本中提供了对Ranger的支持,我们可以通过直接配置Ranger的信息,来进行权限的管控。目前,我们可以直接使用测试的集群进行ranger的配置,具体信息参考:如何配置带Ranger的Impala集群 Ranger服务起来之后,我们就可以通过hostname:6080来进行访问,登陆用户和密码默认是admin/admin,具体的Ranger配置位于:$RANGER_HOME/ews/webapp/WEB-INF/classes/conf/ranger-admin-site.xml。相关页面如下:
我看可以看到,有一个名为test_impala的service,这个service里面配置了具体的各个用户以及对应的policy,这里主要就是admin用户。这里的test_impala对应的就是ranger-hive-security.xml中的如下配置项:
代码语言:javascript复制<property>
<name>ranger.plugin.hive.service.name</name>
<value>test_impala</value>
<description>
Name of the Ranger service containing policies.
</description>
</property>
配置完成之后,我们就可以使用文档里面的命令重启impala测试集群,然后进行测试:
代码语言:javascript复制./bin/start-impala-cluster.py
--impalad_args="--server-name=server1 --ranger_service_type=hive --ranger_app_id=impala --authorization_provider=ranger"
--catalogd_args="--server-name=server1 --ranger_service_type=hive --ranger_app_id=impala --authorization_provider=ranger"
关于上面各个参数的释义如下:
- server_name,该参数配置的值例如server1,从日志来看,会去加载ranger-hive-server1-audit.xml、ranger-hive-server1-security.xml和ranger-hive-server1-policymgr-ssl.xml这几个文件,其他作用暂时还没发现,在测试过程中,发现配置为其他值也可以正常加载权限;
- ranger_service_type,表示ranger服务的类型,目前仅支持hive,impala会根据这个去加载ranger-hive-audit.xml、ranger-hive-security.xml和ranger-hive-policymgr-ssl.xml这几个文件;
- ranger_app_id,该参数测试发现也并没有什么特别的作用,默认配置为impala,作为标识;
- authorization_provider,不配置表示禁用权限控制功能,目前支持配置为ranger;
我们使用$IMPALA_HOME/shell/build/impala-shell-4.0.0-SNAPSHOT/impala-shell -u hive命令连接到测试进行,然后创建database,会提示没有权限,如下所示:
代码语言:javascript复制[localhost:21000] default> create database ranger_test;
Query: create database ranger_test
ERROR: AuthorizationException: User 'hive' does not have privileges to execute 'CREATE' on: ranger_test
这是由于测试的配置里面默认没有hive用户,因此我们需要在ranger里面新建一个hive的User,然后将hive加入all-database这个policy,如下所示:
配置完成之后,我们再执行上述的SQL发现可以执行成功:
代码语言:javascript复制[localhost:21000] default> create database ranger_test;
Query: create database ranger_test
----------------------------
| summary |
----------------------------
| Database has been created. |
----------------------------
Fetched 1 row(s) in 0.38s
需要注意的是,配置ranger的文件ranger-hive-security.xml和ranger-hive-audit.xml位于$IMPALA_HOME/fe/src/test/resources/,依赖组件的这些xml配置都是通过执行bin/create-test-configuration.sh脚本自动生成的。