在高度信息化的商业环境中,数据安全已成为现代企业的重要任务之一。随着企业内部数据的体量不断增加,业务的需求越加复杂化,企业借此引入的大数据组件类别也越来越多,Hive、Trino、Impala、Kafka、Hbase等组件层出不穷。数据作为企业的重要资产,如何做好用户认证和对数据资源权限的管控变得尤为重要。
大数据组件虽然都有各自的用户认证和权限管控方案可以使用,但各个组件之间用户认证实际互不相通。这使得用户和权限信息散落在各个组件内部,没有统一的平台进行管控,使得认证和权限维护工作变得繁杂。为了保护敏感数据,企业亟需一个安全有效的数据安全管控方案。
Ranger和LDAP都是用于管理权限和身份验证的工具,结合使用它们可以为企业提供强大的权限管理能力。下面本文将详细介绍如何结合数栈产品将Ranger和LDAP结合使用制定一个有效的数据安全管控方案,以确保企业数据的安全性和完整性。
概念简介
|01 Ranger
Apache Ranger 是一个Hadoop平台上的全方位数据安全管理框架,它可以为整个Hadoop生态系统提供全面的安全管理。
Ranger提供统一的权限可视化配置平台,管理员可以轻松地定义,实施和监控访问控制规则,确保敏感数据的安全性。
目的:
允许用户使用UI或REST API对所有和安全相关的任务进行集中化的管理
允许用户使用一个管理工具对操作Hadoop体系中的组件和工具的行为进行细粒度的授权
支持Hadoop体系中各个组件的授权认证标准
增强了对不同业务场景需求的授权方法支持,例如基于角色的授权或基于属性的授权
支持对Hadoop组件所有涉及安全的审计行为的集中化管理
|02 Ranger的架构
Ranger 主要是由 Ranger Admin、Ranger UserSync、Ranger Plugin 三个组件构成的,其中 Ranger Admin、Ranger UserSync 都是一个单独的 JVM 进程,而 Ranger Plugin 需要根据不同组件安装在不同节点上。
Ranger Admin:
提供了web ui页面,用户在页面配置好服务,策略,角色,权限以及审计日志等配置信息,并将这些信息存储到指定的外部数据源中。同时也提供了rest api接口供外部直接调用接口进行处理。
Ranger UserSync:
用户信息同步服务,将外部用户体系的用户同步到Ranger中,Ranger默认支持了对接LDAP和unix用户,可以自定义扩展。
Ranger Plugin:
Plugin需要部署到服务节点中,Plugin会实现服务提供的埋点接口进行权限校验。Plugin会定时从Ranger Admin中获取最新的用户,策略,角色策,权限的关联信息缓存内存或本地文件中。当服务需要判断用户是否有权限访问某资源时,就会调用Ranger Plugin的拓展实现。
|03 Ranger的基本使用
Ranger有如下基本概念
Service:
一个数据源对应一个服务,例如hdfs需要对接进Ranger,就需要到对应组件类型创建一个service,配置连接方式和信息。
Policy:
策略,是对service不同资源管控的单位。service可以配置多个policy,policy内部可以配置多个条目,每个条目里配置了成套的用户,角色,用户组以及条目对应权限点的白名单和黑名单。
permission:
权限点,与policy关联,不同大数据组件其拥有不同套的权限点,hdfs是acl权限,hive则会涉及到ddl的权限点。
user:
用户,可从不同源拉取用户到Ranger中。
group:
用户组,可将多个用户关联到一个用户组中。
role:
角色,它可以与用户,用户组以及角色之间进行关联,起到间接关联传递的作用。
如上,是HDFS一个path的policy规则配置关系,可以看到针对/tmp/*下的所有路径,zhangsan和lisi拥有write的权限,wangwu拥有all的权限,jiuwei则仅有read的权限。
Ranger自身的Ranger UserSync组件支持对接LDAP,并从LDAP中拉取用户信息,并推送到Ranger自己的库中。
|04 LDAP
LDAP 全称为 Light Directory Access Protocol 轻量级目录访问协议,LDAP目录以树状的结构来存储数据,可以理解为一个目录数据库。就跟你打开电脑文件夹目录一样,一层一层的,有的是文件夹,有的是具体存储信息的文件。
LDAP提供统一的用户信息管理和认证平台,常见的大数据组件基本都支持对接LDAP用户体系认证,在通过jdbc连接比如hive时,可通过提交LDAP的账号密码来进行认证。
|05 LDAP的一些概念
关键术语:
dc:一条记录所属区域 ,可以多个值,比如dc=dtstack,dc=com。可以类比为域名。
ou :一条记录所属组织 (哪一个分支),相当于组织的概念。
dn:一条记录的详细位置,是组合的概念,一般由dc+别的分支节点,像dc+cn,dc+uid或dc+ou+cn,例如:dn:cn=use1,ou=people,dc=dtstack,dc=com。就像我们需要到某个公司找人一样,需要知道公司名(dtstack),他在哪个组织或者单位(ou)下。
cn/uid:是一个末端叶子节点,也就是"存了具体信息的文件",cn/uid是这个节点的认证名(在uic对接LDAP时,登录会用到的账号名)。
像Hive等大数据组件在对接LDAP时,就会根据Hive的配置文件中配置的LDAP连接信息,当我们通过提交LDAP的账号密码信息时,Hive便通过连接LDAP进行认证。这样所有支持对接LDAP的大数据组件用户就做到了统一。
权限管控方案
|01 Ranger
问题场景
当配置的Hive、Trino等组件对接Ranger后,如何提交LDAP用户信息进行认证?
某用户在数栈的权限体系里有某库的权限,但在Ranger上未单独配置权限,导致用户无法访问该库,这种使用上的不一致,如何统一?
方案简介
数栈基于以上两个问题场景,综合Ranger和数栈的权限体系特点,提供了自己的一套管控方案。
我们知道Ranger上,一个用户A是否有权限访问资源,可以看A是否关联上资源绑定的策略Policy,可以直接在Policy配置用户A,也可以通过中间Role的方式进行间接关联。当A拥有Role时,Role又配置在资源对应的策略Policy时,A自然有权限访问。
而数栈本身的用户权限体系刚好与Ranger的相对应:项目、用户、角色、用户组与Ranger上的policy、user、role、group进行映射。
方案内容
1、将项目关联Ranger策略
当在数栈建立一个项目时,数栈会通过rest api的方式在Ranger上创建一个属于这个项目的Policy,这个策略里配置的资源即为这个项目对应的库。
2、将角色关联Ranger Role
数栈会再基于项目的角色,比如数据开发角色,在Ranger创建一个对应的Role,这个Role会与之前的Policy关联。(左边是项目对应的policy,右边是该项目的role)
3、形成统一的关联链路
当用户加入到这个项目当中时,数栈会在Ranger上,将用户user关联上之前的Role中。这样,数栈这边的用户,角色,项目关联链路,就和Ranger上的user,role和policy保持一致了。
|02 LDAP
这套方案是数栈将自己的用户同步到LDAP上,并在本地维护了一份用户和LDAP的信息。也就是说,数栈使用的LDAP用户信息是数栈自己创建的。
下图就是数栈如何创建数栈账号与ldap账号,以及ranger拉取ldap账号的示意图。
如果客户希望使用自己的LDAP用户信息,可以通过对接LDAP登录的方式登录,并加入租户,此时就会使用客户自己的LDAP信息。
通过结合数栈「基于Ranger和LDAP的数据安全管控方案」,企业可以建立更加高效、安全的数据安全管控系统,以更强的管控力度确保数据的完整性和安全性。
数据安全的建设随着企业支持的业务量和业务种类持续增长,仍有很长的路要走。数栈一直致力于数据的安全和隐私保护,期待大家加入我们,共同促进数据安全的健康发展。