Skip to main content

支持的组件介绍

集成哪些组件

Ranger简介:Ranger是负责Hadoop内的数据权限的,比如哪个用户对哪张表有读,还是有写权限。可以对整个Hadoop生态中如HDFS、Hive、HBase、Kafka、Storm等进行细粒度的数据访问控制。详细介绍

LDAP简介:如果在网上百度LDAP的内容可能会看的云里雾里,可以看这一篇参考:什么是LDAP。简单地说,LDAP = Hadoop体系内的单点登录系统,就是管理「Hadoop内」的「用户」及「认证」的,下面进行解释:

  • 我们先回到MySQL数据库的模式去理解「用户」,比如创建a,b两个MySQL用户,有不同的密码以及表权限,那么使用a账号登录,就有了a账号的权限。我们说MySQL本身是包括了用户管理的能力的。
  • 但是Hadoop不同于MySQL,其本身底层包括多种组件,比如HDFS、YARN、Hive、Spark、Flink、Kafka等,如果每个组件都搞一套自己的用户,比如HDFS有用户a,b以及密码,而你在Hive上也有另外一套b,c用户和密码,Spark也有自己的一套,Flink、Kafka、YARN、Impala、Presto……,这么多组件,对应的用户、密码就把人搞凌乱了。鉴于这种问题,Hadoop体系的绝大多数组件都支持对接LDAP,将其作为自己的「用户管理」方式。这里的用户管理,包括:用户的创建、编辑、删除。
  • LDAP同时包含「认证」的能力,认证=判断用户名、密码对不对。
  • 在对接了LDAP之后,你输入a用户+密码,就可以访问HDFS、Hive、YARN、Impala……。各个组件都认可用户a。这就是说,LDAP给Hadoop带来了「单点登录」的能力。你在LDAP上创建一个用户(含密码),各个组件都自动识别到这个用户了。

各个组件的关系

Ranger+LDAP+计算组件

tip

⚠️注意:数栈当前仅集成了Ranger+LDAP,暂未集成Kerberos,Kerberos将在未来几个小版本中集成。

LDAP提供了用户管理的能力。Ranger提供了权限控制的能力,这2个要结合起来使用。Ranger虽然可以管理权限,但它本身只有「非常弱的用户管理能力」,所以要依赖LDAP做Hadoop层面的用户管理。

非常弱的用户管理能力:是说Ranger本身的确有一套用户管理功能,但它的用户,HDFS、Hive、Spark等各个组件是不认可的,这个用户管理能力,在Hadoop层面是没啥实际用途的,还是要依赖LDAP。

几个底层组件的集成方式如下图所示:

img

①Ranger+LDAP

  • Ranger负责Hadoop内各组件的数据权限控制。
  • LDAP负责Hadoop内各组件的用户认证。
  • Ranger和LDAP之间的连线,表示LDAP向Ranger同步用户信息,所以Ranger可以识别LDAP的用户并控制权限。

②LDAP+HadoopSQL、Trino

  • HadoopSQL,如字面意思理解,就是通过SQL访问Hadoop内的数据,包括通过Hive、SparkThrift、Impala访问Hadoop内的数据。相当于数栈页面上的HiveSQL、SparkSQL、ImpalaSQL。
  • LDAP与二者之间的关系,就是向这2类组件提供用户认证。

③Ranger与HadoopSQL、Trino

  • Ranger为这些组件提供数据权限管控的能力(需要安装对应的插件)。
  • 例如:在不安装插件的情况下,用户连接到Hive,可任意查询任何库表数据。但是在Hive上安装了Ranger的插件(Ranger-Hive插件)之后,用户连接Hive查询数据时,Ranger会先进行一次权限判断,这就是Ranger-Hive插件的作用。
tip

注意:HadoopSQL是不包括通过Phoenix访问HBase、不通过Impala而是直连Kudu。

HDFS与Kerberos

上述架构图中没有包括HDFS,这是存在安全隐患的,比如用户通过java或Python通过HDFS的接口来读取数据,要如何控制呢?

先要说明为什么HDFS没有在这个图中:原因是HDFS虽然支持LDAP去连接,但是其连接时只需指定用户名,无需指定密码。这就相当于:访问HDFS时,输入任何一个用户名就可以查看其中的数据,不需要输入密码。所以HDFS+LDAP依然是存在安全漏洞的。

为了解决这个漏洞,需要引入Kerberos,即用户需要直接访问HDFS时,必需通过Kerberos认证。Kerberos的安全级别相比LDAP要更高。

Kerberos的详细介绍参考:Kerberos介绍1Kerberos介绍2

如下图所示,其区别就是增加了Kerberos组件:

①Kerberos+LDAP:LDAP要向Kerberos同步用户信息,实现用户的统一

②Kerberos+HDFS、Kafka

  • HDFS对LDAP的认证刚已讲过,存在不输入密码的问题。
  • 而开源版的Kafka根本不支持LDAP认证,所以只能使用Kerberos认证。

③Ranger+HDFS、Kafka

  • Ranger可以控制HDFS的目录、文件级别的数据权限;
  • 可以对Kafka控制topic级别的数据权限;

image-20230317163805470

tip

hdfs已集成kerberos

总结

综上所属,Hadoop体系内,我们通过Ranger来实现数据权限的集中控制,包括了绝大多数的Hadoop组件。本文只列出了数栈用到的几种,但Ranger本身可支持更丰富的权限控制,比如HBase等。

在数栈的标准的数据安全方案中:

  • 用户可通过LDAP认证,访问各类jdbc类应用,比如Hive、Spark、Trino等。
  • 若用户需要直连HDFS访问数据(比如通过Python或shell),或访问Kafka,则只能通过Kerberos证书来访问。