本文描述CDH6.3.2集群安装Sentry及配置。
参考:https://docs.cloudera.com/documentation/enterprise/6/latest/topics/sentry.html
操作系统:Centos7.8。
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。
配置参考:https://docs.cloudera.com/documentation/enterprise/6/latest/topics/sg_sentry_service_config.html#concept_z5b_42s_p4
修改Hive配置如下:
配置 | 值 |
---|---|
HiveServer2 启用模拟 | false |
修改YARN配置如下:
配置 | 值 |
---|---|
允许的系统用户 | 默认已有hive 用户,如果没有,增加进去。 |
修改Hive配置如下:
配置 | 值 |
---|---|
Hive Metastore 访问控制和代理用户组覆盖 | 增加 hive,hue,sentry 用户组。 |
CDH6.3.2中没有相关选项,跳过。
修改HDFS配置如下:
配置 | 值 | 备注 |
---|---|---|
检查 HDFS 权限 | true | |
启用 Sentry 同步 | true | |
Sentry 同步路径前缀 | /user/hive/warehouse | 保证hive warehouse路径在此配置中 |
HDFS 访问控制列表 | true |
修改Hive配置如下:
配置 | 值 | 备注 |
---|---|---|
Sentry 服务 | Sentry | |
启用数据库中的存储通知 | true |
重启服务。
在所有包含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/[email protected]
创建管理员角色:
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组设置为超级管理员组
GRANT ROLE hive_admin TO GROUP hive;
在生产环境中,最好创建一个自定义组用作超级管理员组,这样可以集成多个服务的超级管理员角色,方便管理。
假设定义超级管理员组为authorizers
。按照如下步骤进行操作。
1、在操作系统级别创建用户组。如果使用FreeIPA,在FreeIPA中创建即可,否则需要保证每个节点上都有这个用户组。
2、Sentry的sentry.service.admin.group
配置中增加authorizers
。
3、授权hive管理员角色给authorizers
组。
GRANT ROLE hive_admin TO GROUP authorizers;
使用的时候,只需要将作为管理员的用户添加到authorizers
组即可。
在Hue中使用时,需要在Hue中添加authorizers
组,并把管理员用户分配到该组,确保Hue中的用户和组映射与操作系统一致。
其他参考 通过HiveServer2使用UDF。
修改impala配置如下:
配置 | 值 | 备注 |
---|---|---|
Sentry 服务 | 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 服务 | Sentry |
重启服务。
修改sentry配置如下:
配置 | 值 | 备注 |
---|---|---|
管理员组 | 保证 hive,spark,hue 存在 |
hbase授权需要单独配置。
修改配置如下:
配置 | 值 | 备注 |
---|---|---|
HBase 安全授权 | true |
找到 hbase-site.xml 的 HBase 服务高级配置代码段(安全阀),添加如下配置:
hbase.security.exec.permission.checks
true
重启服务。