翻譯: How-to: Enable User Authentication and Authorization in Apache HBase

原文: By Matteo Bertozzi

使用默認(rèn)的Apache HBase配置,每個(gè)人都可以讀取和寫入系統(tǒng)中所有可用的表。對(duì)于很多企業(yè)機(jī)構(gòu)來(lái)說(shuō),這種策略是不能接受的。
管理員可以設(shè)置防火墻來(lái)決定哪些機(jī)器允許與HBase通信。但是,能夠通過(guò)防火墻的機(jī)器仍然允許讀寫所有表。這種機(jī)制是有效的,但還不夠,因?yàn)镠Base仍然不能區(qū)分使用相同客戶機(jī)的多個(gè)用戶,而且對(duì)于HBase表、列簇或列限定符(column qualifier)訪問(wèn)仍然沒(méi)有粒度。
在這篇文章中,我們將討論如何將Kerberos與Hadoop和HBase一起使用來(lái)提供用戶身份驗(yàn)證,以及HBase如何實(shí)現(xiàn)用戶授權(quán)以授予用戶對(duì)特定數(shù)據(jù)集的特定操作的權(quán)限。

Secure HBase:身份驗(yàn)證和授權(quán)

安全的HBase旨在防止嗅探器、未經(jīng)身份驗(yàn)證/未經(jīng)授權(quán)的用戶和基于網(wǎng)絡(luò)的攻擊。它不能防止意外情況下,有權(quán)限的用戶刪除所有數(shù)據(jù)。
使用HBase配置能為用戶提供身份驗(yàn)證,這確保只有經(jīng)過(guò)授權(quán)的用戶才能與HBase通信。授權(quán)系統(tǒng)是在RPC級(jí)別實(shí)現(xiàn)的,并且基于簡(jiǎn)單身份驗(yàn)證和安全層(SASL),該層支持Kerberos(以及其他身份驗(yàn)證機(jī)制)。SASL允許在每個(gè)連接的基礎(chǔ)上進(jìn)行身份驗(yàn)證、加密協(xié)商和/或消息完整性驗(yàn)證。(“hbase.rpc.protection” 配置屬性)。
啟用用戶身份驗(yàn)證后的下一步是讓管理員能夠定義一系列允許或拒絕特定操作的用戶授權(quán)規(guī)則。授權(quán)系統(tǒng),也稱為訪問(wèn)控制器協(xié)處理器或訪問(wèn)控制列表(ACL),從HBase 0.92 (CDH4)開(kāi)始可用,并提供了為指定用戶定義授權(quán)策略(讀/寫/創(chuàng)建/管理)的能力,表/族/限定符粒度。

Kerberos

Kerberos是一種網(wǎng)絡(luò)化的身份驗(yàn)證協(xié)議。它旨在通過(guò)使用秘鑰加密為客戶機(jī)/服務(wù)器應(yīng)用程序提供強(qiáng)大的身份驗(yàn)證。Kerberos協(xié)議使用強(qiáng)大的加密技術(shù)(AES、3DES、……),因此客戶機(jī)可以跨不安全的網(wǎng)絡(luò)連接向服務(wù)器證明自己的身份(反之亦然)。在客戶機(jī)和服務(wù)器使用Kerberos證明其身份之后,它們還可以對(duì)所有通信進(jìn)行加密,以確保在進(jìn)行業(yè)務(wù)時(shí)的隱私和數(shù)據(jù)完整性。

票據(jù)交換協(xié)議

在高層次上,要使用Kerberos訪問(wèn)服務(wù),每個(gè)客戶端必須遵循三個(gè)步驟:

  • Kerberos身份驗(yàn)證:客戶機(jī)向Kerberos身份驗(yàn)證服務(wù)器驗(yàn)證自身,并接收票據(jù)授予票據(jù)(TGT)。
  • Kerberos授權(quán):客戶端從票據(jù)授予服務(wù)器請(qǐng)求一個(gè)服務(wù)票據(jù),如果與請(qǐng)求一起發(fā)送的客戶端TGT有效,則服務(wù)器發(fā)出票據(jù)和會(huì)話密鑰。
  • 服務(wù)請(qǐng)求:客戶端使用服務(wù)票據(jù)向提供客戶端正在使用的服務(wù)(如HDFS, HBase,…)交換協(xié)議的服務(wù)器進(jìn)行身份驗(yàn)證。

HBase, HDFS, ZooKeeper SASL

由于HBase依賴于HDFS和ZooKeeper, secure HBase依賴于一個(gè)安全的HDFS和一個(gè)安全的ZooKeeper。這意味著HBase服務(wù)器需要?jiǎng)?chuàng)建一個(gè)安全服務(wù)會(huì)話,如上所述,以與HDFS和ZooKeeper通信。
HBase寫的所有文件都存儲(chǔ)在HDFS中。與Unix文件系統(tǒng)一樣,HDFS提供的訪問(wèn)控制是基于用戶、組和權(quán)限的。由HBase創(chuàng)建的所有文件都有“HBase”作為用戶,但這種訪問(wèn)控制是基于系統(tǒng)提供的用戶名,每個(gè)可以訪問(wèn)機(jī)器的人都有可能以用戶“HBase”的身份“sudo”。Secure HDFS添加了認(rèn)證步驟,以保證“hbase”用戶是可信的。
ZooKeeper在每個(gè)znode上都有一個(gè)訪問(wèn)控制列表(ACL), ACL允許基于用戶信息以類似于HDFS的方式對(duì)用戶進(jìn)行讀/寫訪問(wèn)。

