禹熹 方亞超 洪丁節


關鍵詞:流式數據總線;數據安全;訪問控制;數據視圖;SQL
中圖法分類號:TP311 文獻標識碼:A
1技術背景
隨著企業內數據的急劇膨脹和快速增長,如何在企業內不同應用間高效、安全的共享數據,避免數據孤島效應,成為現代企業數字化轉型的巨大挑戰。一方面,數據的整合和共享是“讓企業內數據用起來”的前提,只有實現“數據的平民化”,使企業內數據取數.用數便捷高效,才能打通企業內各業務線的七經八脈,讓數據信息得以快速觸達企業各處,為企業創造有效價值、預警不利風險;另一方面,數據是企業的核心資產,數據安全是每個企業都需要重視的課題,實現便捷的數據訪問的同時,企業數據的安全應同樣得到保障。數據的訪問須滿足“最小權限訪問”原則,通過賦予數據訪問者滿足其業務需求的必要、最小的數據集,可極大地降低數據泄露和濫用的風險,從而保護企業的權益。
在企業內,通過構建基于OLAP關系型數據庫的傳統數據倉庫或基于Hadoop生態的大數據平臺,歸集源自企業內外的數據,可以實現數據的集中,提供統一的數據訪問服務。為保障數據的訪問安全,在基于RDMBS的數據倉庫中,可按數據訪問需求創建數據訪問視圖(view)并授權用戶訪問。基于大數據Hadoop生態構建數據平臺,可通過Ranger或Sentr等大數據體系安全訪問控制組件,并結合數據私有視圖的方式實現對大數據表的行列級訪問控制,從而保障數據的訪問安全。
傳統的數據倉庫和大數據平臺可提供原始明細數據和匯總數據的訪問,然而其提供的數據主要基于T-1日的歷史數據,無法提供時效性更高的數據訪問。基于高吞吐消息隊列打造企業級實時的流水數據總線,將實時數據流水統一歸集至數據總線,可以為企業內各系統提供各種實時數據流的數據訂閱服務,然而目前卻缺少有效的數據訪問控制機制來滿足數據安全性需求:(1)消息隊列提供訪問控制機制粒度較粗,通常基于單份數據整體,無法提供細粒度的行列級訪問控制,如Apache Kafka通過ACL控制對數據topic的訪問,但不支持對topic內數據內容的訪問控制,阿里云Datahub服務基于阿里云通用訪問控制RAM機制控制對Datahub資源的訪問,但目前只實現了針對項目級(Project)、主題級(Topic)以及訂閱級(Subscription)三級的控制,并沒有更細粒度的數據范圍控制能力;(2)為支持細粒度的訪問控制,可采用新建應用二次轉移的方式為下游系統按需篩選、過濾,提供對應的數據和字段,但這會導致數據冗余存儲、應用開發成本高、部署結構以及上線流程復雜等問題。
本文提出了一種基于SQL語義在流式數據總線(Apache Kafka)上的行列級數據訪問控制方式,解決企業實時數據總線的細粒度數據訪問控制問題,如圖1所示。
2設計思路
按照批量數據平臺上的訪問控制方式,通過在流式數據總線上建立類關系型數據庫( RDBMS)的數據表(Table)、數據視圖(View)能力,并對數據視圖進行賦權,實現對流式實時數據總線上的數據的行列級訪問控制。
2.1通過建立數據表(Table),賦予流式數據總線上元數據管理能力
流式數據總線中的消息中間件通常以主題(Topic)形式存儲二進制數據,不具備數據內容、數據字段等元信息管理能力,這也導致其數據訪問控制的粒度僅能到Topic級別。通過為流式總線上Topic中存儲數據建立數據表,將數據字段名稱、數據字段類型、數據字段的解析器(Deserializer)等涉及數據內容的信息保存下來,賦予流式數據總線對數據內容的元數據管理能力,從而支持對Topic中保存的二進制數據進一步解析、處理的能力。
2.2通過建立數據視圖(View),實現數據行列級數據訪問控制
不同業務系統對同一份數據的訪問需求不盡相同,因此,需要根據實際需求制定不同的安全控制規則。在數據表上支持建立私有的數據視圖,為下游數據應用系統按需創建不同的視圖并賦予其訪問權限。控制業務系統僅能訪問業務所需的數據和字段,支持行級過濾、列級過濾,并通過UDF函數支持數據字段的處理,以支持脫敏、加密等數據字段的處理,滿足了最小化數據訪問原則,無須再進行定制化開發數據處理應用。
2.3擴展實現流式數據總線的SQL能力
在數據表和數據視圖的基礎上,支持對流式數據總線的進一步擴展,使其建立較完備的SQL訪問能力,支持RDBMS常用SQL語義:(1)支持創建、修改或刪除表/視圖/用戶(CREATE TABLE/VIEW/USER);(2)支持從數據表和視圖上查詢數據(SELECT…FROM TABLE/VIEW WHERE);(3)支持對用戶賦權( GRANT/REVOKE SELECT/INSERT
.. TO/FROM USER);支持(4)查看表/視圖/用戶信息DESCRIBE TABLE/VIEW/USER等。
通過建立基于流式數據總線的SQL訪問能力,不僅能滿足日常運維查詢需求,同時使流式數據總線像數據庫一樣簡單易用。
2.4訪問接口兼容
為不侵入流式數據總線的內部,和原系統耦合,對流式數據總線的訪問接口外層進行封裝并提供兼容于原數據的訪問API接口,使外部應用仍可通過簡單的形式訂閱實時流水數據。業務系統透明化,實現即插即用,使業務系統開發和改造的影響性最小化,并在安全控制的限制下實現輕松接人。
2.5不顯著降低數據訪問性能
對于流式數據總線而言,其重要的一項指標是實時數據訪問的吞吐量和時效性。引入行列級的訪問控制不可避免地帶來性能開銷,但應盡量減小對流式數據總線性能的影響。
3原型系統實現
基于業界流行的高吞吐開源消息中間件Kafka,實現了本文提出的流式實時總線的行列級訪問控制原型以及基于“一套公共的流式實時數據,多套私有視圖”數據安全訪問模式(圖2)。本原型系統在Kafka上實現類RDBMS的數據表/視圖模式的訪問管理能力,建立基于SQL的行列級數據訪問控制,并支持基礎的SQL查詢,配套的客戶端包聯通了業務系統和Kafka,顯著提升了實時服務的安全性和運維便捷性。
原型系統主體包括SQL執行服務、管控中心、消費者客戶端三大模塊,每個模塊涉及的關鍵功能點如下。
3.1 SQL執行服務
SQL執行服務對外提供SQL語義接口,支持以SQL語句作為輸入進行數據表與視圖的管理或數據查詢。對于數據表、數據視圖定義等DDL類型的SQL(如CREATE TABLE/VIEW),SQL執行服務將其轉發給管控中心進行進一步處理,這是本文目標實現的安全控制規則的定義;對于Kafka數據的DQL查詢請求(如SELECT FROM TABLE/VIEW),SQL執行服務將其請求解析后轉化為對Kafka數據的讀取并在SQL執行服務中處理SELECT語句,這是附帶實現的類數據庫查詢Kafka中數據的功能。
3.2管控中心
管控中心負責數據表、數據視圖、UDF函數等Topic元信息的管理,并保存在自有數據庫中。通過管控中心創建應用私有視圖并賦權給下游應用用戶訪問實現數據的權限控制。數據視圖定義支持行級過濾/列級過濾/字段處理和UDF函數等功能。
3.3消費者客戶端
消費者客戶端封裝原生的Kafka消費者客戶端(Kafka-consumer),對外部應用提供兼容原Kafka-consumer API的接口,實現應用的快速接人和平順遷移。Kafka中的數據仍然通過原生的Kafka-consumer客戶端讀取,避免和Kafak系統的深度耦合,簡化系統的實現流程。同時,通過定期訪問管控中心服務,實現數據視圖所定義的訪問控制規則的同步后,對從Kafka中讀取的數據進行反序列化、行列級數據過濾以及脫敏、加密等操作后送給下游系統,實現業務對數據的最小訪問。
4結束語
本文提出了一種基于SQL語義的流式數據總線行列級數據訪問控制方式,主要解決企業中實時數據總線細粒度的數據訪問控制問題,并基于業界流行的開源消息中間件Apahce Kafka,驗證了系統實現的可行性。本文方式一方面實現了對企業中流式數據總線的行列級數據訪問控制,無須冗余存儲和數據處理應用,同時統一了流式數據總線上實時數據、數據倉庫/大數據平臺中批量數據的訪問控制形式,均可通過廣泛應用的SQL語言定義數據視圖并賦權實現業務數據的最小訪問。
作者簡介:
禹熹(1986—),碩士,研究方向:大數據應用和開發。