问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Hadoop Security机制下跨集群日志分离认证问题解决方案

发布网友 发布时间:2022-10-09 10:50

我来回答

1个回答

热心网友 时间:2023-11-24 04:26

概述:为解决临时数据导致的集群资源争用问题,我们采用了container日志分离方案,但在Hadoop Security机制下,该方案存在跨集群的认证问题。经过对Hadoop Security机制及NodeMagager日志聚集功能源码的分析,探索了两种解决方案:1)在各计算框架以个人用户独立认证;2)在日志聚集功能模块以Yarn用户统一认证,并对两种解决方案的优劣进行了对比。

1、概述

集群上的数据可以拆分为业务数据、临时数据(日志、 app jars等),两类数据(或其操作)共同争用RPC, 存储等资源。经统计,每天NN RPC总量约为9.06亿,其中,存储日志数据导致的RPC约占RPC总量的10%,为了降低计算集群的RPC压力,我们结合 YARN-3269 提出了Container日志分离方案:将Container日志数据进行聚集,然后存储至独立的用于存放冷数据的集群,从而消除日志存储对计算集群的影响。

目前,集群采用了基于Kerberos的Hadoop Security机制,而该安全机制会导致日志聚集功能中HDFSClient访问冷数据集群NameNode认证失败,从而影响分离方案实施。

为了解决该问题,保障分离方案顺利实施,对Hadoop Security机制做了深入研究,并结合NodeManager日志聚集功能源码分析,探索了两种解决方案:

1) 在各计算框架以个人用户独立认证。

2) 在日志聚集功能模块以Yarn用户统一认证。

下文将对Hadoop Security 机制,日志分离功能遇到的问题的原因及解决方案进行详细分析,不足之处,也请批评指正。

2、Hadoop Security

Hadoop Security机制采用Kerberos 与Delegation Tokens(代理Token)相结合的方案。

2.1 Kerberos

2.1.1 Kerberos原理

为了更加形象的说明Kerberos的原理,我们采用举例的方式进行说明(官方示例)。

比如:用户要去游乐场,首先要在门口检查用户的身份(即 CHECK 用户的 ID 和 PASS), 如果用户通过验证,游乐场的门卫 (AS) 即提供给用户一张门卡 (TGT)。

这张卡片的用处就是告诉游乐场的各个场所,用户是通过正门进来,而不是后门偷爬进来的,并且也是获取进入场所一把钥匙。

现在用户有张卡,但是这对用户来不重要,因为用户来游乐场不是为了拿这张卡的而是为了游览游乐项目,这时用户摩天楼,并想游玩。

这时摩天轮的服务员 (client) 拦下用户,向用户要求摩天轮的 (ST) 票据,用户说用户只有一个门卡 (TGT), 那用户只要把 TGT 放在一旁的票据授权机 (TGS) 上刷一下。 票据授权机 (TGS) 就根据用户现在所在的摩天轮,给用户一张摩天轮的票据 (ST), 这样用户有了摩天轮的票据,现在用户可以畅通无阻的进入摩天轮里游玩了。

当然如果用户玩完摩天轮后,想去游乐园的咖啡厅休息下,那用户一样只要带着那张门卡 (TGT). 到相应的咖啡厅的票据授权机 (TGS) 刷一下,得到咖啡厅的票据 (ST) 就可以进入咖啡厅。

当用户离开游乐场后,想用这张 TGT 去刷打的回家的费用,对不起,用户的 TGT 已经过期了,在用户离开游乐场那刻开始,用户的 TGT 就已经销毁了。

如图1所示,Kerberos认证的过程可以分为三步:1)Client获取KDC访问许可TGT(我是谁),2)向TGS请求要访问的目标服务的票具(我要干什么),3)访问目标服务(干什么),图中具体流程与举例说明相仿,下面我们结合HDFS的访问过程对其进行描述。

2.1.2 HDFS Client的认证流程

下面以大家常用的hdfs dfs – ls dir(或 hadoop fs –ls dir) 为例,描述Kerberos的认证流程。

1) 首先使用kinit进行登录,输入密码后,Kerberos 客户端收集user-principle(kinit时产生,可以使用Klist进行查看) 和password,发送至KDC(AS)进行认证。

2) KDC认证通过后,下发TGT(user-kdc-ticket)给客户端。客户端收到TGT进行校验通过后,将TGT缓存在本地(用户只读)。

3) 将执行hdfs dfs –ls dir时,首先从缓存中取出TGT, 然后向KDC(TGS)获取连接NameNode(NN)访问许可。KDC收到请求,用户身份校验通过后,下发User-NN-Ticket.

4) HDFS客户端使用得到的User-NN-Ticket连接NN。NN收到请求后,对Ticket进行验证,认证通过后,使用加密数据回复客户端,客户端收到信任信息后,发送listFiles(dir)请求,并等待响应。

以上为HDFS Client简要流程,。

2.2 Delegation Token