HBase ACL

既然我們的用戶通過(guò)Kerberos進(jìn)行了身份驗(yàn)證,我們就可以確定收到的用戶名是我們信任的用戶之一。有時(shí)這是不夠的粒度-我們想要控制一個(gè)指定的用戶能夠讀或?qū)懕怼榇?,HBase提供了一種授權(quán)機(jī)制,允許對(duì)指定的用戶進(jìn)行受限訪問(wèn)。
要啟用此特性,必須啟用Access Controller協(xié)處理器,方法是將其添加到主服務(wù)器和區(qū)域服務(wù)器協(xié)處理器類下的hbase-site.xml。(請(qǐng)參閱如何設(shè)置HBase安全配置)。
協(xié)處理器是在每個(gè)HBase區(qū)域服務(wù)器和/或主服務(wù)器中運(yùn)行的代碼。它能夠攔截大多數(shù)操作(put, get, delete,…),并在操作執(zhí)行之前和/或之后運(yùn)行任意代碼。
使用這種能力在每個(gè)操作之前執(zhí)行一些代碼,訪問(wèn)控制器協(xié)處理器可以檢查用戶權(quán)限并決定用戶是否可以執(zhí)行操作。
HBase shell有一對(duì)命令,允許管理員管理用戶權(quán)限:

grant [table] [family] [qualifier]
revoke [table] [family] [qualifier]

如你所見(jiàn),管理員能夠基于表模式限制用戶訪問(wèn):

給User-W對(duì)Table-X/Family-Y的讀權(quán)限(grant 'User-W', 'R', 'Table-X', 'Family-Y')
給User-W對(duì)Qualifier-Z操作的讀寫權(quán)限 (grant 'User-W', 'RW', 'Table-X', 'Family-Y', 'Qualifier-Z')

管理員也有能力授予全局權(quán)限,這些權(quán)限在集群級(jí)別上操作,比如創(chuàng)建表,平衡區(qū)域,關(guān)閉集群等等:

給User-W創(chuàng)建表的權(quán)限  (grant 'User-W', 'C')
給User-W管理集群的權(quán)限 (grant 'User-W', 'A')

所有權(quán)限都存儲(chǔ)在訪問(wèn)控制器協(xié)處理器創(chuàng)建的表中,稱為acl。該表的主鍵是您在grant命令中指定的表名。acl表只有一個(gè)列族,每個(gè)限定符描述特定表/用戶的權(quán)限粒度。該值包含授予的實(shí)際權(quán)利。
正如您所看到的,HBase shell命令與數(shù)據(jù)的存儲(chǔ)方式緊密相關(guān)。grant命令添加或更新一行,revoke命令從acl表中刪除一行。

引擎蓋下的訪問(wèn)控制器

如上所述,訪問(wèn)控制器協(xié)處理器使用攔截每個(gè)用戶請(qǐng)求的能力,并檢查用戶是否有權(quán)執(zhí)行操作。
對(duì)于每個(gè)操作,訪問(wèn)控制器都需要查詢acl表,以查看用戶是否有權(quán)執(zhí)行操作。
然而,此操作可能會(huì)對(duì)性能產(chǎn)生負(fù)面影響。解決這個(gè)問(wèn)題的解決方案是使用acl表的持久性和ZooKeeper來(lái)加快權(quán)限查找。每個(gè)區(qū)域服務(wù)器在內(nèi)存中加載acl表,并獲得ZkPermissionWatcher的更改通知。通過(guò)這種方式,每個(gè)區(qū)域服務(wù)器每次都有更新的值,并且通過(guò)使用內(nèi)存映射執(zhí)行每個(gè)權(quán)限檢查。

Roadmap

雖然Kerberos是一種穩(wěn)定的、經(jīng)過(guò)良好測(cè)試和驗(yàn)證的身份驗(yàn)證系統(tǒng),但HBase ACL特性仍然非?;?,其語(yǔ)義仍在不斷發(fā)展。HBASE-6096是傘形JIRA的參考,用于在ACL特性的v2中發(fā)布的所有改進(jìn)。
關(guān)于授權(quán)和訪問(wèn)控制的另一個(gè)公開(kāi)主題是實(shí)現(xiàn)每個(gè)鍵值的安全系統(tǒng)(HBASE-6222),該系統(tǒng)將允許在同一單元中使用與安全標(biāo)記相關(guān)聯(lián)的不同值。這將允許根據(jù)用戶的權(quán)限顯示一條特定的信息。

總結(jié)

HBase Security增加了兩個(gè)額外的特性,允許您保護(hù)數(shù)據(jù)免受嗅探者或其他網(wǎng)絡(luò)攻擊(通過(guò)使用Kerberos對(duì)用戶進(jìn)行身份驗(yàn)證和加密服務(wù)之間的通信),并允許您定義用戶授權(quán)策略、限制操作和限制特定用戶的數(shù)據(jù)可見(jiàn)性。

Matteo Bertozzi is a Software Engineer at Spotify and an HBase Consultant at Cloudera.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容