Step by Step 實(shí)現(xiàn)基于 Cloudera 5.8.2 的企業(yè)級安全大數(shù)據(jù)平臺 - 如何訪問Kerberos Enabled服務(wù)

很高興大家有興趣看到這里,今天筆者來說說熬粗,怎么訪問已經(jīng) Enable 了 Kerberos 的 Hadoop 服務(wù)搀玖,以 HDFS 為例子。訪問其他服務(wù)時(shí)驻呐,大家可以有些啟發(fā)灌诅,而不會盲目無從下手。

再來說說含末, Kerberos 的整個(gè)簡單認(rèn)證過程猜拾。

Kerberos 的認(rèn)證過程如下圖所示。我們可以簡單的理解為佣盒,User 或者 Service 會用 Principal 到 AS 去認(rèn)證(KRB_AS_REQ)挎袜,AS 會返回一個(gè)用 Principal Key 加密的 TGT(KRB_AS_REP),這時(shí)候只有 AS 和這個(gè) Principal 的使用者可以識別該 TGT。在拿到加密的 TGT 之后宋雏,User 或者 Service 會使用 Principal 的 Key 來解密 TGT芜飘,并使用解密后的 TGT 去 TGS 獲取 Service Ticket(KRB_TGS_REQ, KRB_TGS_REP)。在 Kerberos 認(rèn)證的集群中磨总,只有拿著這個(gè) Service Ticket 才可以訪問真正的 Server 從而實(shí)現(xiàn)自己的業(yè)務(wù)邏輯(KRB_AP_REQ, KRB_AP_REP)嗦明。一般我們將 TGT 的存放文件,稱為 Kerberos Confidential 文件蚪燕,默認(rèn)的存放目錄為/tmp娶牌,文件名則由 krb5cc 和用戶的 id 組成,例如“/tmp/krb5cc_0”為root的 confidential 文件馆纳。

kerberos_auth.png

接下來分為 CLI 以 principal + password 的方式訪問 HDFS诗良,以及 Java SDK 以 key tab 的方式訪問 HDFS。前者適合 user 進(jìn)行簡單訪問鲁驶, 后者適合 service 進(jìn)行常駐式的服務(wù)訪問鉴裹。 Kerberos 部署請看上一篇:實(shí)現(xiàn)基于Cloudera的企業(yè)級安全大數(shù)據(jù)平臺-Kerberos的整合。 HDFS 的部署很簡單钥弯,在這里不復(fù)述径荔,請看 Cloudera 官方文檔, 并 Enable HDFS HA脆霎。

CLI 訪問 HDFS

Active NameNode: 192.168.1.1
Kerberos KDC Server: 192.168.1.1
DFSClient: 192.168.1.18
Cloudera Version: 5.8.2

在 Kerberos KDC Server 的操作

以 kadmin 的身份進(jìn)行認(rèn)證总处,創(chuàng)建測試 principal:

kinit cdh-master/admin@DOMAIN.COM # 該管理員 principal 是上一篇定義的
kadmin
> addprinc hdfs/test@DOMAIN.COM # 此處初始化 principal 密碼

在 DFSClient端的操作

在 DFSClient 192.168.1.18 部署 Kerberos 客戶端:

sudo yum install krb5-devel krb5-workstation -y

JDK 1.8.0 安裝,這塊網(wǎng)上有很多教程睛蛛,不復(fù)述鹦马。

將 Kerberos 服務(wù)端的配置文件拷貝至 DFSClient:

sudo scp 192.168.1.1:/etc/krb5.conf /etc/

為了支持java的aes256-cts算法,將JCE包解壓到${JAVA_HOME}/jre/lib/security目錄下:

