介绍

Hadoop中的安全机制包括认证和授权。而Hadoop RPC中采用SASL(Simple Authentication and Security Layer,简单认证和安全层)进行安全认证,具体认证方法涉及Kerberos和DIGEST-MD5两种。

在这种机制中,Kerberos用于在客户端和服务器端之间建立一条安全的网络连接,之后客户端可通过该连接从服务器端获取一个密钥。由于该密钥仅有客户端和服务器端知道,因此,接下来客户端可使用该共享密钥获取服务的认证。使用共享密钥进行安全认证(使用DIGEST-MD5协议)有多方面的好处:由于它只涉及认证双方而不必涉及第三方应用(比如Kerberos中的KDC),因此安全且高效;客户端也可以很方便地将该密钥授权给其他客户端,以让其他客户端安全访问该服务。我们将基于共享密钥生成的安全认证凭证称为令牌(Token)。在Hadoop中,所有令牌主要由identifier和password两部分组成,其中,identifier包含了该令牌中的基本信息,而password则是通过HMAC-SHA1作用在identifier和一个密钥上生成的,该密钥长度为20个字节并由Java的SecureRamdom类生成。Hadoop中共有三种令牌:委托令牌、块访问令牌和作业令牌。

委托令牌(Delegation Token)

授权令牌主要用于NameNode为客户端进行认证。当客户端初始访问NameNode时,如果通过Kerberos认证,则NameNode会为它返回一个密钥,之后客户端只需借助该密钥便可进行NameNode认证。为了防止重启后密钥丢失,NameNode将各个客户端对应的密钥持久化保存到镜像文件中。默认情况下,所有密钥每隔24小时更新一次,且NameNode总会保存前7小时的密钥以保证之前的密钥可用。

委托令牌是客户端和NameNode之间的共享密钥,可以使用DIGEST-MD5机制进行RPC验证。委托令牌的格式如下:

令牌同时具有到期日期和最大发行日期。 令牌将在到期日期后到期,但即使过期到最大发布日期也可以更新。在对NameNode进行任何初始Kerberos身份验证后,客户端可以请求委托令牌。令牌还具有指定的令牌更新器。令牌更新程序在代表用户更新令牌时使用其Kerberos凭据进行身份验证。委托令牌最常见的用途是MapReduce作业,在这种情况下,客户端将JobTracker指定为更新程序。委托令牌由NameNode的URL键入,并存储在JobTracker的系统目录中,以便将它们传递给任务。下图是客户首次与Namenode之间的交互。

数据块访问令牌(Block Access Token)

数据块访问令牌主要用于DataNode、SecondaryNameNode和Balancer为客户端存取数据块进行认证。当客户端向NameNode发送文件访问请求时,如果通过NameNode认证以及文件访问权限检查,则NameNode会将该文件对应的数据块位置信息和数据块访问密钥发送给客户端,客户端需凭借数据块访问密钥才可以读取一个DataNode上的数据块。NameNode会通过心跳将各个数据块访问密钥分发给DataNode、SecondaryNameNode和Balancer。需注意的是,数据块访问密钥并不会持久化保存到磁盘上,默认情况下,它们每隔10小时更新一次并通过心跳通知各个相关组件。

块访问令牌的格式如下,其中keyID标识用于生成令牌的私钥,accessMode可以是READ,WRITE,COPY,REPLACE的任意组合。

用户向Namenode申请访问文件的过程如下:

作业令牌(Job Token)

作业令牌主要用于TaskTracker对任务进行认证。用户提交作业到JobTracker后,JobTracker会为该作业生成一个作业令牌,并写到该作业对应的HDFS系统目录下。当该作业的任务调度到各个TaskTracker上后,将从HDFS上获取作业令牌。该令牌可用于任务与TaskTracker之间进行相互认证(比如Shuffle阶段的安全认证)。与数据块访问令牌一样,作业令牌也不会持久化保存到内存中,一旦JobTracker重新启动,就会生成新的令牌。由于每个作业对应的令牌已经写入HDFS,所以之前的仍然可用。

基于令牌的认证机制的优势

相比于单纯使用Kerberos,基于令牌的安全认证机制有很多优势,具体如下。

❑性能:在Hadoop集群中,同一时刻可能有成千上万的任务正在运行。如果我们使用Kerberos进行服务认证,则所有任务均需要KDC中AS提供的TGT,这可能使得KDC成为一个性能瓶颈,而采用令牌机制则可避免该问题。

❑凭证更新:在Kerberos中,为了保证TGT或者服务票据的安全,通常为它们设置一个有效期,一旦它们到期,会对其进行更新。如果直接采用Kerberos验证,则需要将更新之后的TGT或者服务票据快速推送给各个Task,这必将带来实现上的烦琐。如果采用令牌,当令牌到期时,只需延长它的有效期而不必重新生成令牌。此外,Hadoop允许令牌在过期一段时间后仍可用,从而为过期令牌更新留下足够时间。

