Hadoop系统框架安全机制

Hadoop是开源组织Apache开发的一个开源分布式系统,基于谷歌发表的云计算系统理论实现。它以一种可靠、高效、可伸缩的方式,在普通计算机群上实现海量数据处理。随着越来越多的企业在Hadoop部署应用、存储私密数据,Hadoop的安全问题也开始为人们所重视。Hadoop安全框架存在不小挑战,一方面,由于Hadoop自身安全机制依赖Kerberos、非对称加密的Token认证机制、传输加密机制、基于Linux/Unix系统自带的访问控制机制,在认证、访问、授权等机制存在不足;另一方面,Hadoop一般不是独立运行,而是配合使用生态系统中的其他组件技术,这些技术在安全性上缺乏统一的安全措施。

1 Hadoop体系架构介绍:

1.1 Hadoop发展历史

Hadoop建立在之前的Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 基础上,并于2005年作为Lucene的子项目Nutch的一部分由 Apache基金会正式引入,在随后成为Apache旗下一个单独的开发项目。Hadoop最初由HDFS,MapReuce,Hbase三大核心组件组成,后来发展成为包含HDFS、MapReduce、Hbase、Hive和ZooKeeper等60多个组件的生态系统。在Hadoop的工作中,Map负责分解任务,Reduce负责结果汇总,HDFS负责数据的管理。在互联网领域,Hadoop发展状况良好,脸书的数据挖掘和日志统计、推特的数据存储、百度的日志分析和网页数据库的数据挖掘等领域都使用了Hadoop云计算平台。

1.2 HDFS框架介绍

HDFS 是Hadoop平台的分布式文件管理系统[3],是Hadoop最重要的组件之一。它采用 Master/Slaver 架构对文件系统进行管理。一个 HDFS 集群一般由一个NameNode节点和一定数量的DataNodes 节点组成。下面是各类节点在集群中的主要作用:

(1)NameNode节点。NameNode包含HDFS 文件系统的文件目录树及文件索引目录、文件 Block 列表等进行相应的维护,并将这些信息持久化到本地磁盘的镜像文件和编辑日志中中。NameNode 负责对 HDFS 文件系统的命名空间、集群配置信息和文件 Block 块的创建、删除、复制等操作进行管理,并协调接收客户端对 HDFS 文件系统的访问请求,执行相应的文件操作,例如对文件的打开、关闭、重命名等。NameNode 将 HDFS 中的超大文件划分为多个 Block 块,存储在不同的 DataNode。

(2)DataNode 是具体任务的执行节点,存在于客户端,承担具体执行任务相关的数据及操作。DataNode 接受 Nmaenode 的统一调度,对文件的 Block 块进行创建、删除、和复制等操作,同时 DataNode 还负责接收处理客户端对文件的读/写请求。

(3)DataNode 与 NameNode 间的交互:NameNode 在每次启动系统时都会动态重建文件系统的元数据信息,这时它会以心跳轮询集群中的 DataNode 节点,DataNode 以心跳响应 NameNode,定时向NameNode 发送它所存储的文件块信息。

1.3 Hadoop的计算框架

MapReduce是Hadoop的核心计算组件[4],被设计用于并行计算海量数据。MapReduce 框架的核心步骤主要分两部分:Map 和 Reduce。当用户向 MapReduce 框架提交一个计算作业时,它会首先把计算作业拆分成若干个 Map 任务,然后分配到不同的节点上去执行,每一个 Map 任务处理输入数据中的一部分,当 Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为 Reduce 任务的输入数据。Reduce 任务的主要目标就是把前面若干个 Map 的输出汇总到一起并输出。

本文主要讲解最新的Hadoop2.x(YARN)版本(目前最新的稳定版本为Hadoop2.7)。在YARN中,原先负责资源管理和作业控制功能的JobTracker被遗弃,功能分别由组件 ResourceManager 和 ApplicationMaster 实现。其中,ResourceManager 负责所有应用程序的资源分配,而 ApplicationMaster 仅负责管理一个应用程序。YARN事实上转变成为一个弹性计算平台,它不仅支持 MapReduce,而且支持在线处理的 Storm ,以及近几年来发展势头迅速的Spark等计算框架。

2 Hadoop安全机制

一般而言,系统安全机制由认证(authentication)和授权(authorization)两大部分构成。认证就是简单地对一个实体的身份进行判断;而授权则是向实体授予对数据资源和信息访问权限的决策过程。本文也着重从这两方面展开叙述。

2.1 Hadoop早期安全机制

Hadoop 的早期用例都是围绕着如何管理大量的公共网络数据,没有考虑保密性。早期版本假定HDFS 和 MapReduce 集群运行在安全的内部环境中,由一组相互合作、互相信任的用户所使用,因而其访问控制措施的目标是防止偶然的数据丢失,而并非阻止非授权的数据访问,因此未对数据传输过程中的通信安全作出合理有效的防范措施。尽管在早期版本中实现了审计和授权控制(HDFS文件许可),然而这种访问控制很容易避开,因为任何用户能轻易模拟成其他任何用户,占有其他用户的资源甚至杀死其他用户的任务。

随着Hadoop在大数据分析和处理上应用的日益广泛,Hadoop开始开发健全的安全措施,并在随后选择Kerberos作为Hadoop的认证机制,并在Hadoop 0.20版本后采用新的安全措施:

(1)在Hadoop RPC(Hadoop 远程过程调用协议)中添加了权限认证机制。用Kerberos RPC (SASL/GSSAPI)来实现Kerberos及RPC连接上的用户、进程及Hadoop服务的相互认证。

为HTTP Web控制台提供“即插即用”的认证。网络应用和网络控制台的实现者可以为HTTP连接实现自己的认证机制,包括(但不限于)HTTP SPNEGO认证。当用户调用RPC时,用户的登录名会通过RPC头部传递给RPC,之后RPC使用简单验证安全层(Simple Authentication and Security Layer,SASL)确定一个权限协议(支持Kerberos和DIGEST-MD5两种),完成RPC授权。

(2)强制执行HDFS的文件许可。可以通过NameNode根据文件许可(用户及组的访问控制列表(ACLs))强制执行对HDFS中文件的访问控制,用于后续认证检查的委托令牌。为了降低性能开销和Kerberos KDC上的负载,可以在各种客户端和服务经过初始的用户认证后使用委托令牌。委托令牌用于跟NameNode之间的通讯,在无需Kerberos服务器参与的情况下完成后续的认证后访问。委托令牌的安全机制也一直延续到后续版本。

(3)用于数据访问控制的块访问令牌。当需要访问数据块时,NameNode会根据HDFS的文件许可做出访问控制决策,并发出一个块访问令牌,可以把这个令牌交给DataNode用于块访问请求。因为DataNode没有文件或访问许可的概念,所以必须在HDFS许可和数据块的访问之间建立对接。

(4)用作业令牌强制任务授权。作业令牌确保任务只能做交给他们去做的作业。也可以把任务配置成当用户提交作业时才运行,简化访问控制检查。

进入Hadoop2.x版本后,Hadoop安全机制显著提高。

2.2 Hadoop 2(YARN)的安全机制

2.2.1 Hadoop 2(YARN)的认证机制

在Hadoop中,客户端与NameNode和客户端与ResourceManager之间初次通信均采用了Kerberos进行身份认证,之后便换用委托令牌认证以较小开销,而DataNode与NameNode和NodeManager与ResourceManager之间的认证始终采用Kerberos机制。

接下来分别分析Hadoop中Kerberos和委托令牌的工作原理。

(1)Kerberos认证协议。在一个分布式的Client/Server 体系结构中,Kerberos采用一个或多个Kerberos 服务器提供鉴别服务。首先将需要认证的机器手动将添加Kerberos数据库,并在密钥分发中心和各个节点分别产生密钥表。随后客户端可以和服务器认证,也可以各个节点之间相互认证。当客户端想请求应用服务器上的资源时,首先由客户端向密钥分发中心请求一张身份证明,然后将身份证明交给应用服务器进行验证,在通过服务器的验证后,服务器就会为客户端分配所请求的资源,如图1所示。当节点在Namenode注册时,它必须提供自己的认证密钥并与服务器进行认证,防止存在外部节点冒充内部节点的情况。

