數(shù)據(jù)倉庫安全框架Sentry調(diào)研

? CDH版本的Hadoop在對(duì)數(shù)據(jù)安全上的處理通常采用Kerberos+Sentry的結(jié)構(gòu)低飒。其中,Kerberos主要負(fù)責(zé)平臺(tái)用戶的權(quán)限管理,Sentry則負(fù)責(zé)數(shù)據(jù)的權(quán)限管理。同時(shí)战坤,可以集成LDAP,用于管理賬號(hào)残拐。這里著重探討Sentry的原理,使用及存在的問題碟嘴。

一.Sentry概述

1.Sentry 介紹

? Apache Sentry是Cloudera公司發(fā)布的一個(gè)Hadoop開源組件溪食,它提供了細(xì)粒度級(jí)、基于角色的授權(quán)以及多租戶的管理模式娜扇。Sentry當(dāng)前可以與ApacheHive错沃,HiveMetastore / HCatalog,Apache Solr雀瓢,Impala和HDFS(僅限于Hive表數(shù)據(jù))一起使用枢析。

? Sentry旨在成為Hadoop組件的可插拔授權(quán)引擎。它允許自定義授權(quán)規(guī)則以驗(yàn)證用戶或應(yīng)用程序?qū)adoop資源的訪問請(qǐng)求刃麸。Sentry是高度模塊化的醒叁,可以支持Hadoop中各種數(shù)據(jù)模型的授權(quán)。

2.Sentry 特性

  1. 安全授權(quán):Sentry可以控制數(shù)據(jù)訪問,并對(duì)已通過驗(yàn)證的用戶提供數(shù)據(jù)訪問特權(quán)把沼。

  2. 細(xì)粒度訪問控制:Sentry支持細(xì)粒度的Hadoop數(shù)據(jù)和元數(shù)據(jù)訪問控制啊易。在Hive和Impala中Sentry的最初發(fā)行版本中,Sentry在服務(wù)器饮睬、數(shù)據(jù)庫租谈、表和視圖范圍提供了不同特權(quán)級(jí)別的訪問控制,包括查找捆愁、插入等割去,允許管理員使用視圖限制對(duì)行或列的訪問。管理員也可以通過Sentry和帶選擇語句的視圖或UDF昼丑,根據(jù)需要在文件內(nèi)屏蔽數(shù)據(jù)呻逆。

  3. 基于角色的管理:Sentry通過基于角色的授權(quán)簡(jiǎn)化了管理,你可以輕易將訪問同一數(shù)據(jù)集的不同特權(quán)級(jí)別授予多個(gè)組矾克。

  4. 多租戶管理:Sentry允許為委派給不同管理員的不同數(shù)據(jù)集設(shè)置權(quán)限页慷。在Hive/Impala的情況下,Sentry可以在數(shù)據(jù)庫/schema級(jí)別進(jìn)行權(quán)限管理胁附。

  5. 統(tǒng)一平臺(tái):Sentry為確保數(shù)據(jù)安全酒繁,提供了一個(gè)統(tǒng)一平臺(tái),使用現(xiàn)有的Hadoop Kerberos實(shí)現(xiàn)安全認(rèn)證控妻。同時(shí)州袒,通過Hive或Impala訪問數(shù)據(jù)時(shí)可以使用同樣的Sentry協(xié)議。未來弓候,Sentry協(xié)議會(huì)被擴(kuò)展到其它組件郎哭。

    Sentry工作原理

3.Sentry工作原理

? Apache Sentry的目標(biāo)是實(shí)現(xiàn)授權(quán)管理,它是一個(gè)策略引擎菇存,被數(shù)據(jù)處理工具用來驗(yàn)證訪問權(quán)限夸研。它也是一個(gè)高度擴(kuò)展的模塊,可以支持任何的數(shù)據(jù)模型依鸥。當(dāng)前亥至,它支持Apache Hive和Cloudera Impala的關(guān)系數(shù)據(jù)模型,以及Apache中的有繼承關(guān)系的數(shù)據(jù)模型贱迟。

