主頁 > 資料庫 > 提高資料的安全性和可控性,數堆疊基于 Ranger 實作的 Spark SQL 權限控制實踐之路

提高資料的安全性和可控性,數堆疊基于 Ranger 實作的 Spark SQL 權限控制實踐之路

2023-05-18 08:48:21 資料庫

在企業級應用中,資料的安全性和隱私保護是極其重要的,Spark 作為數堆疊底層計算引擎之一,必須確保資料只能被授權的人員訪問,避免出現資料泄露和濫用的情況,為了實作Spark SQL 對資料的精細化管理及提高資料的安全性和可控性,數堆疊基于 Apache Ranger 實作了 Spark SQL 對資料處理的權限控制,

本文基于 Apahce Spark 2.4.8 和 Apache Ranger 2.2 進行原理講解,和大家聊聊「袋鼠云一站式大資料基礎軟體數堆疊」基于 Ranger 在 Spark SQL 權限控制上的實踐探索之路,

基于Ranger實作Spark SQL權限控制

Apache Ranger 是一個開源的權限管理框架,可以提供對 Hadoop 生態系統的安全訪問控制,Ranger 為開發者提供了一種可擴展的框架,可以進行統一的資料安全管理,內置包括對 Hadoop、Hive、HBase、Kafka 等多個組件的訪問控制,

Ranger 內置并沒有提供 Spark 的權限控制插件,需要開發者自己實作,基于 Ranger 數堆疊實作了 Spark SQL 對庫、表、列和 UDF 的訪問權限控制、行級別權限控制和資料脫敏三方面的權限管理與控制,接下來我們分兩部分對其實作原理進行講解,分別是自定義 Ranger 插件和 Spark SQL Extensions 機制,

自定義 Ranger 插件

在 Ranger 中添加一個新服務的權限校驗可分為兩部分:第一部分是為 Ranger 增加新服務模塊;第二部分是在新服務中增加 Ranger 權限校驗插件,

● Ranger 增加新服務模塊

Ranger 增加新服務模塊是在 Ranger Admin Web UI 界面增加對應服務模塊,用來為對應服務添加對應資源的授權策略,新服務模塊增加可以分為以下三個步驟:

? 為新服務定義描述檔案,檔案名為 ranger-servicedef-< serviceName>.json,在描述檔案中定義了服務的名字、在 ranger admin web 界面中顯示的名稱、新服務訪問類定義、需要用來進行權限校驗的資源串列和需要進行校驗的訪問型別串列等,

ranger-servicedef-< serviceName>.json 內容主要部分引數決議如下:

{
  "id":"服務id,需要保證唯一",
  "name":"服務名",
  "displayName":"在Ranger Admin Web UI上顯示的服務名",
  "implClass":"在Ranger Admin內部用于訪問新服務的實作類",
  // 定義新服務用于權限校驗的資源串列,如Hive中的database、table
  "resources":[
    {
      "itemId": "資源id, 從1開始遞增",
      "name": "資源名",
      "type": "資源型別,通常為string和path",
      "level": "資源層級,同一層級的會在一個下拉框展示",
      "mandatory": "是否為必選",
      "lookupSupported": "是否支持檢索",
      "recursiveSupported": false,
      "excludesSupported": true,
      "matcher": "org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher",
      "validationRegEx":"",
      "validationMessage": "",
      "uiHint":"提示資訊",
      "label": "Hive Database",
      "description": "資源描述資訊"
    }
  ],
  // 定義資源需要進行校驗的訪問型別串列,如select、create
  "accessTypes":[
    {
      "itemId": "訪問型別id, 從1開始遞增",
      "name": "訪問型別名稱",
      "label": "訪問型別在Web界面上的顯示名稱"
    }
  ],
  "configs":[
    {
      "itemId": "配置引數id, 從1開始遞增",
      "name": "配置引數名稱",
      "type": "引數型別",
      "mandatory": "是否必填",
      "validationRegEx":"",
      "validationMessage": "",
      "uiHint":"提示資訊",
      "label": "在Web界面上的顯示名稱"
    }
  ]
}

? 開發 Ranger 中新服務模塊對應的實作類,并將該類名填寫到 ranger-servicedef-< serviceName>.json 中 implClass 欄位上,新服務模塊的實作類需要繼承抽象類 RangerBaseService,RangerBaseService 是 Ranger 中所有服務的基類,它定義了一組公共方法和屬性,以便所有服務都可以共享和繼承,RangerBaseService 提供了基本功能,如訪問控制,資源管理和審計跟蹤等,

