本文描述CDH6.3.2集群安装Sentry及配置。
参考:https://docs.cloudera.com/documentation/enterprise/6/latest/topics/sentry.html
操作系统:Centos7.8。
安装Sentry
Sentry是一个集中授权管理服务,可以对多服务统一授权管理,其下的角色名是唯一的。
用Hive和Solr两个服务举例,如果在Hive中创建了admin角色,那么这个角色在Solr中也会出现,但是角色的权限还是由各自的服务定义的,只是角色名是同一个。
在生产环境中,为了避免服务角色混乱,可以在角色名前加上服务前缀用一区分,例如Hive服务的管理员角色名为 hive_admin ,Solr服务的管理员角色名为 solr_admin 。
安装要求
集群实现Kerberso认证。当然不启用Kerberos也能用,不过不建议。
安装
使用mysql作为Sentry数据库,确保已执行以下命令:
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'sentry';
开始安装:
1、使用管理员用户进入Cloudera Manager Web UI,按照进入目标集群,依次点击 操作 -> 添加服务。
2、选择 Sentry,点击 继续。
3、按照向导添加服务即可。其中数据库设置,按照上面创建的sentry数据库和用户信息填写即可。
配置
用管理员用户进入Cloudera Manager Web UI。
启用Sentry服务之前
关闭Hive Server2模拟
修改Hive配置如下:
配置 | 值 |
---|---|
HiveServer2 启用模拟 | false |
启用Hive用户提交YARN任务
修改YARN配置如下:
配置 | 值 |
---|---|
允许的系统用户 | 默认已有hive 用户,如果没有,增加进去。 |
拦截外部应用访问Hive元数据
修改Hive配置如下:
配置 | 值 |
---|---|
Hive Metastore 访问控制和代理用户组覆盖 | 增加 hive,hue,sentry 用户组。 |
关闭Sentry策略文件选项
CDH6.3.2中没有相关选项,跳过。
Hive启用Sentry
同步HDFS ACL和Sentry权限
修改HDFS配置如下:
配置 | 值 | 备注 |
---|---|---|
检查 HDFS 权限 | true | |
启用 Sentry 同步 | true | |
Sentry 同步路径前缀 | /user/hive/warehouse | 保证hive warehouse路径在此配置中 |
HDFS 访问控制列表 | true |
修改Hive配置如下:
配置 | 值 | 备注 |
---|---|---|
Sentry 服务 | Sentry | |
启用数据库中的存储通知 | true |
重启服务。
关闭Hive CLI
在所有包含Hive Metastore或HiveServer2服务的节点执行以下命令:
setfacl -m u:hive:rx /opt/cloudera/parcels/CDH/bin/hive
chmod 754 /opt/cloudera/parcels/CDH/bin/hive
初始化管理员
以启用了Kerberos为前提
在HiveServer2服务节点进行操作,并假设其主机名为:master1.bigdata.com
创建管理员角色
切换到kerberos的hive主体,登入beeline
。
连接Hive:
!connect jdbc:hive2://master1.bigdata.com:10000/default;principal=hive/master1.bigdata.com@BIGDATA.COM
创建管理员角色:
CREATE ROLE hive_admin;
GRANT ALL ON SERVER server1 TO ROLE hive_admin WITH GRANT OPTION;
其中有个server1
,需要注意,这个值参考自hive配置hive.sentry.server。
这是一个别名,Sentry用其关联Hive服务。
参考:https://docs.cloudera.com/documentation/enterprise/6/latest/topics/cm_sg_sentry_service.html#privilege_model__section_y2b_5wv_ls
Hive组
将hive组设置为超级管理员组
GRANT ROLE hive_admin TO GROUP hive;
自定义组
在生产环境中,最好创建一个自定义组用作超级管理员组,这样可以集成多个服务的超级管理员角色,方便管理。
假设定义超级管理员组为hiveadmins
。按照如下步骤进行操作。
1、在操作系统级别创建用户组。如果使用FreeIPA,在FreeIPA中创建即可,否则需要保证每个节点上都有这个用户组。
2、Sentry的sentry.service.admin.group
配置中增加hiveadmins
,这样在使用该用户组的用户登陆hue后,在sentry中可以管理hive角色,相当于管理员权限。
3、授权hive管理员角色给hiveadmins
组。
GRANT ROLE hive_admin TO GROUP hiveadmins;
使用的时候,只需要将作为管理员的用户添加到hiveadmins
组即可。
在Hue中使用时,需要在Hue中添加hiveadmins
组,并把管理员用户分配到该组,确保Hue中的用户和组映射与操作系统一致。
其他参考 通过HiveServer2使用UDF。
Impala启用Sentry
修改impala配置如下:
配置 | 值 | 备注 |
---|---|---|
Sentry 服务 | Sentry |
重启服务。
Solr启用Sentry
修改solr配置如下:
配置 | 值 | 备注 |
---|---|---|
Sentry 服务 | Sentry |
重启服务。
初始化管理员
以启用了Kerberos为前提
在Solr集群的其中一个节点进行操作。切换到kerberos的solr主体。
创建管理员角色
solrctl sentry --create-role solr_admin
solrctl sentry --grant-privilege solr_admin 'collection=*->action=*'
solrctl sentry --grant-privilege solr_admin 'config=*->action=*'
授权到用户组
首先授权管理员角色到solr
组:
solrctl sentry --add-role-group solr_admin solr
为了集群统一管理方便,我在上文的Hive授权部分使用了超级管理员组authorizers
,这里也将solr服务的管理员角色授权给超级管理员组:
solrctl sentry --add-role-group solr_admin authorizers
这样,在Hue中,就可以使用authorizers
组下的超级管理员用户进行多服务的授权管理。
其他参考 Solr Collection启用Sentry。
Hue启用Sentry
修改hue配置如下:
配置 | 值 | 备注 |
---|---|---|
Sentry 服务 | Sentry |
重启服务。
配置Sentry Admin Groups
修改sentry配置如下:
配置 | 值 | 备注 |
---|---|---|
管理员组 | 保证 hive,spark,hue 存在 |
HBase
hbase授权需要单独配置。
修改配置如下:
配置 | 值 | 备注 |
---|---|---|
HBase 安全授权 | true |
找到 hbase-site.xml 的 HBase 服务高级配置代码段(安全阀),添加如下配置:
<property>
<name>hbase.security.exec.permission.checks</name>
<value>true</value>
</property>
重启服务。