Impala配置Ranger服务进行权限控制

2022-05-20 08:28:49 浏览数 (1)

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脚本自动生成的。

0 人点赞