HBase 可見性標籤

可見性標籤控件可用於僅允許與給定標籤關聯的用戶或主體讀取或訪問具有該標籤的單元格。例如,您可以標記一個單元格top-secret,並且只將該標籤的訪問權授予該managers組。可見性標籤是使用標籤實現的,標籤是HFile v3的一個功能,並允許您以每個單元為基礎存儲元數據。標籤是一個字符串,可以使用邏輯運算符(&,|或!)將標籤組合為表達式,並使用圓括號進行分組。HBase不能對錶達式進行任何形式的驗證,除了基本的良好格式。可見性標籤本身沒有意義,可以用來表示敏感度級別、特權級別或任何其他任意的語義含義。

如果用戶的標籤與單元格的標籤或表達式不匹配,則拒絕用戶訪問該單元格。

在HBase 0.98.6及更高版本中,可見性標籤和表達式支持UTF-8編碼。當使用org.apache.hadoop.hbase.security.visibility.VisibilityClient類提供的addLabels(conf, labels)方法創建標籤並通過掃描或獲取在授權中傳遞標籤時,標籤可以包含UTF-8字符,以及可見標籤中通常使用的邏輯運算符以及常規Java符號,而不需要任何轉義方法。但是,當通過Mutation傳遞CellVisibility表達式時,如果使用UTF-8字符或邏輯運算符,則必須將該表達式與該CellVisibility.quote()方法一起放入。請參閱TestExpressionParser和源文件hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestScan.java。

用戶在Put操作期間向單元添加可見性表達式。在默認配置中,用戶不需要訪問標籤就可以用它來標記單元格。此行為由配置選項hbase.security.visibility.mutations.checkauths控制。如果您設置此選項為true,則用戶正在修改的標籤必須與用戶關聯,否則修改將失敗。在獲取或掃描期間確定用戶是否有權讀取標記的單元格,並且不允許用戶讀取的結果被過濾掉。這會導致相同的I/O處罰,如同返回結果一樣,但會減少網絡負載。

可見性標籤也可以在刪除操作中指定。有關可見性標籤和刪除的詳細信息,請參閱HBASE-10885。

當RegionServer首次收到請求時,將在RPC上下文中生成用戶的有效標籤集。用戶與標籤關聯的方式是可插入的。默認插件通過添加到獲取或掃描的授權中指定的標籤,並檢查針對主叫用戶的已認證標籤列表的標籤。當客戶端傳遞用戶未通過身份驗證的標籤時,默認插件會刪除它們。您可以通過Get#setAuthorizations(Authorizations(String,…))和Scan#setAuthorizations(Authorizations(String,…));方法傳遞用戶經過身份驗證的標籤的子集。

可以按照與用戶相同的方式向組授予可見性標籤。組前綴為符號@。當檢查用戶的可見性標籤時,服務器將包括用戶所屬的組的可見性標籤以及用戶自己的標籤。當使用API VisibilityClient#getAuths或Shell命令get_auths為用戶檢索可見性標籤時,我們將返回專門為該用戶添加的標籤,而不是組級標籤。

可見性標籤訪問檢查由VisibilityController協處理器執行。您可以使用VisibilityLabelService接口來提供自定義實現或控制可見性標籤與單元格一起存儲的方式。請參閱源文件hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithCustomVisLabService.java。

可見性標籤可以與ACL一起使用,需要注意以下幾點:

  • 標籤必須在可見標籤中使用之前明確定義。請參閱下面的示例來了解如何完成此操作。
  • 目前沒有辦法確定哪些標籤已應用於單元格。有關詳細信息,請參閱HBASE-12470。
  • 可見性標籤目前不適用於超級用戶(superusers)。

可見性表達式的示例


HBase 可見性標籤


分享到:


相關文章: