Hadoop 2.0 (YARN)中的安全机制概述

写在前面

安全管理是Hadoop中最复杂的、最难懂和最晦涩的模块,涉及到Hadoop的各个分支和每个分支的各个服务与组件,为了方便大家详细了解Hadoop内部的安全机制实现和各个验证流程,Apache正在编写一个文档,具体可参考HADOOP-9621,注意,附件中的几个pdf不是最新的,想要查看最新文档,可查看google doc上这个链接:Hadoop YARN Security Model,你如果有兴趣,也可以参与编写和评论使用这个链接),本文绝大部分内容来自这个文档。该文档中有大量流程图和详细说明,有兴趣的读者可以仔细读一下。

一般而言,系统安全机制由认证(authentication)和授权(authorization)两大部分构成。认证就是简单地对一个实体的身份进行判断;而授权则是向实体授予对数据资源和信息访问权限的决策过程。同Hadoop 1.0一样,Hadoop 2.0中的认证机制采用Kerbero和Token两种方案,而授权则是通过引入访问控制列表(Access Control List,ACL)实现的,接下来分别对它们进行介绍。

在阅读本文之前,可先阅读我之前几篇关于Hadoop 1.0安全机制的文章:

(1)Hadoop安全机制介绍

(2)Hadoop Keberos 安全机制介绍

(3)也可以阅读我的新书《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》中的“第11章 Hadoop安全机制” 了解更多细节。

1. Hadoop 2.0认证机制

在Hadoop中,Client与NameNode和Client与ResourceManager之间初次通信均采用了Kerberos进行身份认证,之后便换用Delegation Token以较小开销,而DataNode与NameNode和NodeManager与ResourceManager之间的认证始终采用Kerberos机制,默认情况下,Kerberos认证机制是关闭的,管理员可通过将参数hadoop.security.authentication设为“kerberos”(默认值为“simple”)启动它。接下来重点分析Hadoop中Token的工作原理以及实现。

Hadoop中Token的定义在org.apache.hadoop.security.token.Token中,每类Token存在一个唯一TokenIdentifier标识,Token主要由下表列出的几个字段组成。

下面重点介绍YARN中的各类Token及其作用,有兴趣的读者可自行了解HDFS中Token的种类及其作用。

(1) ResourceManager Delegation Token

ResourceManager Delegation Token是ResourceManager授权令牌,持有该令牌的应用程序及其发起的任务可以安全地与ResourceManager交互,比如持有该令牌的MapReduce作业可以在Task中再次向ResourceManager提交一个或者多个作业,进而形成一个MapReduce工作流,Hadoop生态系统中的工作流引擎Oozie正是采用了该策略。该令牌由ResourceManager中的组件RMDelegationTokenSecretManager管理和维护。

(2)  YARN Application Token

Application Token用于保证ApplicationMaster与ResourceManager之间的通信安全。该Token的密钥(masterKey)由ResourceManager传递给NodeManager,并保存到ApplicationMaster Container的私有目录下。当NodeManager启动ApplicationMaster时,所有的Token将被加载到ApplicationMaster的UGI中(NodeManager通过环境变量HADOOP_TOKEN_FILE_LOCATION将Token所在目录传递给UGI,这样UGI可以直接从文件中读取Token信息,所有其他Token的传递过程也是一样的),以在与ResourceManager通信时进行安全认证,需要注意的是,该Token的生命周期与ApplicationMaster实例一致。该Token由ResourceManager中的AMRMTokenSecretManager管理和维护。

(3) YARN NodeManager Token

ApplicationMaster与NodeManager通信时,需出示NodeManager Token以表明ApplicationMaster自身的合法性。该Token是由ResourceManager通过RPC函数ApplcationMasterProtocol#allocate的应答中发送给ApplicationMaster的,它的密钥是各个NodeManager向ResourceManager注册(ResourceTracker#registerNodeManager)和发送心跳信息(ResourceTracker#nodeHeartbeat)时领取的。ApplicationMaster通过ContainerManagementProtocol协议与NodeManager通信时,需要出示该Token。该Token由ResourceManager中的NMTokenSecretManagerInRM管理和维护。