開發新服務模塊的實作類是比較容易的,通過繼承 RangerBaseService 并實作 validateConfig 和 lookupResource 兩個方法即可,validateConfig 方法是用來驗證服務的配置是否正確,lookupResource 方法定義了加載資源的方法,

? 第一步和第二部完成后分別將組態檔 ranger-servicedef-< serviceName>.json 和新服務模塊對應的實作類 jar 包放到 Ranger Admin 的 CLASSPATH 中,并使用 Ranger Admin 提供的 REST API 向 Ranger 注冊定義的服務型別,這樣就能在 Ranger Admin UI 界面看到新服務的模塊并能通過界面配置對應權限控制,

● 新服務中增加 Ranger 權限校驗插件

新服務中要實作 Ranger 的權限校驗需要開發對應的權限控制插件并注冊到新服務中,該插件實作的時候需要在服務中找到一個切入點來攔截資源的訪問請求并呼叫 Ranger API 來授權訪問,接下來介紹一下 Ranger 權限校驗插件開發中比較重要的4個類:

? RangerBasePlugin:Ranger 權限校驗的核心類,主要負責拉取策略、策略快取更新及完成資源訪問的權限校驗

? RangerAccessResourceImpl:對鑒權資源進行封裝的實作類,呼叫鑒權介面時需要構造這么一個類

? RangerAccessRequestImpl:請求資源訪問的實作類,包含鑒權資源的封裝物件、用戶、用戶組、訪問型別等資訊,呼叫鑒權介面 isAccessAllowed 時需要將 RangerAccessRequestImpl 作為引數傳入

? RangerDefaultAuditHandler:審計日志的處理類

實作 Ranger 權限校驗插件分為以下步驟:

? 撰寫目標類繼承 RangerBasePlugin,通常只需要在目標類實作的構造方法中呼叫父類的建構式并填入對應的服務型別名稱和重寫 RangerBasePlugin 的 init 方法并在重寫的 init 方法中呼叫父類的 init 方法,

RangerBasePlugin 的 init 方法中實作了策略的拉取并會啟動一個后臺執行緒定時更新本地快取的策略,

? 撰寫承上啟下的類,用于配置在目標服務中能夠攔截目標服務所有的資源請求并能呼叫 RangerBasePlugin 的 isAccessAllowed 方法進行資源請求鑒權,對于 Spark SQL 實作 Ranger 的權限校驗來說我們基于 Spark SQL 的 Extensions 機制(后文會進行講解),通過自定義一個 Spark Extensions 注冊到 Spark 中來在 SQL 語法決議階段通過遍歷生成的抽象語法樹完成資源訪問的權限校驗,

Spark SQL Extensions 機制

Spark SQL Extensions 是在 SPARK-18127 中被引入,提供了一種靈活的機制,使得 Spark 用戶可以在 SQL 決議的 Parser、Analyzer、Optimizer 以及 Planner 等階段進行自定義擴展,包括自定義 SQL 語法決議、新增資料源等等,

file

SparkSessionExtensions 為 Spark SQL Extensions 機制的核心類,SparkSessionExtensions 保存了用戶自定義的擴展規則,包含以下方法:

? buildResolutionRules:構建擴展規則添加到 Analyzer 的 resolution 階段

? injectResolutionRule:向 Analyzer 的 resolution 階段注冊擴展規則生成器

? buildPostHocResolutionRules:構建擴展規則添加到 Analyzer 的 post-hoc resolution 階段

? injectPostHocResolutionRule:向 Analyzer 的 post-hoc resolution 階段注冊擴展規則生成器

? buildCheckRules:構建擴展檢查規則,該規則將會在 analysis 階段之后運行,用于檢查 LogicalPlan 是否存在問題

? injectCheckRule:注冊擴展檢查規則生成器

? buildOptimizerRules:構建擴展優化規則,將在 optimizer 階段被呼叫執行

? injectOptimizerRule:注冊擴展優化規則生成器

? buildPlannerStrategies:構建擴展物理執行計劃策略,用于將 LogicalPlan 轉換為可執行檔案

? injectPlannerStrategy:注冊擴展物理執行計劃策略生成器

? buildParser:構建擴展決議規則

? injectParser:注冊擴展決議規則生成器

基于 Spark SQL Extensions 機制實作自定義規則會很容易,首先撰寫類實作 Function1[SparkSessionExtensions, Unit] ,SparkSessionExtensions 作為函式入參,呼叫 SparkSessionExtensions 對應方法將自定義的決議規則注冊到對應的 SQL 決議階段執行,然后將撰寫的類通過引數 spark.sql.extensions 指定注冊到 Spark 中,

Spark SQL權限控制在數堆疊中的實踐