❑安全性:用户从Kerberos端获取TGT后,可凭借该TGT访问多个Hadoop服务,因此,泄露TGT造成的危害远比泄露令牌大。

❑灵活性:在Hadoop中,令牌与Kerberos之间没有任何依赖关系,Kerberos仅仅是进行用户身份验证的第一道防线,用户完全可以采用其他安全认证机制替换Kerberos。因此,基于令牌的安全机制具有更好的灵活性和扩展性。

Hadoop安全机制之令牌的更多相关文章

  1. Hadoop学习笔记—3.Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  2. Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable

    酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...

  3. hadoop序列化机制与java序列化机制对比

    1.采用的方法: java序列化机制采用的ObjectOutputStream 对象上调用writeObject() 方法: Hadoop 序列化机制调用对象的write() 方法,带一个DataOu ...

  4. 一文了解 Hadoop 运行机制

    大数据技术栈在当下已经是比较成熟的了,Hadoop 作为大数据存储的基石,其重要程度不言而喻,作为一个想从 java 后端转向大数据开发的程序员来说,打好 Hadoop 基础,就相当于夯实建造房屋的地 ...

  5. Hadoop序列化机制及实例

    序列化 1.什么是序列化?将结构化对象转换成字节流以便于进行网络传输或写入持久存储的过程.2.什么是反序列化?将字节流转换为一系列结构化对象的过程.序列化用途: 1.作为一种持久化格式. 2.作为一种 ...

  6. Hadoop心跳机制源码分析

    正文: 一.体系背景 首先和大家说明一下:hadoop的心跳机制的底层是通过RPC机制实现的,这篇文章我只介绍心跳实现的代码,对于底层的具体实现,大家可以参考我的另几篇博客: 1. hadoop的RP ...

  7. 【Hadoop】Hadoop HA机制要点

    Hadoop HA 机制架构.要点.原理: 需要的机器(规划): 至少三台机器 HOSTNAME IP 安装软件ZK HADOOP进程 HADOOP-NODE1 10.20.0.11 JDK,HADO ...

  8. Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  9. 每天收获一点点------Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

随机推荐

  1. 关于nodeJS多线程的支持,目前看来无法实现,讲解v8的一些东西

    关于这个,我这几天一直在研究,国内关于v8的资料很少,stackoverflow上也不多. 说起来我得说声抱歉,虽然并没有承诺什么.这个功能大概是无法实现.下面我来解释一下为什么. 首先我们要了解一下 ...

  2. 3299: [USACO2011 Open]Corn Maze玉米迷宫

    3299: [USACO2011 Open]Corn Maze玉米迷宫 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 137  Solved: 59[ ...

  3. Apache Flume日志收集系统简介

    Apache Flume是一个分布式.可靠.可用的系统,用于从大量不同的源有效地收集.聚合.移动大量日志数据进行集中式数据存储. Flume简介 Flume的核心是Agent,Agent中包含Sour ...

  4. 优雅的使用sublime写lua~ sublime lua相关必装插件推荐~~

    缘起 lua脚本语言虽好,代码写得飞快,可是写错了调试起来却很困难,lua使用者经常容易犯得一个错误是--写错变量名了,if end 嵌套太多没匹配~,多打了一个逗号, 假设定义了一个变量 local ...

  5. 利用python的爬虫技术爬取百度贴吧的帖子

    在爬取糗事百科的段子后,我又在知乎上找了一个爬取百度贴吧帖子的实例,为了巩固提升已掌握的爬虫知识,于是我打算自己也做一个. 实现目标:1,爬取楼主所发的帖子 2,显示所爬去的楼层以及帖子题目 3,将爬 ...

  6. PHP的错误处理

    PHP的错误处理机制 php的错误处理是比较复杂的, 本文讲解php中所有错误相关的重要知识点做一次梳理, 便于理解php的错误机制. 基础知识 在此之前, 先熟悉一下php error的基础知识 预 ...

  7. 【VB超简单入门】五、基本输出输入

    之前讲了VB IDE的基本操作和概念,接下来要开始将VB语言的编程了. 程序最重要的部分是输出和输入,输入数据,经过计算机处理,再输出结果.本文将介绍两种最基本的输出输入方法,分别是Print.Msg ...

  8. Linux之split命令

    split - split a file into pieces 切割一个文件至多片 参数: -a, --suffix-length=N     使用的后缀的长度,默认长度为2,例如'aa','ab' ...

  9. 小程序新能力-个人开发者尝鲜微信小程序

    个人开发者的福利 微信小程序,刚听到这个新名词的时候,我就兴冲冲的去找入口,看看自己能不能搞个微信小程序的HelloWorld,毕竟能在微信上把自己写的一些小工具跑起来还是满炫酷的. 没想,网上一查, ...

  10. 手机自动化培训:Appium介绍

    手机自动化培训:Appium介绍 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...