本文旨在展示CDH基于Kerberos身份認證和基于Sentry的權限控制功能的測試示例。
1. 準備測試資料
1 2 3 4 5 6 | |
2. 建立使用者
2.1. 建立系統使用者
在叢集所有節點建立系統使用者并設定密碼
1 2 3 4 5 6 | |
2.2. 建立kerberos使用者
1 2 3 | |
3. 建立資料庫和表
3.1. 建立資料庫
admin為sentry的超級管理者,該使用者配置權限時已設定
1 | |
通過beeline連接配接 hiveserver2,運作下面指令建立hive庫的超級管理者角色, 并将該角色賦予admin組,使admin有操作hive庫的權力
1 2 3 4 | |
建立兩個測試資料庫
1 2 | |
3.2. 建立表
在兩個測試資料庫中各建立一張測試表,并導入測試資料
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
4. 賦予使用者權限
4.1. 給user1賦予db1的所有權限
1 2 3 | |
4.2. 給user2賦予db2的所有權限
1 2 3 | |
4.3. 給user3賦予db2.table1的所有權限
1 2 3 4 | |
5. 測試使用者權限
5.1. Hive測試
5.1.1. admin使用者擁有整個hive庫的權限
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
5.1.3. user2使用者隻具有db2和default的權限
1 2 3 4 5 6 7 8 9 | |
5.1.4. user3使用者隻具有db2.table1和default的權限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
5.2. Hdfs測試
配置hdfs acl與sentry同步後,hdfs權限與sentry監控的目錄(/user/hive/warehouse)的權限同步
5.2.1. 切換到hive使用者,檢視hive庫檔案的權限
設定hdfs acl與sentry同步後,sentry監控的hive庫的權限改動會同步到對應的hdfs檔案權限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | |
5.2.2. 切換到user1使用者,檢視hdfs檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
5.2.3. 切換到user2使用者,檢視hdfs檔案
1 2 3 4 5 6 7 8 9 10 | |
5.3. Spark測試
5.3.1. Spark讀hive表資料并列印到控制台
(1) 切換到user1使用者測試
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
(2) 切換到user2使用者測試
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
5.3.2. Spark讀檔案資料寫入hive表中
調用工具程式spark.jar讀本地檔案/home/xdf/events.csv資料寫到db2.table2
切換到user2使用者測試
1 2 3 4 5 6 7 | |
成功!
寫到db1.table1報錯,沒有權限!
1 | |
上面隻是測試環境,因為kinit + 密碼的方式有時效限制,不适合在生産環境運作,幸好spark提供了相關的參數:
1 2 3 4 | |
spark的權限管理通過對hdfs/hive的檔案目錄設定權限來管理,不同的使用者擁有不同的權限,使用者在送出spark任務時,指定對應使用者的kerberos principle和keytab來實作權限管理。任務送出指令如下:
1 | |
其中--principal 和--keytab與使用者一一對應
注意:spark-submit隻有在yarn-cluster模式下,--principal 和--keytab才有效
5.4. Kafka測試
5.4.1. 認證
使用者kafka為kafka權限控制的超級管理者
1 | |
5.4.2. 建立topic
建立topic1和topic2
1 2 | |
5.4.3. 賦權
給user1使用者附topic1的讀寫權限
1 2 | |
給user2使用者附topic2的讀寫權限
1 2 | |
5.4.4. 檢視權限
1 2 3 4 5 6 7 | |
5.4.5. 建立生産消費配置檔案
建立consumer.properties
1 2 3 4 5 | |
建立producer.properties
1 2 3 4 | |
5.4.6. 生産資料
指令行生産資料
1 2 3 4 | |
5.4.7. 消費資料
指令行消費資料
1 2 3 4 | |
使用者對topic沒有權限時報錯
1 2 3 4 5 | |
5.4.8. 移除權限
登陸管理者使用者移除權限
1 | |
删除user1對topic1的消費權限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
測試user1消費topic1報錯,說明權限已經移除
1 2 3 4 5 6 7 8 9 10 11 12 | |