? 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 特性
安全授權(quán)
:Sentry可以控制數(shù)據(jù)訪問,并對(duì)已通過驗(yàn)證的用戶提供數(shù)據(jù)訪問特權(quán)把沼。細(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ù)呻逆。基于角色的管理
:Sentry通過基于角色的授權(quán)簡(jiǎn)化了管理,你可以輕易將訪問同一數(shù)據(jù)集的不同特權(quán)級(jí)別授予多個(gè)組矾克。多租戶管理
:Sentry允許為委派給不同管理員的不同數(shù)據(jù)集設(shè)置權(quán)限页慷。在Hive/Impala的情況下,Sentry可以在數(shù)據(jù)庫/schema級(jí)別進(jìn)行權(quán)限管理胁附。-
統(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)包括以下幾種角色:
資源
塘揣。可能是Server宿崭、Database亲铡、Table、或者URL(例如:HDFS或者本地路徑)葡兑。Sentry1.5中支持對(duì)列進(jìn)行授權(quán)奖蔓。權(quán)限
。授權(quán)訪問某一個(gè)資源的規(guī)則讹堤。角色
吆鹤。角色是一系列權(quán)限的集合。用戶和組
洲守。一個(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)如下:
? 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ù)起兩大作用:
一是起過濾器的作用吱雏,只放行具有相應(yīng)數(shù)據(jù)對(duì)象訪問權(quán)限的SQL查詢;
-
二是起授權(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ù)”
3.進(jìn)入服務(wù)添加界面,選擇Sentry服務(wù)克蚂,點(diǎn)擊“繼續(xù)”
4.選擇Sentry Server及Gateway的安裝節(jié)點(diǎn)闺鲸,點(diǎn)擊“繼續(xù)“,注意需提前在MySQL中建立好相關(guān)用戶和數(shù)據(jù)庫
6.輸入Sentry服務(wù)的數(shù)據(jù)庫信息陨舱,點(diǎn)擊測(cè)試翠拣,測(cè)試通過,點(diǎn)擊“繼續(xù)”
7.等待服務(wù)安裝成功游盲,點(diǎn)擊“繼續(xù)”
8.點(diǎn)擊“完成”误墓,Sentry服務(wù)到此安裝完成。
3.配置說明
3.1 Hive配置
1.配置Hive使用Sentry服務(wù)
2.關(guān)閉Hive的用戶模擬功能
3.集群未啟用安全認(rèn)證環(huán)境下益缎,需要配置以下參數(shù)
3.2 HUE配置
配置Hue與Sentry集成
3.3 HDFS配置
配置HDFS開啟ACLs與Sentry權(quán)限同步
完成以上配置后谜慌,回到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