理论上,可以单独使用Kerberos进行身份认证,然而,在Hadoop这样的分布式系统中使用时,存在一个问题:对于每一个Job, 如果所有的工作任务者使用TGT通过Kerberos TGS进行身份认证,那么Kerberos将很快成为瓶颈。图2中的红线说明了问题:一个作业可能有数千个节点到节点的通信,导致相同的KDC通信量。事实上,在大集群中会不经意地在KDC上执行分布式拒绝服务攻击。

因此,引入了Delegation Token作为一种轻量级的认证方法来补充Kerberos身份验证。Kerberos是三方协议;相比之下,Delegation Token认证是两方认证协议。引入Delegation Token之后的认证过程如图3所示。

为了简洁起见,图3省略了Kerberos身份验证的步骤和任务分配的细节。假设,现在已经完成了Kerberos的三步式认证,后续流程如下(KMS Delegation与HDFS Delegation协同,下面统一以HDFS的角度进行说明):

1)Client在进行完Kerberos的三步式认证后,获得NameNode产生的HDFS Delegation Token,并缓存于UGI.

2)Client 向RM(ResourceManager)提交App时,会携带该Token信息。

3)RM接到Token之后, 会马上对Token进行Renew操作已验证其合法性,并将其持久化到要启动ApplicationMaster的Worker(NodeManager),Worker在启动ApplicationMaster加载该Token(后续Worker类似)。

4)Worker 通过Token 对HDFS进行访问。

5)运行结束,RM撤销Token.

图3 Delegation Token 补充方案认证流程

值得注意的是,Token具有超时时间,默认为24小时。在不对Token更新的情况下,超过24小时的App将会失败。因此,存在Renewer对Token进行更新以保证长任务执行(token最终超时时间由yarn参数delegation.token.max-lifetime决定)。

3、日志聚集功能

3.1日志分离失败case

在原有配制基础上,开启日志分离功能(跨集群日志聚集)后,发现未按预期进行日志分离,且NodeManager节点存在以下异常信息:

通过观察日志,可以清晰的发现,该异常系权限认证失败所致。通过分析源码,该异常发生的位置进行的操作为:通过userUGI.doAs创建AppLogDir。日志显示的结果可能为userUGI中没有访问远程集群的Token,导致失败。

3.1.1 UGI追踪(UGI****从哪里来)

分析userUGI中是否具有访问冷数据集群的Token, 我们需要对UGI的来源进行跟踪。通过分析源码,我们发现UGI关联的User及Token(图中Credentials为工具类,用于读写存储在内存或磁盘中密钥和令牌)是通过解析LogAggregationServicer接收的APPLICATION_STARTED Event 得到的,具体跟踪流程如图4所示,其中Hander, Initializer为方便说明,抽象出来的对象。

根据时序图中访问流程,结合异常日志信息,可以确定异常原因的确userUGI没有访问远程集群的Toket(Credentials)

3.1.2 Credentials (或Tokens)追踪(Creadential从哪里来)

本节从Spark计算引擎的角度,对Credentials(或Tokens)来源进行追踪。通过分析yarn/Client源码,Client在启动AM (ApplicationMaster)前,会进行一系列准备工作。准备工作过程中存在与其它组件的通信,其中包括准备本地资源时(prepareLocalResources)与NN(NameNode)的通信:1)通过TGT 获取user-nn-ticket(Client启动在客户机,可以使用TGT) ;2)使用user-nn-ticket 访问NN,并获取Delegation Tokens. 获取到Tokens后会通过Credentials将Tokens(不含TGT)存储在ContainerLaunchContext中。并随同ApplicationSubmissionContext一起提交至Yarn,请求启动AM;Yarn收到请求后,会为其选择NodeManager,使用ContainerLaunchContext 拉起AM.

从上图可知,最后LogAggregationServicer可使用的Tokens是客户端(Agent)初始化时,获取的。换句话说,客户端获取了访问某NN的Token时,LogAggregationServicer才具有访问该NN的Token. 而默认情况下,客户端仅会获取fs.defaultFS(HADOOP_CONF:core-site.xml中配置),因此,跨集群访问时无访问日志集群的权限。

3.2解决方案

通过上述分析可知,若想访问某服务,需具备以下一种条件:

1) 拥有该服务授予的合法Token.

2) 角色持用TGT(password认证或keytabs),可以通过Kerberos完成完整的服务认证。

基于以上分析,我们对日志分离认证问题提出了两种方案:

1)各计算框架以个人用户独立认证

该方案的核心思想是向Yarn提交应用前,使客户端(Agent)获取所有必要的Token。客户端启动在使用kinit进行登录的客户机,因此其可使用TGT 完成Kerberos认证,并可以获取到任务想访问的服务(类2.1.1节流程)。

因此,针对日志分离跨集群认证问题,应使客户端在向Yarn提交应用前,获取到所有NN 的Token,以便传递到NM以用户身份进行日志聚集操作。

