1. 程式人生 > >大資料處理也要安全--關於MaxCompute的安全科普

大資料處理也要安全--關於MaxCompute的安全科普

image

[TOC]

1.企業大資料處理現狀

當今社會資料收集手段不斷豐富,行業資料大量積累,資料規模已增長到了傳統軟體行業無法承載的海量資料(百GB、TB乃至PB)級別。基於此,阿里雲推出有了一套快速、完全託管的GB/TB/PB級資料倉庫解決方案——阿里雲大資料計算服務(MaxCompute,原名ODPS),MaxCompute服務於批量結構化資料的儲存和計算,提供海量資料倉庫的解決方案及分析建模服務。

企業從未像今天這樣可以輕易地儲存和使用大資料,大資料計算已經成為越來越多企業不可獲取的工作環節。然而,當您在使用大資料產品時,是否考慮過其中的安全問題呢?

慶幸的是,阿里雲產品專家和安全專家早就想你所想急你所急,先行一步將安全特性帶入了大資料計算產品 MaxCompute。該產品在面世之初就具備強大的安全特性,讓企業可以放心地在雲上使用。讓我們一起來了解 MaxCompute的安全特性,以及如何安全地使用它吧。

2.MaxCompute優勢

2.1 示例應用場景

常見的MaxCompute使用方法是,通過 DataWorks 或 特定客戶端連線MaxCompute然後開展資料工作。

下圖是筆者所在安全團隊通過 DataWorks 使用 MaxCompute 功能,對態勢感知日誌進行深度安全分析的示例。因為 MaxCompute 支援批量操作和作業定義,因此安全團隊可以將日誌批量匯入系統並執行安全分析,最終輸出安全分析結果。整個流程設計完全圖形化實現,介面簡潔,操作方便。

image

2.2 MaxCompute基礎特性

MaxCompute為使用者提供完善的資料匯入方案以及多種經典的分散式計算模型,助使用者快速解決海量資料的計算問題,有效降低企業成本並保障資料安全。使用者可以不必關心分散式計算和維護細節,便可輕鬆完成大資料分析。

概括地說(從官方抄來了),MaxCompute有如下特性優勢:

  • 大規模計算儲存

MaxCompute適用於100GB以上規模的儲存及計算需求,最大可達EB級別。

  • 多種計算模型

MaxCompute支援SQL、MapReduce、Graph等計算型別及MPI迭代類演算法。

  • 低成本

與企業自建專有云相比,MaxCompute的計算儲存更高效,可以降低20%-30%的採購成本。

  • 安全性

MaxCompute具備強資料安全特性:MaxCompute已穩定支撐阿里全部離線分析業務7年以上,提供多層沙箱防護及監控。

2.3 MaxCompute安全特性

MaxCompute擁有完備的措施來保證使用者的資料安全,產品在最開始設計階段就已經考慮到多租戶環境下的安全問題。除了專案的建立者外的其他人(包括阿里雲的員工),未經授權無法看到使用者的資料。

MaxCompute 有健全的安全體系,支援多種許可權設定方法,包括基於 ACL 和角色管理實現的對 Project 級別、表級別的授權,保證只有經過授權的使用者才能訪問到資料。

MaxCompute 安全沙箱系統,可以防止其他的客戶惡意操作。
使用 Access Id/Key 作為角色驗證的方法,和阿里雲賬號區分開,如果出現洩露可以很快禁用,不會影響其他 Access Id/Key 的使用。

在 DataWorks 控制檯甚至可以直接設定 MaxCompute 專案高階引數,包括多個安全特性。

image

重點安全配置項如下:

  • 使用ACL授權
  • 允許物件建立者訪問物件
  • 允許物件建立者授權物件
  • 專案空間資料保護
  • 子賬號服務
  • 使用Policy授權
  • 啟動列級別訪問控制

3.MaxCompute 綜合安全防護機制

3.1 租戶隔離與訪問控制

專案空間(Project)是MaxCompute的基本組織單元,它類似於傳統資料庫的Database或Schema的概念,是進行多使用者隔離和訪問控制的主要邊界。

一個使用者可以同時擁有多個專案空間的許可權,通過安全授權,可以在一個專案空間中訪問另一個專案空間中的物件,例如表(Table)、資源(Resource)、函式(Function)和例項(Instance)。

MaxCompute 通過身份鑑別、訪問控制、專案內許可權管理和專案間訪問控制實現整體架構安全,在具體實現方面可以通過 ACL、Role、Policy 等機制實現即時控制,為大資料使用解除所有安全顧慮。

一個完整的 MacCompute 資源使用許可權校驗過程如下圖所示:

image

只有完成上述訪問控制策略鏈路上每個節點的安全檢查,使用者才能訪問MaxCompute專案許可權內的資源。

身份鑑別通過 AK/AS完成,這在建立專案時需要配置,網路訪問控制通過 IP 地址白名單控制(需要手工啟用)、專案之間或專案內的訪問控制通過 MaxComputer 的鑑權機制來實現。

3.2 基於角色的許可權控制矩陣

