Sentry初識
Sentry是適用于Hadoop生態(tài)環(huán)境、基于角色的授權(quán)管理系統(tǒng)蹋艺,可以模塊化集成到HDFS、Hive黄刚、Impala捎谨。它是一個策略引擎,運行定義授權(quán)規(guī)則憔维,以校驗用戶對數(shù)據(jù)模型的訪問請求涛救。
授權(quán)粒度
? ? Sentry數(shù)據(jù)訪問授權(quán)的實現(xiàn)依賴于授權(quán)對象和操作,授權(quán)對象定義要受授權(quán)規(guī)則約束的對象业扒,可以是服務(wù)器(server)检吆、數(shù)據(jù)庫、表程储、視圖甚至是列蹭沛;操作定義運行的操作粒度,包括查找(select)章鲤、刪除(delete)摊灭、創(chuàng)建(create)等。授權(quán)對象和操作級別的組合模式提供了不同特權(quán)級別的訪問控制败徊。
????在某些場景下帚呼,管理員可以使用視圖的方式限制對行或列的訪問,能一定程度上減少權(quán)限設(shè)置的工作量集嵌。
Role
????角色是一個權(quán)限集合萝挤,定義授權(quán)規(guī)則的基本單位。角色的概念允許將多個授權(quán)規(guī)則集合到一起根欧,然后再把權(quán)限相同的用戶分到一個角色里怜珍,很方便后續(xù)權(quán)限管理維護。比如不同業(yè)務(wù)的人員訪問不同的業(yè)務(wù)表凤粗,可以建多個角色酥泛,再給角色賦予相對應(yīng)的業(yè)務(wù)表訪問權(quán)限今豆,如果這類用戶要修改權(quán)限,只需對角色進行權(quán)限更改柔袁。
Group
????組是一個用戶集合呆躲,默認(rèn)情況下Sentry使用Hadoop中配置的組映射機制(比如使用OS的用戶組),Sentry使用Hadoop配置的組映射機制捶索,以確保Sentry看到組映射和Hadoop生態(tài)系統(tǒng)中其他組件看到的相同插掂。把一個Group加到多個Role里,這樣就給用戶分配到了權(quán)限腥例,可以將多個用戶分到一個組里辅甥。組的概念進一步降低了權(quán)限管理的復(fù)雜度。
授權(quán)一般操作
????1燎竖、創(chuàng)建角色
????2璃弄、給角色賦權(quán)限
????3、用戶所屬組加入到授權(quán)實體(角色)
Sentry與Hive构回、Impala夏块、Hue集成
? ? Hive、Impala等集成Sentry后可以提高數(shù)據(jù)訪問的安全性纤掸、限制用戶訪問特定資源脐供。
? ??如果Hadoop集群是用Cloudera Manager管理的,安裝Sentry就特別簡便茁肠,在cm上next患民、next就可以了,安裝后和Hive垦梆、Impala匹颤、Hue的集成也很簡單,只需要在對應(yīng)的組件配置界面上勾選上sentry就可以了托猩,比如:
如果Hive集成了Sentry印蓖,會強制啟用數(shù)據(jù)庫中的存儲通知設(shè)置,開啟這個配置后京腥,對一個表進行大并發(fā)DDL操作(比如刪除分區(qū)赦肃、增加分區(qū)等)時可能導(dǎo)致Hive Metastore超時。
????通過hive管理Sentry:hive和Sentry集成后公浪,可在beeline通過命令管理Sentry權(quán)限他宛,需要注意的是Hive Cli不支持Sentry管理。賦權(quán)用GRANT語句欠气,權(quán)限回收用REVOKE語句厅各。如前所述,權(quán)限對象包括服務(wù)(SERVER)预柒、數(shù)據(jù)庫(DATABASE)队塘、表(TABLE)袁梗,權(quán)限操作包括:ALL、SELECT憔古、UPDATE遮怜。
賦權(quán)例子:
創(chuàng)建角色:CREATE ROLE <role name>
? ? 組分配角色:GRANT ROLE <role name> TO GROUP <group name>
????服務(wù)級賦權(quán):GRANT <ALL|SELECT|UPDATE> ON SERVER <server name> TO ROLE <role name>
????數(shù)據(jù)庫賦權(quán):GRANT <ALL|SELECT|UPDATE> ON DATABASE <database name> TO ROLE <role name>
????表賦權(quán):GRANT <ALL|SELECT|UPDATE> ON <database name>.<table name> TO ROLE <role name>
權(quán)限回收例子:
?回收數(shù)據(jù)庫權(quán)限:REVOKE <ALL|SELECT|UPDATE> ON DATABASE <database name> FROM ROLE <role name>
查看某個角色的權(quán)限:SHOW GRANT ROLE <role name>
????Sentry集成到Hue的好處:在beeline管理sentry權(quán)限不夠值觀,要輸入命令鸿市,而Hue上是以圖形化實現(xiàn)等價操作锯梁,包括創(chuàng)建role、配置role的權(quán)限策略焰情、給group分配role等涝桅。具體的在hue上的相關(guān)操作比較簡單,不再贅述烙样。
????需要注意的是配置管理sentry權(quán)限的用戶,要有所有表的訪問權(quán)限蕊肥,否則看到的數(shù)據(jù)庫谒获、表不完全。
? ? Hadoop用戶壁却、用戶組和Hue用戶批狱、用戶組以及Sentry角色的關(guān)系:
????如前所述,Sentry使用Hadoop用戶組策略展东,而Hadoop默認(rèn)是OS用戶組赔硫,Hue和Sentry集成后,就要求用戶組同時在Hue和OS里都要創(chuàng)建盐肃。
Hue權(quán)限初識
Hue權(quán)限總體上可以分為兩類:一類是功能權(quán)限爪膊、一類是數(shù)據(jù)權(quán)限。
????功能權(quán)限是對Hue上一系列功能使用的授權(quán)砸王,比如用戶登陸Hue推盛、使用Hive引擎、使用Impala引擎以及管理用戶等功能性權(quán)限谦铃;數(shù)據(jù)權(quán)限的粒度是數(shù)據(jù)級別的耘成,就是對數(shù)據(jù)庫、數(shù)據(jù)表的訪問權(quán)限驹闰,甚至是字段的訪問權(quán)限瘪菌,數(shù)據(jù)權(quán)限控制用戶能看到哪些對象,對避免信息泄露嘹朗、提高數(shù)據(jù)安全性是非常有用的师妙。
? ? 管理Hue的功能權(quán)限相對較簡單,過程是先創(chuàng)建用戶骡显、用戶組疆栏,創(chuàng)建后的用戶默認(rèn)就有了登錄Hue的權(quán)限曾掂,而用戶組是基本的權(quán)限管理單位。把用戶分到用戶組壁顶,最后再給用戶組賦予特定的權(quán)限珠洗,這樣用戶就有了分配后的權(quán)限。一個企業(yè)一般都有統(tǒng)一的LDAP認(rèn)證體系若专,Hue也可以集成LDAP许蓖,這樣避免用戶創(chuàng)建、密碼管理等維護成本调衰,下面會有相信闡述膊爪。
????Hue沒有數(shù)據(jù)授權(quán)的功能,但可以依賴Sentry實現(xiàn)嚎莉,和Sentry的集成是這篇文章的主要內(nèi)容米酬,在談Sentry前先聊下Hue集成LDAP,這可讓我們從用戶管理這塊解脫出來趋箩。
Hue集成LDAP
如前所述赃额,通過與LDAP集成,用戶可以使用LDAP目錄中存儲的現(xiàn)有憑證登錄Hue叫确,將 Hue與LDAP集成后跳芳,無需在Hue中獨立管理用戶信息。
下面演示集成步驟:
1竹勉、身份驗選擇證LDAP飞盆,啟用ldap身份驗證
?2、并配置LDAP Server url次乓。ldaps://開頭的url對用戶名吓歇、密碼以加密形式傳輸,ldap://是以明文形式傳輸
3檬输、配置搜索綁定機制照瘾,設(shè)置search_bind_authentication以啟用搜索綁定;
查找用戶和組的搜索庫的專有名稱通過base_dn配置設(shè)置進行定義丧慈。
????還有一種是使用直接綁定機制析命,使用直接綁定時,必須使用精確的nt_domain 或ldap_username_pattern進行身份驗證逃默。使用直接綁定時鹃愤,如果定義了 nt 域 (通過 nt_domain 配置設(shè)置進行定義) 屬性,則使用以下形式創(chuàng)建用戶可分辨名稱模板:<login username>@nt_domain完域。此模板用于從基本可分辨名稱開始软吐,搜索所有目錄子樹。如果未配置 nt 域吟税,則 Hue 搜索用戶的精確可分辨名稱模式 (通過 ldap_username_pattern 配置設(shè)置進行定義)凹耙。在這種情況下姿现,服務(wù)器從基本可分辨名稱開始,在所有目錄子樹中搜索匹配 ldap_username_pattern 值肖抱。
一般首選方法是搜索綁定备典,本文也是按照搜索綁定做的。
4意述、LDAP身份驗證首先綁定到服務(wù)器并建立連接提佣。隨后,建立的連接用于任何后續(xù)查詢以搜索LDAP用戶信息荤崇。配置綁定到ldap服務(wù)的信息拌屏,bind_dn:定義綁定可分辨名稱 (或 DN) ;bind_password:配置設(shè)置綁定密碼
Sentry環(huán)境測試
?一术荤、Hive
JDBC訪問帶Sentry環(huán)境的Hive倚喂,測試不同用戶對hive數(shù)據(jù)的訪問權(quán)限,實現(xiàn)見下:
如果用戶沒有訪問權(quán)限瓣戚,會報異常:
? 二务唐、Impala
JDBC訪問帶Sentry環(huán)境的impala,需要注意的是連接的url带兜,設(shè)置成AuthMech=3。
? 三吨灭、Spark SQL查詢Hive
hive引擎使用hadoop的mapReducer引擎做文件解析和查詢刚照,spark使用的是自己的sql引擎做的解析,把每個數(shù)據(jù)庫表當(dāng)成一個RDD喧兄,直接操作底層HDFS无畔。所以對于沒有集成Sentry的HDFS來說,實現(xiàn)代碼沒有任何差別吠冤。
? 四浑彰、Hive查Hbase
Hive提供了與HBase的集成,使得能夠在HBase表上使用HQL語句進行查詢 插入操作以及進行Join和Union等復(fù)雜查詢拯辙。sentry同樣也能對hive查hbase的表進行權(quán)限設(shè)置郭变,測試代碼同hive,不再贅述涯保。
本文首發(fā)于公眾號:data之道