赞
踩
目录
用户在访问大数据集群数据时会有如下几个维度的安全防护方式来保证访问数据的安全:
以上边界安全主要是针对企业大数据集群节点的防火墙和安全组端口控制,避免非法访问和操作集群数据,边界安全假设“坏人”在外面,这通常是一个非常糟糕的假设,大多数真正具有破坏性的计算机犯罪事件都是内部人员所为,所以对于可以访问集群节点的人员还需进一步认证;认证主要是针对通过边界安全维度后进行用户身份的确认,认证有很多形式,如服务组件自身提供了简单的用户名/密码认证方式、通过Kerberos认证服务对用户身份进行认证;为了更好细粒度控制通过认证用户访问的资源可以通过对用户授权方式来决定用户操作资源的权限,这就是授权;最终操作集群资源时可以对数据进行加密传输,所有操作都会通过审计日志进行记录,便于风险排查。
针对认证(Authorization)部分,目前大数据企业比较通用的是使用Kerberos协议,集群上启动的多个服务组件可以通过使用同一个第三方的Kerberos认证服务,对用户进行身份认证,例如大数据中HDFS默认安全认证的方式就采用的是Kerberos认证协议。
Kerberos 是一种网络身份验证协议,Kerberos协议通过使用密钥加密为Client/Server应用程序提供强大的身份验证。不同于其他网络安全协议的保证整个通信过程的传输安全,Kerberos侧重于通信前双方身份的认定工作,帮助客户端以及服务端验证是真正的自己并非他人,从而使得通信两端能够完全信任对方的身份,在一个不安全的网络中完成一次安全的身份认证继而进行安全的通信。
Kerberos由麻省理工学院(MIT)研发实现,官网地址为:https://web.mit.edu/kerberos/,Kerberos 一词来源于古希腊神话中的 Cerberus —— 守护地狱之门的三头犬,下图是 Kerberos 的 LOGO:
在大数据开发中,很多大数据组件都支持Kerberos身份认证,例如:HDFS、Yarn、Hive、HBase、Spark、Kafka等。
为了更好理解Kerberos认证原理,需要首先对加密和数字证书概念进行理解。互联网通信中为了保证信息传输过程中数据的机密性可以对数据进行加密,加密又分为对称加密和非对称加密。
对称加密是指加密和解密使用相同的密钥。发送方使用该密钥将明文转换为密文,接收方使用相同的密钥将密文还原为明文。这种方法的优点是加密和解密速度快,适用于大量数据的加密,但缺点是需要保护好密钥,因为密钥一旦泄露,所有的加密信息都将暴露。在Kerberos中信息加密方式默认就是对称加密。
常见的对称加密算法有:DES、AES、3DES等。
非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。 公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。例如:发送方使用接收方的公钥加密明文,接收方使用自己的私钥解密密文。这种方法的优势就是即使密文和公钥被拦截,但是由于无法获取到私钥,也就无法破译到密文,但缺点是加密和解密速度相对较慢,不适用于大量数据的加密。
常见的非对称加密算法有:RSA、ECC等。
整个Kerberos认证流程中涉及到三种角色:客户端Client、服务端Server、密钥分发中心KDC(Key Distribution Center)。
Kerberos认证流程图如下:
Kerberos认证过程总体流程为:客户端向KDC请求要访问的目标服务器的服务授予票据(ticket),然后客户端拿着从KDC获取的服务授予票据(ticket)访问服务端。在以上这个过程中,需要保证客户端和服务端为正确的客户端和服务端,整个Keberos认证流程共有三次交互,如下:
1. 客户端向KDC AS获取TGT
为了获取访问服务端的服务授予票据,客户端首先向KDC中AS获取TGT(票据授予票据),客户端需要使用TGT去KDC中的TGS(票据授予中心)获取访问服务端所需的Ticket(服务授予票据)才能进一步的与服务端通信。
客户端首先向KDC以明文方式发起请求,该请求中携带了访问KDC的用户名、主机IP、当前时间戳。由于客户端是第一次访问KDC,KDC中AS(认证服务器)接收请求后,去Kerberos数据库中验证是否存在访问的用户名,这个过程不会判断身份的可靠性。如果没有该用户名,认证失败;如果存在该用户名,AS会返回两部分信息给客户端:
整个TGT使用TGS公钥加密,客户端是解密不了,后续客户端需要使用TGT去KDC中的TGS(票据授予中心)获取访问服务端所需的Ticket(服务授予票据)。
2. 客户端向KDC TGS获取目标服务器的服务授予票据ticket
客户端收到了来自KDC AS 返回的两部分信息后,对第二部分信息进行解密,可以获取与TGS通信的session_key(CT_SK)、将要访问TGS的名称、时间戳。首先会检查时间戳是否与自己返送数据的时间戳相差5分钟,如果大于5分钟则认为该AS是假的,认证中断。如果时延合理,客户端便向TGS发起请求去获取要访问目标服务端的服务授予票据ticket。
客户端向KDC TGS请求的信息包括三部分:
当KDC中的TGS收到了客户端的请求后,首先去Kerberos数据库中查询是否存在该服务端,如果不存在认证失败。如果存在,TGS会使用自己的私钥对TGT进行解密,从而获取到经过KDC AS 认证过的客户端信息、CT_SK、时间戳信息,TGS会根据时间戳判断此次通信是否超出时间延迟,如果正常,TGS会对客户端发送过来的加密信息(使用CT_SK加密的信息)进行解密,获取客户端名称、IP信息,如果这部分信息与TGT中的客户端信息一致,那么就确认客户端的身份正确,否则中断认证。
KDC TGS通过确认是对的客户端后,会将如下两部分信息返回给客户端:
3. 客户端向服务端发送通信请求
当客户端收到来自KDC TGS的响应后,对第二部分内容进行解密,获取CS_SK、时间戳、ST有效时间,检查时间戳在时间延迟范围内,向服务端进行请求。
客户端会通过CS_SK将客户端名称、时间戳进行加密发送给服务端,此外还会将服务授予票据ST发送给服务端。
服务端收到来自客户端的请求,会使用自己私钥对ST进行解密获取信息(客户端名称、IP、需要访问的服务端的IP、ST有效时间、时间戳、用于客户端与服务端之间通信的CS_SK),将CS_SK取出对客户端发来的通过CS_SK加密的内容进行解密获取信息(客户端名称、时间戳),如果客户端信息一致说明该客户端是通过KDC认证的客户端,可以进一步提供服务,这时服务端返回通过CS_SK加密的接收请求信息给客户端,客户端接收到该请求后,使用缓存在客户端的CS_SK解密后,也确认了服务端身份,这个过程服务端还会通过数字证书证明自己身份。
以上3个步骤代表了整个kerberos认证的流程,通信的客户端和服务端都确认了双方的身份信息。这个过程使用了各方的密钥,且密钥的种类一直变化,为了防止网络拦截密钥,这些密钥都是临时生成的Session key,即它们只在一次Session会话中起作用,即使密钥被劫持,等到密钥被破解可能这次会话都早已结束,这为整个Kerberos认证过程保证了较高的安全性。
Kerberos具备如下三点优势:
欢迎关注IT贫道,获取IT技术。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。