Kerberos也有几大缺点:采用对称加密机制,加密和解密使用相同的密钥,安全性有所降低;Kerberos中身份认证服务和授权服务采用集中式管理,系统的性能和安全性也过分依赖于搭载这两个服务的服务器的性能和安全。

(2)委托令牌认证协议。

利用Kerberos获得最初认证后,客户端获得一个委托令牌,令牌赋予节点之间的某些权限。获得令牌后,客户端视情况将它传递给下一个在Namenod上的作业。任何获得令牌的用户可以模仿NameNode上的用户。Hadoop中的令牌主要由下表列出的几个字段组成[5]:

TokenID = {ownerID, renewerID, issueDate, maxDate, sequenceNumber}

TokenAuthenticator = HMAC-SHA1(masterKey, TokenID)

Delegation Token = {TokenID, TokenAuthenticator}

其中关键参数如下:

最大时间(maxData)。每个令牌与一个失效时间关联,若当前时间超过失效时间,则令牌会从内存中清楚,不能再使用。

序列号(sequenceNumber)。每个令牌的产生,都会使序列号增加。

主密钥(masterKey)。主密钥由NameNode随机选择并只有NameNode知道,随后用该密钥来生成委托令牌。

默认情况下,委托令牌有效期是1天。作业追踪器是重建者,跟踪作业的运行情况以更新或取消令牌。由于密钥与令牌之间有一一对应关系,一个密钥产生一个令牌,因此过去7天内的密钥将会被保存,以便回收已经产生的令牌。

令牌赋予了拥有节点权限并保证安全,节点根据令牌种类不同而拥有不同的权限。如持有ResourceManager令牌的应用程序及其发起的任务可以安全地与ResourceManager交互。Application 令牌保证ApplicationMaster与ResourceManager之间的通信安全。

委托令牌也存在缺点:认证用户可以与未认证用户共享委托令牌,这可能造成令牌滥用。

2.2.2 Hadoop 2(YARN)的授权机制

在正式接触YARN授权机制之前,先介绍HDFS的文件访问控制机制。HDFS的文件访问控制机制与当前Unix的一致,即将权限授予对象分为用户、同组用户和其他用户,且可单独为每类对象设置一个文件的读、写和可执行权限。此外,用户和用户组的关系是插拔式的,默认情况下共用Unix/Linux下的用户与用户组对应关系,这与YARN的授权设计思路是一致的。

YARN的授权机制是通过访问控制列表(ACL)实现的。访问控制列表授权了哪些可以访问,哪些无法访问。按照授权实体,可分为作业队列访问控制列表、应用程序访问控制列表和服务访问��制列表。

(1) 作业队列访问控制列表

为了方便管理集群中的用户,YARN将用户/用户组分成若干队列,并可指定每个用户/用户组所属的队列。在每个队列中,用户可以进行作业提交、删除等。通常而言,每个队列包含两种权限:提交应用程序权限和管理应用程序权限(比如杀死任意应用程序),这些可以通过配置文件设置。

(2) 应用程序访问控制列表

应用程序访问控制机制的设置方法是在客户端设设置对应的用户列表,这些信息传递到ResourceManager端后,由它维护和使用。为了用户使用方便,应用程序可对外提供一些特殊的可直接设置的参数。以MapReduce作业为例,用户可以为每个作业单独设置查看和修改权限。默认情况下,作业拥有者和超级用户(可配置)拥有以上两种权限且不可以修改。

(3) 服务访问控制列表

服务访问控制是Hadoop提供的最原始的授权机制,它用于确保只有那些经过授权的客户端才能访问对应的服务。比如可设置访问控制列表以指定哪些用户可以向集群中提交应用程序。服务访问控制是通过控制各个服务之间的通信协议实现的,它通常发生在其他访问控制机制之前,比如文件权限检查、队列权限检查等。

该授权机制的缺陷是,由于需要维护大量的访问控制列表,授权也给系统带来了不小的开销。