MaxCompute 專案空間有不同的使用者角色,如:專案擁有者、管理員、開發者等。
雖然可以使用Console 和開發工具對接 Maxcompute,但是圖形介面的 DataWorks 仍然是大資料計算場景使用頻發的互動介面,DataWorks為MaxCompute提供一站式的資料同步、業務流程設計、資料開發、管理和運維功能。

官方視訊裡也有一段針對DataWorks使用者許可權和MaxCompute專案的角色關係對映表,供參考。

image

在 DataWorks 控制檯上,使用者在專案空間內有不同角色,分別是:專案擁有者、專案管理員、開發、運維、部署、訪客和安全管理員。阿里雲 MaxCompute 專案對許可權組和許可權列表做了精細化的許可權控制,通過Web 控制檯專案管理介面可以檢視到詳細的DataWorks角色與許可權矩列表。相關許可權組如下:

  • 資料管理
  • 釋出管理
  • 按鈕控制
  • 程式碼開發
  • 函式開發
  • 節點型別控制
  • 資源管理
  • 工作流開發
  • 資料整合

每一個不同給的角色有哪些許可權,在許可權列表中一目瞭然。

image

3.3 專案內保護機制-授權

當有新使用者加入專案組時,專案管理員可以通過 Web 控制檯或 MaxCompute Console 將新使用者加入專案組,並授權其訪問專案資源。

被授權的賬號既可以是在www.aliyun.com上註冊過的有效郵箱地址,也可以是執行此命令的雲賬號的某個RAM 子賬號。如果是通過支付寶、淘寶等賬號聯登的賬戶,需要從使用者中心獲取賬號名,如下圖所示:

image

MaxCompute只允許主賬號將自身的RAM子賬號加入到專案空間中,不允許加入其它雲賬號名下的RAM子賬號。

簡單地說:MaxCompute專案所有者可以為自己的 RAM 賬號授權,可以為外部阿里雲主賬號授權,但不能為外部賬號的子賬號授權。

舉例來說:專案 A 中有新成員張三加入,此時需要給張三專案操作許可權。

基本操作步驟如下:專案 Owner 執行如下命令,完成使用者新增,並執行 GRANT 命令實現 ACL 許可權設定。


USE ProjectName;
ADD USER [email protected];
GRANT List,CreateInstance on project ProjectA to USER [email protected];
 

3.4 專案內保護機制-防資料下載

對於一些資料敏感類專案,專案所有者通過 MaxCompute控制檯可以為專案設定資料保護功能,如:防止下載查詢結果。

具體操作可以在專案配置介面,開啟【在本專案中能下載select結果:】的開關。

image

經設定後,資料工程師將不能直接下載大資料平臺的 select 查詢結果。

3.5 專案內保護機制-沙箱出棧訪問白名單

大資料計算平臺不僅僅支援簡單的查詢操作,還支援部署 Python、Jar 等工具包。此類使用者自定義工具元件,具備網路訪問能力。為防止指令碼程式內建後門或被攻擊者利用,專案管理者可以設定計算環境可以訪問的外部 IP 地址白名單,增強資料安全防護。

通過Web 控制檯專案管理介面,可以在【沙箱白名單】選單,配置shell任務可以訪問的IP地址或域名。

image

新增成功後效果如下:

image

但設定 IP 白名單後,沙箱環境只能請求首選伺服器,其它所有行為都將被攔截,效果如圖:

image

3.6 專案間保護機制-專案保護開關

一個典型的應用場景是:Project B 專案的使用者李四要加入 Project A專案,A 的專案所有者為李四開通了訪問許可權。

這個引用場景的風險是:李四有多種方法將 Project A資料匯出,其中最簡單的是通過下面語句轉出資料。


CREATE TABLE ProjectB.Result AS SELECT * FROM ProjectA.SensitiveData

如果Project A的資料敏感度很高,不希望外流;那麼管理員可以為該專案設定 ProjectProtection 開關(`SET ProjectProtection=true;
`),阻止資料外流。一旦開啟 ProjectProtection開關,該專案的資料只能流入不能流出,任何直接或間接的資料匯出方式都將失效。使用者李四隻能在專案內進行資源訪問,不能在專案間流轉資料。

3.7 專案間保護機制-例外與互信

企業使用者的需求總是由特定場景決定的。雖然 MacCompute 支援專案保護功能,但不排除在運營過程中出現仍然需要與其它專案互訪,或受信外部專案訪問的情況。為此,阿里雲MacCompute為系統增加了ProjectProtection模式下的例外機制和專案互信機制。

3.7.1 例外策略機制

通過編寫策略檔案 PolicyFile並將其加入到專案Protection 的裡外中,可以實現專案空間例外訪問控制策略,命令如下:

USE ProjectA;
SET ProjectProtection=true with exception policy.json;

3.7.2 專案互信與互信組

若因專案需求關係,經過嚴格審查,確定 Project A 和 Project B 專案之間可以完全互信,互相訪問,則通過設定信任專案的方式,可以設定 A、B 專案互信,實現資料互訪。具體操作指令如下:

USE ProjectA;
ADD trustedproject  ProjectB
    