(4)  YARN Container Token

ApplicationMaster与NodeManager通信启动Container时,需出示Container Token以表明Container的合法性。该Token是由ResourceManager通过RPC函数ApplcationMasterProtocol#allocate的应答存放到Container中发送给ApplicationMaster的,它的密钥是各个NodeManager向ResourceManager注册和发送心跳信息时领取的。ApplicationMaster通过RPC函数ContainerManagementProtocol#startContainer与NodeManager通信启动Container时,需要出示相应的Container Token。该Token由ResourceManager中的RMContainerTokenSecretManager管理和维护。

(5)  YARN Localizer Token

Localizer Token用于保证ContainerLocalizer与NodeManager之间的通信安全。ContainerLocalizer负责在任务运行之前从HDFS上下载各类所需的文件资源,以构建一个本地执行环境,在文件下载过程中,ContainerLocalizer通过RPC协议LocalizationProtocol不断向NodeManager汇报状态信息。

(6)  MapReduce Client Token

MapReduce Client Token用于保证MapReduce JobClient与MapReduce Application Master之间的通信安全。它由ResourceManager在作业提交时创建,并通过RPC函数ApplicationClientProtocol#getApplicationReport发送给JobClient。该Token由ResourceManager中的ClientToAMTokenSecretManagerInRM管理和维护。

(7) MapReduce Job Token

MapReduce Job Token用于保证MapReduce的各个Task(包括Map Task和Reduce Task)与MapReduce Application Master之间的通信安全。它由ApplicationMaster创建,通过RPC函数ContainerManagementProtocol#startContainer传递给NodeManager,并由NodeManager写入Container的私有目录中,以在任务启动时加载到UGI中,从而使得任务可以安全地通过RPC协议TaskUmbilicalProtocol与ApplicationMaster通信。

(8)  MapReduce Shuffle Secret

MapReduce Shuffle Secret用于保证运行在各个NodeManager上的ShuffleHandler(内部封装了一个Netty Server)与Reduce Task之间的通信安全,即只有同一个作业的Reduce Task才允许读取该作业Map Task产生的中间结果,该安全机制是借助Job Token完成的。

2. Hadoop 2.0授权机制

Hadoop YARN的授权机制是通过访问控制列表(ACL)实现的,按照授权实体,可分为队列访问控制列表、应用程序访问控制列表和服务访问控制列表,下面分别对其进行介绍。

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

(1)  队列访问控制列表

为了方便管理集群中的用户,YARN将用户/用户组分成若干队列,并可指定每个用户/用户组所属的队列。通常而言,每个队列包含两种权限:提交应用程序权限和管理应用程序权限(比如杀死任意应用程序),这些是通过配置文件etc/hadoop/mapred-queue-acls.xml设置的。

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

应用程序访问控制机制的设置方法是在客户端设置为每类ApplicationAccessType(目前只有VIEW_APP和MODIFY_APP两种类型)设置对应的用户列表,这些信息传递到ResourceManager端后,由它维护和使用。通常而言,为了用户使用方便,应用程序可对外提供一些特殊的可直接设置的参数(而不是通过API设置),以MapReduce作业为例,用户可以通过参数mapreduce.job.acl-view-job和mapreduce.job.acl-modify-job为每个作业单独设置查看和修改权限。需要注意的是,默认情况下,作业拥有者和超级用户(可配置)拥有以上两种权限且不可以修改。

(3)  服务访问控制列表

服务访问控制是Hadoop提供的最原始的授权机制,它用于确保只有那些经过授权的客户端才能访问对应的服务。比如可通过为ApplicationClientProtocol协议设置访问控制列表以指定哪些用户可以向集群中提交应用程序。

服务访问控制是通过控制各个服务之间的通信协议实现的,它通常发生在其他访问控制机制之前,比如文件权限检查、队列权限检查等。

3. 参考资料

(1)Document/analyze current Hadoop security model

(2)Hadoop YARN  Security Model


原文地址: http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-security/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值