2.2.3 Hadoop 2(YARN)的其他安全机制

(1)加密机制

对于静态数据,Hadoop提供两种方式进行保护:一是文件先进行加密,再存储在Hadoop节点中;二是一旦数据加载到Hadoop系统中,立即申请对数据块的加密。对于动态数据,传输进或传输出的数据,Hadoop可以提供认证与安全层(SASL)认证进行加密。其中核心加密技术常用MD5-DIGEST,在此基础上搭载加密的安全协议有如下三种:

a. SASL安全协议加密

SASL提供了MD5-DIGEST等可选的不同种类的保护服务,具有提供认证,保护消息数据完整性、机密性等功能。

b. HDFS文件传输加密

HDFS现存的数据服务协议封装了简单的认证与安全握手协议。认证后,NameNode产生数据加密密钥并将数据信息(如数据块位置、数据块标志、访问令牌等)发送到客户端,成为MD5-DIGEST的凭证。

c. 安全套接层(SSL)

首先需要配置SSL来加密HTTP协议。为了避免恶意用户访问Reduce后的输出结果,Reduce任务计算请求的HMAC-SHA1,并通过作业令牌加密当前时间戳。任务追踪器将利用该HMAC-SHA1与请求中发送的HMAC-SHA1。如果计算出的HMAC-SHA1是URL中的一个,任务追踪器将会相应请求。

(2)审查日志(Audit Log)

Hadoop部署了一个日志审查监控系统,管理和报告系统变化情况。

措施:

(3)资源控制

YARN中可以控制最低限度的网络消耗,最低限度的资源、线程、进程的消耗,来保障系统的稳定和安全性。

2.3 Hadoop 2(YARN)面临的安全威胁

除了上述几大安全部分所具备的缺陷,作为一个开源云计算平台,Hadoop面临的威胁有:

(1)集中控制模式不够健壮。在HDFS中,NameNode中保存了所有元数据信息。一旦NameNode出现故障或者遭受恶意攻击,会使得整个系统不能运行。虽然Hadoop中存在一个SecondNameNode,但它只是保存了 NameNode中某一时间点的信息和之后的操作日志,在NameNode发生故障时不能立即对NameNode中的数据进行迅速恢复,不能保证运行的任务不被中断。

(2)基于ACL的访问控制机制过于简单。Hadoop中采用简单的访问控制机制,对访问权限的设定与Linux—样,存在可读、可写、可执行三个权限,但此简单的访问控制机制显然不能对数据进行很好的保护。

(3)过于依赖Kerberos。在整个Hadoop集群中,只存在一个Kerberos服务器,这个服务器负责集群中所有节点的访问控制。当Hadoop中节点的数量变大时,Kerberos负担会加重。若在某一时刻很多节点向服务器请求访问Token,可能会超出服务器的处理能力。此外,这也是Hadoop中心控制问题的一个表现,若Kerberos服务器出现故障,则整个集群都无法运行。

(4)无法应对恶意的网络攻击。Hadoop在设计时没有对可能遭受的网络安全问题进行考虑,Hadoop中没有对应的网络安全防护措施,很容易受到诸如Ddos的攻击,因此Hadoop对网络安全的防护只能借助第三方的工具。

(5)大数据用户只能寻求第三方工具维护安全

因为比较缺乏安全维护,目前Hadoop上诞生了一定数量的企业级安全解决方案,比如Cloudera Sentry、IBM InforSphere Optim Data Masking、DataStax企业版、DataGuise for Hadoop、英特尔的安全办Hadoop、Protegrity大数据保护器等。这些企业级安全解决方案一定程度上改善了Hadoop的安全状况。此外,Apache Ranger,Apache Rhino, Apache Knox, Gateway等Apache 支持的安全项目也使Hadoop运行的安全环境得到极大改善。

reference:

陈玺, 马修军, 吕欣. Hadoop生态体系安全框架综述[J]. 信息安全研究, 2016, 2(8):684-698.

缪璐瑶. Hadoop安全机制研究[D]. 南京邮电大学, 2015.

下面关于Hadoop的文章您也可能喜欢,不妨看看:

相关推荐