1. 程式人生 > >Hadoop基於Service級別的認證機制

Hadoop基於Service級別的認證機制

前言


最近在學習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