Spark 在數堆疊中主要應用于離線數倉的場景,對離線資料進行批處理,大多數場景下資料大多都是存在業務庫中的如 MySQL、Oracle 等,在數堆疊上會先使用 ChunJun 進行資料采集將資料從業務庫同步到 Hive 庫的 ODS 層,然后通過 Hive 或者 Spark 引擎進行資料的批處理計算,最后再通過 ChunJun 將結果資料同步到對應業務庫中,

file

對應的業務庫大多都是關系型資料庫,每個關系型資料庫也都已經具有非常完善的權限管理機制,在早期的數堆疊中是缺少對 Hive 上資料的安全管控的,這也就導致 Hive 上的資料可以被每個用戶獲取查看,缺少了資料隱私保護,

為了解決 Hive 資料安全的問題,我們選擇了使用 Ranger 來對 Hive 進行權限控制,

Ranger 是一個非常全面的資料安全管理框架,它提供了 Web UI 供用戶進行權限策略設定,使得 Ranger 更加易用,Ranger 安全相關的功能也十分豐富,管控力度更細,支持資料庫表級別權限管理,也支持行級別過濾和資料脫敏等非常實用的功能,對 Ranger 進行擴展也比較靈活,在 Ranger 上能夠很輕松實作一個新服務的權限管控,

在數堆疊上 Spark 用來處理 Hive 中的資料,Hive 使用 Ranger 進行了資料的權限管控,所以為了保證資料安全數堆疊基于 Ranger 自研了 Spark SQL 的權限管控插件,

上文我們提到為一個新服務自定義 Ranger 權限管控插件分為兩部分來完成,第一部分是在 Ranger Admin Web UI 界面增加對應的服務模塊,考慮到 Spark 只用來處理 Hive 中的資料所以在權限策略這個地方應該要和 Hive 保持一致,所以在 Spark SQL 基于 Ranger 實作權限控制插件時沒有重復造輪子而是直接復用 HADOOP SQL 服務模塊,和 Hive 共同使用同一套策略,所以我們只需要在 Spark 端開發 Ranger 的權限管理插件,

file

基于 Spark SQL Extensions 機制,我們撰寫了類 RangerSparkSQLExtension,并在該類中將實作好的鑒權 Rule、行級過濾 Rule 和資料脫敏 Rule 通過呼叫 SparkSessionExtensions.injectOptimizerRule 方法注冊將到 SQL 決議的 Optimizer 階段,

以資料脫敏 Rule 為例,當匹配到資料脫敏的 Rule 后,該 Rule 會為 Logical Plan 增加一個 Project 節點并增加 masking_function 函式呼叫的邏輯,通過下圖展示匹配資料脫敏 Rule 前后的變化,以 select name from t1 where id = 1 為例:

file

總結

數堆疊一直致力于資料的安全和隱私保護,實作 Spark SQL 基于 Ranger 的權限控制是數堆疊在資料安全探索的其中一點,本文講述了基于 Ranger 實作 Spark SQL 權限校驗的原理,基于 Ranger 賦予了 Spark SQL 在權限管控方面,更強的管控力度、更豐富的能力,

未來在保證安全的前提下數堆疊將對性能進行進一步的優化,比如將權限校驗 Rule 注冊到 SQL 優化器上,可能會被執行多次增加,這樣就會增加一些不必要的鑒權,期待大家對數堆疊的持續關注,

《數堆疊產品白皮書》:https://www.dtstack.com/resources/1004?src=https://www.cnblogs.com/DTinsight/p/szsm

《資料治理行業實踐白皮書》下載地址:https://www.dtstack.com/resources/1001?src=https://www.cnblogs.com/DTinsight/p/szsm

想了解或咨詢更多有關袋鼠云大資料產品、行業解決方案、客戶案例的朋友,瀏覽袋鼠云官網:https://www.dtstack.com/?src=https://www.cnblogs.com/DTinsight/p/szbky

同時,歡迎對大資料開源專案有興趣的同學加入「袋鼠云開源框架釘釘技術qun」,交流最新開源技術資訊,qun號碼:30537511,專案地址:https://github.com/DTStack

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/552743.html

標籤:大數據

上一篇:單表查詢

下一篇:返回列表

