大数据培训新三板挂牌机构 股票代码:837906 | EN CN
异常解决方案—NameNode 宕机读写测试
异常解决方案—NameNode 宕机切换实验
异常解决方案—Data Node 配置
异常解决方案—Backup Node配置
异常解决方案—NameNode配置
异常解决方案—6.5.1异常情况分析
安装及配置
5NameNode安装及配置以及6BackupNode安装及配置
6.4.4虚拟机集群架设
6.4.3安装JDK
3.配置操作系统
2.创建虚拟机与安装操作系统
6.4构建实验环境
实验方案说明
故障切换机制
日志池(journal spool)机制
元数据操作情景分——BackupNode更新磁盘上的日志文件
元数据操作情景分——NameNode通过日志输出流......
元数据操作情景分——NameNode将日志写入日志文件
元数据操作情景分——NameNode更新内存镜像
元数据操作情景分——客户端执行命令流程
元数据操作情景分
Hadoop的Backup Node方案——运行机制分析(5)
Hadoop的Backup Node方案——运行机制分析(4)
Hadoop的Backup Node方案——运行机制分析(3)
Hadoop的Backup Node方案——运行机制分析(2)
Hadoop的Backup Node方案——运行机制分析(1)
Hadoop的Backup Node方案——系统架构
Hadoop的Backup Node方案—Backup Node 概述
元数据可靠性机制以及使用说明
Checkpoint 过程情景分析
元数据更新及日志写入情景分析
NameNode启动加载元数据情景分析
Hadoop的元数据备份机制的进行分析
元数据应用场景分析
Format情景分析
磁盘元数据文件
HDFS之代码分析——元数据结构
HDFS之内存元数据结构
什么是HDFS的元数据
Hadoop中DRDB方案和AvatarNode方案
Hadoop中常用各方案的对比
Hadoop的BackupNode方案
Hadoop的CheckpointNode方案
Hadoop的SecondaryNameNode方案
Hadoop的元数据备份方案
影响HDFS可用性的几个因素
什么是高可用性? 详细解析
HDFS系统架构简介
如何安装和配置Hadoop集群
如何在Windows下安装Hadoop
在MacOSX上安装与配置Hadoop
Linux下安装Hadoop的步骤
Hadoop的集群安全策略介绍
Hive的数据管理介绍
HBase的数据管理介绍
HDFS的数据管理介绍
Hadoop计算模型之 MapReduce 简介
Hadoop于分布式开发
Hadoop体系结构介绍
Hadoop的项目结构详解
一文读懂Hadoop

Hadoop的集群安全策略介绍

于2018-01-10由小牛君创建

分享到:


Hadoop的优势在于其能够将廉价的普通PC组织成能够高效稳定处理事务的大型集群,企业正是利用这一特点来构架Hadoop集群、获取海量数据的高效处理能力的。但是,Hadoop集群搭建起来后如何保证它安全稳定地运行呢?旧版本的Hadoop中没有完善的安全策略,导致Hadoop集群面临很多风险,例如,用户可以以任何身份访问HDFS或MapReduce集群,可以在Hadoop集群上运行自己的代码来冒充Hadoop集群的服务,任何未被授权的用户都可以访问DataNode节点的数据块等。经过Hadoop安全小组的努力,在Hadoop1.0.0版本中已经加入最新的安全机制和授权机制(Simple和Kerberos),使Hadoop集群更加安全和稳定。下面从用户权限管理、HDFS安全策略和MapReduce安全策略三个方面简要介绍Hadoop的集群安全策略。有关安全方面的基础知识如Kerberos认证等读者可自行查阅相关资料。

1)用户权限管理

Hadoop上的用户权限管理主要涉及用户分组管理,为更高层的HDFS访问、服务访问、Job提交和配置Job等操作提供认证和控制基础。

Hadoop上的用户和用户组名均由用户自己指定,如果用户没有指定,那么Hadoop会调用Linux“whoami”命令获取当前Linux系统的用户名和用户组名作为当前用户的对应名,并将其保存在Jobuser.namegroup.name两个属性中。这样用户所提交Job的后续认证和授权以及集群服务的访问都将基于此用户和用户组的权限及认证信息进行。例如,在用户提交JobJobTracker时,JobTracker会读取保存在Job路径下的用户信息并进行认证,在认证成功并获取令牌之后,JobTracker会根据用户和用户组的权限信息将Job提交到Job队列(具体细节参见本小节的HDFS安全策略和MapReduce安全策略)。