? Sentry提供了定義和持久化訪問資源的策略的方法姐扮。目前,這些策略可以存儲(chǔ)在文件里或者是能使用RPC服務(wù)訪問的數(shù)據(jù)庫后端存儲(chǔ)里衣吠。數(shù)據(jù)訪問工具茶敏,例如Hive,以一定的模式辨認(rèn)用戶訪問數(shù)據(jù)的請(qǐng)求缚俏,例如從一個(gè)表讀一行數(shù)據(jù)或者刪除一個(gè)表惊搏。這個(gè)工具請(qǐng)求Sentry驗(yàn)證訪問是否合理贮乳。Sentry構(gòu)建請(qǐng)求用戶被允許的權(quán)限的映射并判斷給定的請(qǐng)求是否允許訪問。請(qǐng)求工具這時(shí)候根據(jù)Sentry的判斷結(jié)果來允許或者禁止用戶的訪問請(qǐng)求胀屿。

Sentry授權(quán)包括以下幾種角色:

  1. 資源塘揣。可能是Server宿崭、Database亲铡、Table、或者URL(例如:HDFS或者本地路徑)葡兑。Sentry1.5中支持對(duì)列進(jìn)行授權(quán)奖蔓。

  2. 權(quán)限。授權(quán)訪問某一個(gè)資源的規(guī)則讹堤。

  3. 角色吆鹤。角色是一系列權(quán)限的集合。

  4. 用戶和組洲守。一個(gè)組是一系列用戶的集合疑务。Sentry 的組映射是可以擴(kuò)展的。默認(rèn)情況下梗醇,sentry使用Hadoop的組映射(可以是操作系統(tǒng)組或者LDAP中的組`)知允。Sentry允許你將用戶和組進(jìn)行關(guān)聯(lián),你可以將一系列的用戶放入到一個(gè)組中叙谨。Sentry不能直接給一個(gè)用戶或組授權(quán)温鸽,需要將權(quán)限授權(quán)給角色,角色可以授權(quán)給一個(gè)組而不是一個(gè)用戶手负。

Sentry架構(gòu)如下:

arch.png

? Sentry的體系結(jié)構(gòu)中有三個(gè)重要的組件:一是Binding涤垫;二是Policy Engine;三是Policy Provider竟终。

Binding

? Binding實(shí)現(xiàn)了對(duì)不同的查詢引擎授權(quán)蝠猬,Sentry將自己的Hook函數(shù)插入到各SQL引擎的編譯、執(zhí)行的不同階段统捶。這些Hook函數(shù)起兩大作用:

  1. 一是起過濾器的作用吱雏,只放行具有相應(yīng)數(shù)據(jù)對(duì)象訪問權(quán)限的SQL查詢;

  2. 二是起授權(quán)接管的作用瘾境,使用了Sentry之后,grant/revoke管理的權(quán)限完全被Sentry接管镰惦,grant/revoke的執(zhí)行也完全在Sentry中實(shí)現(xiàn)迷守;

    對(duì)于所有引擎的授權(quán)信息也存儲(chǔ)在由Sentry設(shè)定的統(tǒng)一的數(shù)據(jù)庫中。這樣所有引擎的權(quán)限就實(shí)現(xiàn)了集中管理旺入。

Policy Engine

? 這是Sentry授權(quán)的核心組件兑凿。Policy Engine判定從binding層獲取的輸入的權(quán)限要求與服務(wù)提供層已保存的權(quán)限描述是否匹配凯力。

Policy Provider

? Policy Provider負(fù)責(zé)從文件或者數(shù)據(jù)庫中讀取出原先設(shè)定的訪問權(quán)限。Policy Engine以及Policy Provider其實(shí)對(duì)于任何授權(quán)體系來說都是必須的礼华,因此是公共模塊咐鹤,后續(xù)還可服務(wù)于別的查詢引擎。

二.Sentry安裝使用

? 在CDH未啟用認(rèn)證(Kerberos/LDAP)的情況下圣絮,安裝祈惶、配置及使用Sentry. 在實(shí)際生產(chǎn)環(huán)境中,如果啟用授權(quán)(Sentry)扮匠,必須先啟用認(rèn)證捧请。但在CDH平臺(tái)給出了一種測(cè)試模式,即不啟用認(rèn)證而只啟用Sentry授權(quán)棒搜。但強(qiáng)烈不建議在生產(chǎn)系統(tǒng)中這樣使用疹蛉,因?yàn)槿绻麤]有用戶認(rèn)證,授權(quán)沒有任何意義形同虛設(shè)力麸,用戶可以隨意使用任何超級(jí)用戶登錄HiveServer2或者Impala可款,并不會(huì)做密碼校驗(yàn)。

1.測(cè)試環(huán)境

操作系統(tǒng)為CentOS7.2

CDH版本5.7.4

采用root用戶操作

集群未啟用認(rèn)證服務(wù)(如Kerberos或LDAP)

Sentry版本1.5.0

2.安裝說明

1.在MySQL中創(chuàng)建sentry數(shù)據(jù)庫

建表語句:

create database sentry default character set utf8;

CREATE USER 'sentry'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON sentry. * TO 'sentry'@'%';

FLUSH PRIVILEGES;

2.進(jìn)入Cloudera Manager控制臺(tái)點(diǎn)擊“添加服務(wù)”

add.jpeg

3.進(jìn)入服務(wù)添加界面,選擇Sentry服務(wù)克蚂,點(diǎn)擊“繼續(xù)”

service_add.jpeg

4.選擇Sentry Server及Gateway的安裝節(jié)點(diǎn)闺鲸,點(diǎn)擊“繼續(xù)“,注意需提前在MySQL中建立好相關(guān)用戶和數(shù)據(jù)庫

server_add.jpeg

6.輸入Sentry服務(wù)的數(shù)據(jù)庫信息陨舱,點(diǎn)擊測(cè)試翠拣,測(cè)試通過,點(diǎn)擊“繼續(xù)”

mysql.jpeg

7.等待服務(wù)安裝成功游盲,點(diǎn)擊“繼續(xù)”

success.jpeg

8.點(diǎn)擊“完成”误墓,Sentry服務(wù)到此安裝完成。

3.配置說明

3.1 Hive配置

1.配置Hive使用Sentry服務(wù)

hive1.jpeg

2.關(guān)閉Hive的用戶模擬功能

hive2.jpeg

3.集群未啟用安全認(rèn)證環(huán)境下益缎,需要配置以下參數(shù)

hive3.jpeg

3.2 HUE配置

配置Hue與Sentry集成

hue.jpeg

3.3 HDFS配置

配置HDFS開啟ACLs與Sentry權(quán)限同步

hdfs.jpeg

完成以上配置后谜慌,回到Cloudera Manager主頁,重啟Hive,Hdfs,Hue等相關(guān)服務(wù)莺奔。

4.使用說明

1)使用超級(jí)用戶登錄Hue欣范,創(chuàng)建hive用戶,并賦予超級(jí)用戶權(quán)限令哟。

2)使用beeline登錄hive用戶恼琼,創(chuàng)建一個(gè)test表,并插入測(cè)試數(shù)據(jù)屏富。

create table test (s1 string, s2 string) row format delimited fields terminated by ',';
insert into test values('a','b'),('1','2')

3)創(chuàng)建測(cè)試角色并授權(quán)給用戶組

在Hive集群所在的各個(gè)節(jié)點(diǎn)創(chuàng)建角色:

[root@hadoop1]# useradd reader_cmd

[root@hadoop1~]# passwd reader_cmd

[root@hadoop1]# useradd writer_cmd

[root@hadoop1]# passwd writer_cmd 

4)用Sentry管理員用戶hive通過beeline客戶端連接HiveServer2

[root@hadoop1 /opt/cloudera/parcels/CDH-5.7.4-1.cdh5.7.4.p0.2/lib/hive/bin]# ./beeline 
beeline> !connect jdbc:hive2://hadoop1:10000
scan complete in 2ms
Connecting to jdbc:hive2://hadoop1:10000
Enter username for jdbc:hive2://hadoop1:10000: hive
Enter password for jdbc:hive2://hadoop1:10000: 
Connected to: Apache Hive (version 1.1.0-cdh5.7.4)
Driver: Hive JDBC (version 1.1.0-cdh5.7.4)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hadoop1:10000> show roles;

5)使用hive用戶創(chuàng)建創(chuàng)建read和write角色晴竞,并授權(quán)read角色對(duì)test表select權(quán)限,write角色對(duì)test表insert權(quán)限

create role read;
grant select on table test to role read;
create role write;
grant insert on table test to role write;

6)為reader用戶組授權(quán)read角色狠半,為writer用戶組授權(quán)write角色

grant role read to group reader;
grant role write to group  writer;

7)beeline驗(yàn)證

使用reader用戶登錄beeline驗(yàn)證噩死,只可查詢test表數(shù)據(jù)颤难,但不可插入數(shù)據(jù),或更改表結(jié)構(gòu)等已维。

使用writer用戶登錄beeline驗(yàn)證,只可插入數(shù)據(jù)到test表中行嗤,但不可查詢表數(shù)據(jù)。

同時(shí)也可對(duì)hdfs文件進(jìn)行讀寫測(cè)試垛耳,這里僅針對(duì)test表數(shù)據(jù)文件權(quán)限有效栅屏。

上述測(cè)試過程中,writer寫入數(shù)據(jù)過程中報(bào)無查詢權(quán)限異常艾扮,尚未確定問題所在既琴。

三.總結(jié)

? 1.建議線上環(huán)境,配置Kerberos認(rèn)證之后泡嘴,再添加數(shù)據(jù)權(quán)限管理Sentry甫恩。

? 2.Sentry可以實(shí)現(xiàn)數(shù)倉表及數(shù)據(jù)的安全管理。針對(duì)不同用戶組酌予,賦予不同權(quán)限角色磺箕。

?

參考文檔:

Sentry官網(wǎng):http://sentry.apache.org/

CM官網(wǎng):https://docs.cloudera.com/documentation/enterprise/5-7-x/topics/sg_sentry_service_install.html

測(cè)試使用案例:https://cloud.tencent.com/developer/article/1077868

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市抛虫,隨后出現(xiàn)的幾起案子松靡,更是在濱河造成了極大的恐慌,老刑警劉巖建椰,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雕欺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡棉姐,警方通過查閱死者的電腦和手機(jī)屠列,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伞矩,“玉大人笛洛,你說我怎么就攤上這事∧死ぃ” “怎么了苛让?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)湿诊。 經(jīng)常有香客問我狱杰,道長(zhǎng),這世上最難降的妖魔是什么厅须? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任浦旱,我火速辦了婚禮,結(jié)果婚禮上九杂,老公的妹妹穿的比我還像新娘颁湖。我一直安慰自己,他們只是感情好例隆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布甥捺。 她就那樣靜靜地躺著,像睡著了一般镀层。 火紅的嫁衣襯著肌膚如雪镰禾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天唱逢,我揣著相機(jī)與錄音吴侦,去河邊找鬼。 笑死坞古,一個(gè)胖子當(dāng)著我的面吹牛备韧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痪枫,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼织堂,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了奶陈?” 一聲冷哼從身側(cè)響起易阳,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吃粒,沒想到半個(gè)月后潦俺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡徐勃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年事示,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疏旨。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡很魂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出檐涝,到底是詐尸還是另有隱情遏匆,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布谁榜,位于F島的核電站幅聘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏窃植。R本人自食惡果不足惜帝蒿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巷怜。 院中可真熱鬧葛超,春花似錦暴氏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至侥涵,卻和暖如春沼撕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芜飘。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工务豺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嗦明。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓笼沥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親招狸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敬拓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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