標籤雲
其他(159240) Python(38148) JavaScript(25433) Java(18055) C(15228) 區塊鏈(8267) C#(7972) AI(7469) 爪哇(7425) MySQL(7191) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5340) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4572) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2433) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1975) 功能(1967) Web開發(1951) HtmlCss(1938) python-3.x(1918) C++(1917) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1861) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • 提高資料的安全性和可控性,數堆疊基于 Ranger 實作的 Spark SQL

    在企業級應用中,資料的安全性和隱私保護是極其重要的。Spark 作為數堆疊底層計算引擎之一,必須確保資料只能被授權的人員訪問,避免出現資料泄露和濫用的情況。為了實作Spark SQL 對資料的精細化管理及提高資料的安全性和可控性,數堆疊基于 Apache Ranger 實作了 Spark SQL 對資料 ......

    uj5u.com 2023-05-18 08:48:21 more
  • 單表查詢

    第一章 簡單查詢 1.1、select陳述句 mysql 中查詢資料的基本陳述句是select陳述句。 語法: select [distinct] 欄位1,欄位2,欄位3..... from 表名 [where 條件運算式] [group by 欄位名] [having 條件運算式] [order by ......

    uj5u.com 2023-05-16 22:26:48 more
  • PostgreSQL一站式插件推薦 -- pg_enterprise_views

    近日發現PG官方插件串列中新收錄了一款插件 pg_enterprise_views,因為官方已經數年未添新的插件了很是新奇,找了臺設備測驗過后果斷上了生產,得空分享給大家。 該插件提供了數十張系統表及一個GUI工具,用以監控從作業系統到資料庫方方面面的性能情況,并支持對任意時段歷史資料的回溯,基本等 ......

    uj5u.com 2023-05-16 22:26:12 more
  • PostgreSQL一站式插件推薦 -- pg_enterprise_views

    近日發現PG官方插件串列中新收錄了一款插件 pg_enterprise_views,因為官方已經數年未添新的插件了很是新奇,找了臺設備測驗過后果斷上了生產,得空分享給大家。 該插件提供了數十張系統表及一個GUI工具,用以監控從作業系統到資料庫方方面面的性能情況,并支持對任意時段歷史資料的回溯,基本等 ......

    uj5u.com 2023-05-16 22:12:18 more
  • 單表查詢

    第一章 簡單查詢 1.1、select陳述句 mysql 中查詢資料的基本陳述句是select陳述句。 語法: select [distinct] 欄位1,欄位2,欄位3..... from 表名 [where 條件運算式] [group by 欄位名] [having 條件運算式] [order by ......

    uj5u.com 2023-05-16 22:10:09 more
  • hive 從入門到精通

    hive入門到精通 hive部署 啟動Hadoop # 啟動hadoop start-all.sh # 檢查hadoop行程 jps # 檢查各埠 netstat -aplnt | grep java 檢查MySQL是否啟動成功 ps -aux | grep mysql netstat -apln ......

    uj5u.com 2023-05-16 15:32:25 more
  • pg_enterprise_views偶然發現的PG神仙插件!

    一直從事資料庫相關的作業,對于PG而言最大的問題其實是在運維管理方面,其缺乏有效且直觀成體系的系統表,苦覓良久,今日在PG官網中發現了一款新收錄的免費插件,其提供了數十張系統表,內容涵蓋了從作業系統到資料庫的負載指標、等待事件、會話、客戶端、SQL、SQL執行計劃、超時鎖、長事務、資料庫物件、寫行程 ......

    uj5u.com 2023-05-16 15:32:13 more
  • MySQL 8.0不再擔心被垃圾SQL搞爆記憶體

    MySQL 8.0.28引入的新功能 MySQL 8.0.28開始,新增一個特性,支持監控統計并限制各個連接(會話)的記憶體消耗,避免大量用戶連接因為執行垃圾SQL消耗過多記憶體,造成可能被OOM kill的風險。 首先,需要先設定系統選項 global_connection_memory_tracki ......

    uj5u.com 2023-05-16 15:31:01 more
  • ClickHouse筆記: Ubuntu/Centos下的安裝, 配置和用戶管理

    ClickHouse 屬于 OLAP 資料庫, 與 OLTP (Transaction Process) 相比, 注重資料分析, 重點在查詢的性能. 在業務系統中, 往往使用 OLTP 資料庫做業務資料存盤, 用 OLAP 資料庫做查詢分析, 在一些場景下ClickHouse可以取代ES(Elast... ......

    uj5u.com 2023-05-16 15:30:55 more
  • Redis實戰解讀-初識Redis&Redis基本資料型別

    一.初識Redis
    1.什么是Redis
    ? Redis是一個速度非常快的非關系型資料庫(non-relational database),它可以存盤鍵(key)與五種不同型別的值的映射(mapping),可以將存盤在記憶體的鍵值對資料持久化到磁盤,可以使用復制特性來擴展讀性能,也可以采用客戶端分片來... ......

    uj5u.com 2023-05-16 15:30:43 more