Hadoop集群的管理员是创建和配置Hadoop集群的用户,它可以配置集群,使用Kerberos机制进行认证和授权。同时管理员可以在集群的服务(集群的服务主要包括NameNodeDataNodeJobTrackerTaskTracker)授权列表中添加或更改某确定用户和用户组,系统管理员同时负责Job队列和队列的访问控制矩阵的创建。

2HDFS安全策略

用户和HDFS服务之间的交互主要有两种情况:用户机和NameNode之间的RPC交互获取待通信的DataNode位置,客户机和DataNode交互传输数据块。

RPC交互可以通过Kerberos或授权令牌来认证。在认证与NameNode的连接时,用户需要使用Kerberos证书来通过初试认证,获取授权令牌。授权令牌可以在后续用户JobNameNode连接的认证中使用,而不必再次访问KerberosKeyServer。授权令牌实际上是用户机与NameNode之间共享的密钥。授权令牌在不安全的网络上传输时,应给予足够的保护,防止被其他用户恶意窃取,因为获取授权令牌的任何人都可以假扮成认证用户与NameNode进行不安全的交互。需要注意的是,每个用户只能通过Kerberos认证获取唯一一个新的授权令牌。用户从NameNode获取授权令牌之后,需要告诉NameNode:谁是指定的令牌更新者。指定的更新者在为用户更新令牌时应通过认证确定自己就是NameNode。更新令牌意味着延长令牌在NameNode上的有效期。为了使MapReduceJob使用一个授权令牌,用户应将JobTracker指定为令牌更新者。这样同一个Job的所有Task都会使用同一个令牌。JobTracker需要保证这一令牌在整个任务的执行过程中都是可用的,在任务结束之后,它可以选择取消令牌。

数据块的传输可以通过块访问令牌来认证,每一个块访问令牌都由NameNode生成,它们都是特定的。块访问令牌代表着数据访问容量,一个块访问令牌保证用户可以访问指定的数据块。块访问令牌由NameNode签发被用在DataNode上,其传输过程就是将NameNode上的认证信息传输到DataNode上。块访问令牌是基于对称加密模式生成的,NameNodeDataNode共享了密钥。对于每个令牌,NameNode基于共享密钥计算一个消息认证码(Message Authentication CodeMAC)。接下来,这个消息认证码就会作为令牌验证器成为令牌的主要组成部分。当一个DataNode接收到一个令牌时,它会使用自己的共享密钥重新计算一个消息认证码,如果这个认证码同令牌中的认证码匹配,那么认证成功。

3MapReduce安全策略

MapReduce安全策略主要涉及Job提交、TaskShuffle三个方面。对于Job提交,用户需要将Job配置、输入文件和输入文件的元数据等写入用户home文件夹下,这个文件夹只能由该用户读、写和执行。接下来用户将home文件夹位置和认证信息发送给JobTracker。在执行过程中,Job可能需要访问多个HDFS节点或其他服务,因此,Job的安全凭证将以<Stringkey,binaryvalue>形式保存在一个Map数据结构中,在物理存储介质上将保存在HDFSJobTracker的系统目录下,并分发给每个TaskTrackerJob的授权令牌将NameNodeURL作为其关键信息。为了防止授权令牌过期,JobTracker会定期更新授权令牌。Job结束之后所有的令牌都会失效。为了获取保存在HDFS上的配置信息,JobTracker需要使用用户的授权令牌访问HDFS,读取必需的配置信息。

任务(Task)的用户信息沿用生成TaskJob的用户信息,因为通过这个方式能保证一个用户的Job不会向TaskTracker或其他用户JobTask发送系统信号。这种方式还保证了本地文件有权限高效地保存私有信息。在用户提交Job后,TaskTracker会接收到JobTracker分发的Job安全凭证,并将其保存在本地仅对该用户可见的Job文件夹下。在与TaskTracker通信的时候,Task会用到这个凭证。

当一个Map任务完成时,它的输出被发送给管理此任务的TaskTracker。每一个Reduce将会与TaskTracker通信以获取自己的那部分输出,此时,就需要MapReduce框架保证其他用户不会获取这些Map的输出。Reduce任务会根据Job凭证计算请求的URL和当前时间戳的消息认证码。这个消息认证码会和请求一起发到TaskTracker,而TaskTracker只会在消息认证码正确并且在封装时间戳的N分钟之内提供服务。在TaskTracker返回数据时,为了防止数据被木马替换,应答消息的头部将会封装根据请求中的消息认证码计算而来的新消息认证码和Job凭证,从而保证Reduce能够验证应答消息是由正确的TaskTracker发送而来。