前言
最近在学习Hadoop Security方面的内容,但注意了,本文今天不是介绍Kerberos认证机制的。今天分享一个Service Level的认证机制,可以说它是一种预先认证行为,比我们常说的HDFS权限验证等等都要更早一些。一句话简单地来讲,它是Service/Service,Service/Client之间建立连接时候的认证。OK,下面笔者来简单聊聊这套认证体系。
什么是Service级别认证
这里所提到的Service级别认证的概念来自于Hadoop项目中早期实现的一个功能。这套认证模式的初衷是为了做初始的连接验证,保证客户端与服务端的连接是正确的,客户端是被认证过有效的,合法的。然后服务端才允许后面的消息通信。
Service级别认证的维度
现在问题来了,Service级别认证的维度具体到那个层面呢?用准确的话来描述:在每个协议的每次连接上,做用户和IP地址的验证。
注意这里有一个很大的不同点,这里区分出了“协议”,通信“协议”在这里代表的是不同端到端的连接(在HDFS里,可能NN/DN,NN/普通Client)。也就是说不同协议间的通信连接可以有不同的认证规则,然后可以定义不同的允许访问的用户和地址列表。
Service级别认证细节
这里不介绍Service级别认证的具体实现,简单阐述它的一些粗略实现。根据上小节提到的认证模式,过程主要如下:
1)管理员定义好具体协议的用户组,IP地址列表白/黑名单。
2)服务端加载上面配置好的规则信息。
3)客户端发起连接时,将当前的协议,地址,用户信息,附加到Connection里面。
4)服务端监听到客户端的连接请求,从连接信息中反解析出协议,地址,用户信息,与之前加载过的规则信息做比较,判断是否合法。如果不合法,断开此次连接。
下面是部分协议规则信息的配置文件样例:
配置名 | 含义 |
---|---|
security.client.protocol.acl | ACL for ClientProtocol, which is used by user code via the DistributedFileSystem. |
security.client.datanode.protocol.acl | ACL for ClientDatanodeProtocol, the client-to-datanode protocol for block recovery. |
security.datanode.protocol.acl | ACL for DatanodeProtocol, which is used by datanodes to communicate with the namenode. |
引用
[1].https://issues.apache.org/jira/browse/HADOOP-4348
[2].http://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/ServiceLevelAuth.html