该方案需要在各计算引擎进行配置或修改,以使在提交应用前,获取到所需的Tokens.目前,Spark(“spark.yarn.access.namenodes”)及MR(“ maprece.job.hdfs-servers”)引擎,自带配制参数,用于指定额外的NN,以获取Tokens。其它引擎目前未进行调研。

2)日志聚集功能模块以Yarn****用户统一认证

该方案的核心思想是使用NodeManager的启动用户Yarn进行日志聚集,从而使用Yarn统一进行认证。

NodeManager使用KeyTabs方式进行登录,其可以通过Kerberos认证访问所有服务(包括NN);另外,日志聚集功能,以AbstractService方式运行于NodeManger。因此,理论上可以使用NodeManager获取的Tokens 访问远程NN,创建日志目录或上传日志等。

日志聚集不仅包括日志上传等工作,还包括container本地日志清理工作,而Container日志的管理是以应用提交用户的名义进行的管理,若直接将UserUGI简单的更换成NodeManager LoginUGI,则日志后处理工作将无法进行,因此,我们采用Token劫持方案进行实现(若集群支持ProxyUser,可使用ProxyUser),即:使用用户的UGI + NodeManager 获取的Token方式进行实现,具体如下:

3.3 方案对比

表1 跨集群日志分离认证问题解决方案对比

综上,我们采用日志聚集功能模块以Yarn用户统一认证的方式来解决跨集群日志分离认证问题。

4结论

本文分析了Hadoop Security的原理,提出了两种跨集群日志分离认证问题解决方案。并对比了两种方案的优劣,最终选用日志聚集功能模块以Yarn用户统一认证方案解决跨集群日志分离认证问题,现该方案已上线验证,截止目前运行良好。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...DE分别在BC AC上,且AE=CD,连接AD,BE交于点p 过B作BQ⊥AD Q为垂足... ...AC上的点,且AE=CD 连接AD BE 交于点P 作BQ垂 ...ac上的点,且ae=cd,连接ad、be交于点p作BQ⊥AD,垂足为Q,求证BP=2... ...AC上的点,且AE=CD,链接AD、BE交于点P,作BQ⊥AD ...AC上的点,且AE=CD,连结AD、BE交于点P,作BQ⊥AD,垂足为Q. ...刚刚大学毕业。由于生病,导致目前没有工作,大学四年的女友也因为我... 形容“荷花的特点”有什么词语 梦见比人还高大的石头蛤蟆,杀人拆房子。我和其他人一起翘辫子了._百度... 梦见别人送我一条蛇,我却把他不小心放了.可是我用石头打了它一下... 作文 我生活在鼓励中 NPM 常见问题及解决方案 怎么删除苹果手机上的APPstory里的购买记录啊?太多了,想清除一下,怎么弄 孩子干事拖沓怎么改正 孩子干事拖沓改正的方法 鲁鲁修到底死了没? g241国道的起点和终点图(g241国道的起点和终点多少公里) 帮我儿子取名字,2013年4月4号01:42生,姓王,是炳字辈,要求3个名字中间要有炳,多建议几个好听的名字谢 中国银行的银行社保卡账号如何加到手机银行中? 家里的蟑螂是从哪里来的?该怎样消灭它? 想问传明酸虾青素有危害吗 姓张,中间炳字辈,和什么字搭配好 西门子802s数控系统14510怎么设置 怎样强制注销 2021年美国GDP创37年新高 怎样强制注销 幼儿园中班语言教学设计 有专业听歌的没,我知道点歌词想找歌名 锤子标签可以设置密码吗 一首张学友的快歌,粤语的,一句歌词是“呼啦啦,世界是你的” 有一首粤语歌,开头就是WOO...WOO...很长,不是古古惑惑,有人能告诉我是什么歌吗?急 手上有油漆怎么洗 美瞳线跟内眼线是不是一样的?做一次需要多少钱? 是不是借了网贷银行贷款就批不了?重疾险保额100万一年交多少钱? 小孩做事拖拖拉拉,老师应如何帮其改正? 在linux的三台虚拟机中如果启动一台虚拟机不启动另外两台虚拟机dfs和yarn能不 hue集成sentry后添加用户操作流程 交通事故一根肋骨骨折赔偿标准是什么 植物是怎么来的 植物简单介绍 我想问问小公司的会计要做什么 土味情话大全撩妹套路 蒹葭苍苍中的蒹葭是什么 蒹葭苍苍解释 撩妹套路大全 微信聊妹子的套路情话 自己骑车摔伤肋骨骨折三根因没有报警保险公司理赔50%为什么 佛山哪里组装电脑最好 蟹虎鱼刺多吗 ios14怎么添加小组件 请问还有速水奖配的绝爱drama吗? 我找不到开户的证券营业厅怎么办啊,我就不能注销我的账号吗? 可爱的妹妹作文 在佛山南海区去哪里组装电脑好点?(要在那里边买到自己想要配置的那种)谢谢告知!