开发者学堂课程【快速掌握 Hadoop 集成 Kerberos 安全技术:Kerberos 简介】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/708/detail/12555
Kerberos 简介
内容介绍:
一、在 hadoop 中开启 Kerberos 安全认证
二、看电影流程
三、Kerberos 身份认证流程
一、学习在 hadoop 中开启 Kerberos 安全认证
在大数据领域,安全永远是一个绕不开的话题。
对于一个简单安装上线的 hadoop 集群,可以认为有如下安全隐患:
如,可以人为的添加一个客户端节点,并以此假冒的客户端来获取集群数据。对于一个假冒的客户端节点,成功加入集群就能够伪装 datanode 让得到 namenode 指派的任务和数据。hadoop 文件系统的最高权限是 HDFS 账户。假冒的节点只需要在自己节点创建一个 HDFS 账户,来获得 hadoop 文件系统的最高权限。有很大安全隐患,对于 hadoop 身份进行认证,namenode 并没有对访问、连接的 datanode 进行认证,用户也没有认证。概念基于 hadoop 最早设计默认认为内网里是安全的,只要进入集群的内网都认为是集群的客户端。内网里一堆 datanode 节点只要进入网段认为是合法的 datanode,分派数据。
现在网络环境复杂,有些公司没有条件将集群真正放在内网里,可能需要应对公网上一系列的挑战。针对此问题,后面版本支持使用 Kerberos 做身份认证。
Kerberos 是做认证的框架,由麻省理工学院提出,距今时间悠久,不是 hadoop 创建,hadoop 只是使用 Kerberos 技术。
Kerberos 主要用来做网络通讯中的身份认证,帮助高效、安全的识别访问者。
二.看电影流程
小明要去电影院观看一场电影
流程:
1.前期需求
使用自己的账户密码登录票务中心,比如淘票票票务网站,在网站确定自己想要看什么电影,位于哪个影院,什么时间
2.购票机制
通过付费购票,来让小明从未授权的影院访问者变成被授权访问的状态,可以看电影。
3.验票机制
验证票据持有者的身份,和票务中心淘票票或影院后台核对验证票据的合法性、真实性、时间、以及访问的位置。
4.观看电影
一切验证通过后得到想要的内容。
5.再次观看
需要重新购票走流程,因为票的时间过期。
三.Kerberos 的认证流程
Kerberos 的认证流程基本上和上述的例子差不多,对上述例子进行转换-对成:
小明看电影,首先选片,购票。添加两条线,选片一条线,购票一条线。购票后去票务中心验证票的合法性,验票。验票后去影院看电影。看完电影以后出来,如果还想再看一次电影,原本的票据过期,再走选片、购票流程。
看电影过程可类比成 Kerberos 概念,一一替换,小明替换成 Client,访问 HDFS 里某个文件,找授权服务地方。选片服务替换成授权认证服务,授权认证服务小明需要告诉它表明身份,表明身份后返回临时的票据。
临时票据当作购票,临时票据叫做付款申请单。拿到临时票据客户端去票据中心服务购票,看电影里面东西相当于购票,在 Kerberos 里叫做验证临时票据,验证临时票据没有问题,票务中心返回真实 ticket。
拿到真实的 ticket,携带 ticket 访问服务。验票就是NameNode,NameNode 和 Kerberos 验证票据的合法性,验证通过可访问 /tmp/a.txt,访问完成后想再次访问,需要验证 ticket 有效期,过期需求重新得到,没过期可以继续使用。
访问 /tmp/a.txt 假设有24小时有效期,在24小时内可持续访问 /tmp/a.txt,过期需要重新拿票。看电影除了时间外还指定场次、影院,Kerberos 拿到票后除了保证24小时可以访问之外指定只能访问 /tmp/a.txt,如果访问别的票无效,需要重新拿到访问别的资源的票。
Kerberos 认证基本概念,没有写任何 Kerberos 名词,将名词对照很好理解。
1.发送请求,表明要访问什么服务,使用自己的密码来对请求进行加密,得到一个临时票据(付款账单)
2.拿着临时票据,去票据中心得到一个真实的票据(ticket)(付钱买票)
3.服务提供者和 Kerberos 进行通讯验证 ticket 的合法性、有效期(电影院验票)(ticket 只允许访问特定的服务在特定的时间)(类似电影票只能观看特定电影院持定场次的电影)
4.验证通过提供服务(看电影)比如访问 /tmp/a.txt,拿到文件。
5.超出 ticket 的有效期后或者服务再次访问需要重新申请(重新购票),超出有效期或访问别的服务票没有用,需要重新拿别的票。
基于转换,可以得到一个关键信息:Kerberos 的身份认证是基于 ticket 来完成的,就像看电影是基于电影票来进行验证的一样。
客户端想要访问某些服务,最主要的是得到一张 ticket
理解上述概念后,具体的 Kerberos 的执行流程:
授权认证是 AS、票据中心是 TGS
在如上的流程里有如下关健字:
1.KDC(秘钥分发中心),KDC(也就是 Kerberos Server)提供 AS 和 TGS 两个服务
(1)AS: authorization server,授权服务,对于上面流程1,提供初始授权认证,用户表明需求并使用密码对请求(告诉 AS 用户是谁、访问什么地方、访问具体路径)进行加密,AS 用提供的密码对请求进行解密后得到请求内容,AS 授权认证服务,认证身份、请求,没问题后返回给用户一个 TGT(ticket granting tickets 验证票据的票据)(用一个秘钥加密),TGT 相当于临时票据。拿到临时票据才能拿到真实票据、拿到临时身份证才能拿到真实身份证。
(2)用户得到 TGT 后使用 TGT 去访问 TGS(Ticket Granting Server 票据验证中心),TGS 是票据中心,TGS 验证 TGT 后(使用秘钥解密)返回一个 Ticket 给用户,Ticket 是真实票据,拿到真实票据访问 NameNode 验证票据,没问题访问,有问题打发重新获取票据。
Kerberos 的执行流程与买票一个核心点票。对于买票,票是核心点,对于 Kerberos 认证 Ticket 是核心点。只要拿到票相当于获得通行证,畅行无阻,没有票被挡在门外。
使用 Kerberos 目的防止用户随便访问资源,访问资源需要有票。主要的认证是如何验证拿到票,验证身份给有需要的人票,假的人不给票。AS 提供初始授权认证,用户表明需求并使用密码对请求(告诉 AS 用户是谁、访问什么地方、访问具体路径)进行加密,AS 用提供的密码对请求进行解密后得到请求内容,不给密码不知道用户是谁。任何都可以说 AS 我要访问 txt 目录,都可以向 AS 发请求,不认证密码谁都可以返回临时票据,拿到临时票据都可以拿到真实票据。第一道门槛是 AS 认证,需要提供密码验证用户身份,同时对请求进行加密防止别人暴力破解。拿到临时票据 TGT 后,TGT 属于密码加密,TGT 给 TGS 获取真实票据时使用密码解密。
Kerberos 认证第一步 AS 提供密码,密码被验证通过后面畅通无阻,拿到临时票据后使用临时票据获得真实票据。
对 Kerberos 基本了解后进入部署操作步骤,主要分为6个大步骤。第一大步骤准备环境,搭建 Kerberos 系统,搭建完成后在 HDFS、YARN、HIVE 上配置 Kerberos 认证,认证完成后测试。