經上述設定後,A 和 B 在同一個受信域內,允許各自授權使用者的互相訪問。如果出現 A 信任 B、B 信任的情況,則表明 A、B、C 三者是完全互信的,可以直接設定一個專案互信組 TrustedGroup,同樣能滿足專案互信要求。

3.8 Policy 授權機制

如此前章節介紹,專案訪問控制除了標準的 ACL 控制策略外,還有基於 Policy 的授權機制。Policy 主要解決 ACL 無法實現的一些複雜場景授權,通常可以實現:一次操作對一組受訪問課題資源的授權,帶限制條件的授權等。該授權機制可以更加方便靈活地定義使用者對資料的訪問許可權控制。以下是一個簡單的例項:

以下是參考Policy的JSON樣例,該策略允許[email protected]使用odps:Select許可權訪問專案ProjectA的 datas 表。

{
  "version": "1",
  "statement": [
    {
      "Effect": "Allow",
      "Principal": "[email protected]",
      "Action": [
        "odps: Select"
      ],
      "Resource": "acs: odps: *: projects/ProjectA/tables/datas",
      "Condition": {
        "StringEqual": {
          "odps: TaskType": [
            "DT",
            "SQL"
          ]
        }
      }
    }
  ]
}

典型的 Policy 使用方法如下圖:

GET POLICY;
PUT POLICY policy.json;
PUT POLICY policy.json on role <role name>;

3.9 LabelSecurity實現列級別訪問控制

基於標籤的安全(LabelSecurity)是專案空間級別的一種強制訪問控制策略(Mandatory Access Control, MAC),它的引入是為了讓專案空間管理員能更加靈活地控制使用者對列級別敏感資料的訪問。

LabelSecurity需要將資料和訪問資料的人進行安全等級劃分。在政府和金融機構,一般將資料的敏感度標記分為四類:0級 (不保密, Unclassified), 1級 (祕密, Confidential), 2級 (機密, Sensitive), 3級 (高度機密, Highly Sensitive)。MaxCompute也遵循這一分類方法。ProjectOwner需要定義明確的資料敏感等級和訪問許可等級劃分標準,預設時所有使用者的訪問許可等級為0級,資料安全級別預設為0級。

一個典型的應用場景:某資料表格中存放了大量使用者基本資訊,欄位安全標記為0,1,,也存放了一些使用者手機號等隱私資訊,欄位安全標記為3。此時,如果使用者 A 的訪問許可等級為1,則該使用者只能查詢等級為0和1的資料,而不能查詢等級為2和3的資料。

image

LabelSecurity對敏感資料的粒度可以支援列級別,管理員可以對錶的任何列設定敏感度標記(Label),一張表可以由不同敏感等級的資料列構成。

對於view,也支援和表同樣的設定,即管理員可以對view設定label等級,view的等級和它對應的基表的label等級是獨立的,在view建立時,預設的等級也是0。

LabelSecurity預設安全策略
在對資料和user分別設定安全等級標記之後,LabelSecurity的預設安全策略如下:
(No-ReadUp) 不允許user讀取敏感等級高於使用者等級的資料,除非有顯式授權。
(Trusted-User) 允許user寫任意等級的資料,新建立的資料預設為0級(不保密)

4.企業敏感資料處理實踐

某企業底層資料系統中存放有各類敏感資訊,包括:使用者名稱、手機號、身份證號碼等。資料分析團隊需要對資料進行挖掘,那麼下面的問題將不得不面對:

  • 哪些資料需要加密?
  • 敏感資料如何儲存和使用?
  • 如果兼顧業務需要和資料安全保護?

根據上文對MaxCompute安全特性的介紹,我們可以按照如下策略開展。

  • 對於永遠都不能明文顯示的資訊,應該在業務資料寫入 RDS、MongoDB 等系統時就直接加密,不要等到寫入MaxCompute 才加密。資料安全保護要在全生命週期內開展,不僅僅是大資料計算環節。此類資訊通常包括:身份證全字元、銀行卡全字元、企業核心業務敏感欄位等。
  • 對於業務分析要用到的一般敏感資料,建議遵循最小許可權原則,在落入 MaxCompute 時進行加密,如登入名、Email、手機號等。只有在真正需要的時候才做解密動作。比如:抽取1000名活躍使用者進行獎品發放和簡訊通知。這個場景只適合通過大資料平臺算出 UID,然後通過特定的業務系統完成資料提取。
  • 對安全性要求高的表,應啟用標記安全功能實現列表及訪問控制;
  • 對於不需要使用,但又不能明文計算的資料可以考慮摘要、截斷或掩碼等方式進行預處理,如:手機號前 X 位,郵箱 SHA 摘要等;
  • 如非必須,請勿開通 select 結果下載功能;
  • 如有可能,應通過安全的環境進行大資料訪問,如:堡壘機、雲主機等;
  • 核查專案互信機制和互信清單,確保僅授權使用者才能使用;
  • 核查釋出到 MaxCompute 環境中的Jar、Python 等檔案包;
  • 為專案設定不同角色的人員,按需設定設定許可權;
  • 定期審計專案授權清單,確認許可權控制合理;
  • 區分開發環境和生產環境,Job 推送前務必核實。

image

5.參考資料