wget http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip
unzip jce_policy-8.zip
sudo cp UnlimitedJCEPolicyJDK8/*.jar $JAVA_HOME/jdk1.8.0/jre/lib/security

安裝 HDFS 客戶端忆肾,并進(jìn)行 HDFS 配置:

tar -zxvf /home/admin/hadoop-2.6.0-cdh5.8.2.tar.gz -C /home/admin/

# 假設(shè) 192.168.1.3 是 Active NameNode
scp 192.168.1.3:/etc/hadoop/conf/* /home/admin/hadoop-2.6.0-cdh5.8.2/etc/hadoop/

進(jìn)行 Kerberos 認(rèn)證荸频,并執(zhí)行測試命令:

kinit hdfs/test@DOMAIN.COM
/home/admin/hadoop-2.6.0-cdh5.8.2/bin/hdfs dfs -ls /

Java SDK 訪問 HDFS

Active NameNode: 192.168.1.1
Kerberos KDC Server: 192.168.1.1
DFSClient: 192.168.1.18
Cloudera Version: 5.8.2

在 Kerberos KDC Server 的操作

以 kadmin 的身份進(jìn)行認(rèn)證,創(chuàng)建測試 principal:

kinit cdh-master/admin@DOMAIN.COM # 該管理員 principal 是上一篇定義的
kadmin
> addprinc -randkey hdfs/test@DOMAIN.COM # 使用隨機(jī)密碼新建 principal
> xst -k /tmp/hdfs_test.keytab hdfs/test@DOMAIN.COM # 導(dǎo)出 keytab 文件

kinit -kt /tmp/hdfs_test.keytab hdfs/test@DOMAIN.COM # 驗(yàn)證 keytab 文件是否可用
kdestroy # 銷毀本地 ticket 緩存

在 DFSClient端的操作

在 DFSClient 192.168.1.18 上部署 Kerberos 客戶端:

sudo yum install krb5-devel krb5-workstation -y

JDK 1.8.0 安裝客冈,這塊網(wǎng)上有很多教程试溯,不復(fù)述。

將 Kerberos 服務(wù)端的配置文件拷貝至 DFSClient:

sudo scp 192.168.1.1:/etc/krb5.conf /etc/

為了支持java的aes256-cts算法郊酒,將JCE包解壓到${JAVA_HOME}/jre/lib/security目錄下:

wget http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip
unzip jce_policy-8.zip
sudo cp UnlimitedJCEPolicyJDK8/*.jar $JAVA_HOME/jdk1.8.0/jre/lib/security

拷貝 keytab 文件至本地,假設(shè)存放在 /tmp/keytab/ 下键袱。

以下為測試用的 Java 代碼TeastKerberosHDFS.java燎窘,假設(shè) 192.168.1.3 為 Active NameNode,當(dāng)然也可以走 NameService 進(jìn)行訪問:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.security.SecurityUtil;
import org.apache.hadoop.security.UserGroupInformation;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
public class TestKerberosHDFS {
    public static final String KEYTAB_FILE_KEY = "hdfs.keytab.file";
    public static final String USER_NAME_KEY = "hdfs.kerberos.principal";
    public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
        conf.set(KEYTAB_FILE_KEY, "/tmp/keytab/hdfs_test.keytab");
        conf.set(USER_NAME_KEY, "hdfs/test@DOMAIN.COM");
        if (UserGroupInformation.isSecurityEnabled()) {
            SecurityUtil.login(conf, KEYTAB_FILE_KEY, USER_NAME_KEY);
        }
         
        System.out.println(loadHdfsFile("/user/admin/hosts_hed_new/part-m-00000", conf));
    }
    public static List<String> loadHdfsFile(String filePath, Configuration conf) {
        List<String> resultList = new ArrayList<String>();
        FileSystem fileSystem = null;
        try {
            URI uri = new URI("hdfs://192.168.1.3:8020");
            fileSystem = FileSystem.get(uri, conf);
            FSDataInputStream fs = fileSystem.open(new Path(filePath));
            BufferedReader bis = new BufferedReader(new InputStreamReader(fs, "UTF-8"));
            String line;
            while ((line = bis.readLine()) != null) {
                resultList.add(line);
            }
            fileSystem.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultList;
    }
}

進(jìn)行編譯蹄咖,生成 jar 包褐健,命名為 TestKerberosHDFS.jar。

拷貝HDFS集群的配置文件到 192.168.1.18 這臺 DFSClient 上:

scp 192.168.1.3:/etc/hadoop/conf/* /etc/hadoop/conf/

使用 Hadoop 的 RunJar 命令啟動(dòng) TestKerberosHDFS.jar 工程 :

java -classpath \
/etc/hadoop/conf:/home/admin/TestKerberosHDFS/lib/* \     #注明:/etc/hadoop/conf 為HDFS配置文件所在目錄;/home/admin/TestKerberosHDFS/lib/* 為RunJar命令所需的jar包蚜迅;
org.apache.hadoop.util.RunJar \                           #注明:RunJar命令的全類名
/home/admin/TeastKerberosHDFS.jar \                       #注明:測試訪問安全HDFS集群的工程jar
com.test.TestKerberosHDFS                                 #注明:測試訪問安全HDFS集群的工程jar的主類名
 
#注明:/home/admin/TestKerberosHDFS/lib/目錄下包括的jar包:
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.2.jar
commons-configuration-1.6.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
guava-11.0.2.jar
hadoop-auth-2.6.0-cdh5.8.2.jar
hadoop-common-2.6.0-cdh5.8.2.jar
hadoop-hdfs-2.6.0-cdh5.8.2.jar
htrace-core-3.2.0-incubating.jar
htrace-core4-4.0.1-incubating.jar
log4j-1.2.17.jar
protobuf-java-2.5.0.jar
servlet-api-3.0.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舵匾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谁不,更是在濱河造成了極大的恐慌坐梯,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刹帕,死亡現(xiàn)場離奇詭異吵血,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)偷溺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門蹋辅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挫掏,你說我怎么就攤上這事侦另。” “怎么了尉共?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵褒傅,是天一觀的道長。 經(jīng)常有香客問我爸邢,道長樊卓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任杠河,我火速辦了婚禮碌尔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘券敌。我一直安慰自己唾戚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布待诅。 她就那樣靜靜地躺著叹坦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卑雁。 梳的紋絲不亂的頭發(fā)上募书,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音测蹲,去河邊找鬼莹捡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扣甲,可吹牛的內(nèi)容都是我干的篮赢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼启泣!你這毒婦竟也來了涣脚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤寥茫,失蹤者是張志新(化名)和其女友劉穎遣蚀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坠敷,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妙同,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膝迎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粥帚。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖限次,靈堂內(nèi)的尸體忽然破棺而出芒涡,到底是詐尸還是另有隱情,我是刑警寧澤卖漫,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布费尽,位于F島的核電站,受9級特大地震影響羊始,放射性物質(zhì)發(fā)生泄漏旱幼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一突委、第九天 我趴在偏房一處隱蔽的房頂上張望柏卤。 院中可真熱鬧,春花似錦匀油、人聲如沸缘缚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桥滨。三九已至,卻和暖如春弛车,著一層夾襖步出監(jiān)牢的瞬間齐媒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工纷跛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喻括,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓忽舟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子叮阅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容