详解 Apache Sentry->Ranger 平滑升级方案
本文分享自华为云社区《【平滑上云】Apache Sentry->Ranger平滑升级方案》,作者: 啊喔 YeYe 。
背景介绍
CDH 是 Apache Hadoop 和相关项目的最完整、最受测试和最流行的发行版,常常是许多客户建设 IDC 大数据平台中的首选。早期 CDH 版本只提供 sentry 的权限管理方案,后期新版本提供 ranger 作为替换方案,而 CDH 只有商业版本提供 sentry 升级 ranger 的服务,开源社区版并未提供这样的能力。本文主要探讨如何平滑解决 sentry 到 ranger 升级过程中的权限迁移问题。
Sentry 权限介绍
Sentry 是典型的 RABC 权限管理系统,通过用户-用户组-角色关联,最终通过 role 来进行赋权,一般只用于表级授权,存在三种权限类型:select/insert/all(*)。sentry 关键表分析
sentry_role: 角色列表
sentry_group;用户组列表
sentry_role_group_map;角色、用户映射关系表
sentry_db_privilege: 表权限信息表
sentry_role_db_privilege_map: 权限、角色映射关系表
举例
表 bi_plus.data_xy_b_error_event 赋予了 XX 用户 select 权限,数据模型如下:
Sentry->Ranger 方案分解
Ranger 基于策略 policy 的 PBAC 赋权策略,面向资源授权。转换 sentry 策略我们先需要解决用户、用户组、角色同步问题。
整体迁移策略
用户同步方案
Sentry 不存在用户,一般来自于外部 OpenLdap。Ranger 本身支持外部 LDAP 同步,在华为云MRS 中通过配置 usersync 实例与 LDPA 对接即可实现
用户组同步方案
Sentry 用户组如果来源于外部 Ldap,参考用户同步方案同步用户组即可。如果没有外部 LDAP,通过读取表 sentry_group 获取用户组插入 Ranger 中即可实现。
角色同步方案
角色同步稍比用户、用户组同步复杂需要自行开发工具支持。角色同步时要关联用户、用户组,因此需要先完成用户、用户组同步后再进行角色同步。
策略同步
分析 sentry 中 hive 表权限,对应每张表生成对应一条 ranger 策略,例如:库表:default.student 生成策略名:default_student。
根据表权限类型,分解为:select、all(*)、insert 对相关角色 &用户 &用户组进行分组,生成为 ranger 中策略的 Condition 内容
样例
表 bi_plus.data_xy_b_error_event 在 sentry 中实际只有对部分角色用户进行了 select 授权
对应生成的 ranger 策略为: bi_plus_data_xy_b_error_event
FAQ
Sentry 本身不存储用户信息,实际多个客户案例来看一般一个用户对应一个用户组且名称相同,我们基于这个策略进行同步。
Ranger 用户组、用户不区分大小写而 sentry 中如果存在大小写差异的用户组会导致同步失败,这种情况建议改造或者下线其中不规范的用户组命名。
使用华为云大数据产品,提供端到端迁移方案与技术支持。
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/3773ddacfb7ab0e77c40e49b3】。文章转载请联系作者。
评论