背景及目的
- 友善和輔助MaxCompute的project owner或安全管理者進行project的日常安全運維,保障資料安全。
- MaxCompute有安全模型,DataWorks也有安全模型,當通過DataWorks使用MaxCompute,而DataWorks的安全模型不滿足業務安全需求時,合理的将兩個安全模型結合使用就尤其重要。
安全模型
MaxCompute安全模型
安全體系
MaxCompute 多租戶的資料安全體系,主要包括如下内容:
-
使用者認證。
支援 雲賬号 和 RAM 賬号 兩種賬号體系,對于RAM賬号,僅識别賬号體系不識别RAM權限體系,即可将主賬号自身的任意 RAM 子賬号加入 MaxCompute 的某一個項目中,但 MaxCompute 在對該 RAM 子賬号做權限驗證時,并不會考慮 RAM 中的權限定義。
-
使用者與授權管理。
在MaxCompute Project中對使用者添加(add)、移除(remove)、授權(grant)管理。
還可以通過角色(role)管理授權,MaxCompute project預設有admin role。
而授權方式包含ACL和Policy方式,本文隻講ACL方式,Policy方式待後續更新篇中介紹。
ACL即似于 SQL92 定義的 GRANT/REVOKE 文法,它通過簡單的授權語句來完成對已存在的項目空間對象的授權或撤銷授權。授權文法如下:
grant actions on object to subject revoke actions on object from subject
-
标簽安全政策
基于标簽的安全(LabelSecurity)是項目空間級别的一種強制通路控制政策(Mandatory Access Control, MAC),它的引入是為了讓項目空間管理者能更加靈活地控制使用者對列級别敏感資料的通路。
-
跨項目空間的資源分享。
Package是一種跨項目空間共享資料及資源的機制,主要用于解決跨項目空間的使用者授權問題。即可以分享table、Resource、function等資源給其他項目,但是無需對其他項目的使用者進行管理。
-
項目空間的資料保護。
主要解決“不允許使用者将資料轉移到項目空間之外”的需求。
對象操作賦權、Role 和 label 關系介紹
上個小節中介紹了MaxCompute體系包含多種政策,而各種政策賦權是權限遞增關系。以需要擷取一個L4等級表的權限來展開說明這個遞增關系,主要進行以下步驟操作:
第一步: 如果使用者未有過授權記錄,且非本項目使用者,首先需要添加一個 USER(使用者),這個過程,使用者還沒有任何實際權限。
第二步: 賦權 USER(使用者)對象的操作權限,有以下方式賦權。
1) 可以是單獨的操作權限;
2) 通過 policy 方式賦權給使用者;
3) 将 ACL 和 policy 賦權給 role 再賦權給使用者。 如果資源是沒有設定 Label 的,則此時使用者已經擁有的該資源的權限。
第三步: 對于擁有 Label 的資源,例如:資料表、打包了資料表的 package,則還需要 賦權 Label 權限。有以下四鐘 Label 賦權:
1) 針對某個資料表的字段;
2) 針對某個資料表;
3) 針對某個 package;
4) 給某個 USER(使用者)一個批量的 Label 權限,不支援 ROLE。
各權限賦權過程及關系圖如下:

資料流程保護機制和 Package 關系介紹
ProjectProtection(資料流出保護機制)是 MaxCompute 防止項目内的資料批量流出的安全功能。 開啟資料流程保護後,如果互相之間沒有建立“TrustedProject Group” ,與其它 project 的資料賦權就必須通過 Package 方式進行,Package 賦權後,對方 package 可以自主賦權 Package 内的資源給組内使用者。
部分資源(例如某些常用表、UDF 等),如想放權給其 Package 管理,也可以通過 Package 的方式,将資源打包後賦權給其他 Project。
ProjectProtection(資料流出保護機制)支援做例外處理,部分特殊的業務場景,可以針 對應用的 IP 位址、産品雲賬号做 Exception 政策,以滿足特殊的資料流出需求。
DataWorks安全模型
DataWorks提供多人協同資料開發工作的平台,其安全模型需要考慮幾方面:
- 企業之間資料的安全隔離。
- 資料開發即ETL過程中的安全問題,如生産任務如何保障不可随意變更;如哪個成員可以進行代碼編輯調試,哪個成員可以進行釋出生産任務等。
- 由于底層MaxCompute有自己的安全模型,項目成員做ETL過程肯定會需要MaxCompute的各種資源(table、Resource、function、instance)的相關權限。
針對第一點,DataWorks的使用者認證,DataWorks對接RAM,雲賬号可作為主賬号進行開通并建立DataWorks項目,而項目成員必須為該主賬号的RAM子賬号不能是其他雲賬号。
另外,同個主賬号建立的項目作為一個組織,項目與項目之間的任務可以進行依賴配置;不同主賬号建立的項目之間資料(各種任務)隔離。
針對第二點,DataWorks通過業務劃分“開發項目”、“生産項目”進行任務開發調試和穩定生産的隔離;通過成員角色控制哪個成員可以進行任務開發調試,哪個成員可以運維生産任務等。
針對第三點,DataWorks在MaxCompute Project建立成功的同時,在MaxCompute Project裡對應DataWorks的角色建立role,并給不同role賦權。
MaxCompute和DataWorks權限關系
從前面介紹的MaxCompute和DataWorks兩個小節可以知道,通過MaxCompute的安全模型進行權限控制,并不會影響成員在DataWorks任何界面操作。通過DataWorks的使用者角色配置設定,是有可能影響成員的MaxCompute資源權限。下面我們詳細介紹這兩個産品之間權限如何交叉關聯。
項目關系
通過MaxCompute或DataWorks官網産品頁進入的控制台建立的項目,
DataWorks 兩種選擇:
- 簡單模式的項目實際上是建立了關聯綁定好的一個MaxCompute project和一個DataWorks項目空間,同時在MaxCompute 的project裡建立對應的幾個role,具體role權限後續小節會介紹。
- 标準模式的項目實際上是建立了關聯綁定好的一個開發(dev)MaxCompute project、一個生産(prod)MaxCompute project對應一個DataWorks項目空間。同時在MaxCompute 的project裡建立對應的幾個role,具體role權限後續小節會介紹。
賬号認證
雲賬号在DataWorks項目中隻能是主賬号即項目owner,在MaxCompute既可以為owner也可以為普通user。當通過DataWorks項目成員管理添加成員時隻能是添加目前項目主賬号對應的RAM子賬号。而MaxCompute可以通過指令行
add user xxx;
指令添加其他雲賬号。
成員角色權限關系
如前面小節(DataWorks安全模型)說的DataWorks為了解決項目成員在ETL過程中需要的MaxCompute相關資源權限,綁定了一些MaxCompute role。具體是指DataWorks項目固定有幾個成員角色,同時在對應MaxCompute project上建立了對應幾個role。另外MaxCompute project本身除了project owner,也還有一個admin role。
具體權限對應如下表:
MaxCompute角色 | MaxCompute資料權限 | DataWorks成員角色 | 平台權限特征 |
---|---|---|---|
project owner | MaxCompute project的owner,擁有所有project的權限。 | 無 | |
admin | 每一個project在建立時,會自動建立一個 admin 的role,并且為該role授予了确定的權限:可以通路project的所有對象、對user或role進行管理、對user或role進行授權。 與project Owner 相比,admin 角色不能将 admin 權限指派給使用者,不能設定項目空間的安全配置,不能修改項目空間的鑒權模型,admin 角色所對應的權限不能被修改。 project owner可以将這admin role賦權給一個user,讓該user代理安全管理。 | ||
role_project_admin | project/table/fuction/resource/instance/job/package 的所有權限 | 項目管理者 | 指項目空間的管理者,可對該項目空間的基本屬性、資料源、目前項目空間計算引擎配置和項目成員等進行管理,并為項目成員賦予項目管理者、開發、運維、部署、訪客角色。 |
role_project_dev | project/fuction/resource/instance/job/package/table 的所有權限 | 開發 | 開發角色的使用者能夠建立工作流、腳本檔案、資源和 UDF,建立/删除表,同時可以建立釋出包,但不能執行釋出操作。 |
role_project_pe | project/fuction/resource/instance/job 的所有權限,擁有package 的 read 權限和table 的 read/describe 權限。 | 運維 | 運維角色的使用者由項目管理者配置設定運維權限;擁有釋出及線上運維的操作權限,沒有資料開發的操作權限。 |
role_project_deploy | 預設無權限 | 部署 | 部署角色與運維角色相似,但是它沒有線上運維的操作權限。 |
role_project_guest | 訪客 | 訪客角色的使用者隻具備檢視權限,沒有權限進行編輯工作流和代碼等操作。 | |
role_project_security | 安全管理者 | 安全管理者僅在資料保護傘中用到,用于敏感規則配置,資料風險審計等 |
由上表可知,DataWorks角色對應的MaxCompute權限是固定的,一旦某個user通過DataWorks角色擷取MaxCompute相關role權限後,又通過指令行方式獲得MaxCompute的其他權限,會使該user在MaxCompute的權限與在DataWorks上看到的不一緻。
使用者和權限關系圖
一個DataWorks項目空間綁定一個MaxCompute project,此時根據DataWorks的項目管理——MaxCompute設定中的“MaxCompute通路身份”這個屬性設定決定DataWorks其他項目成員是否擁有MaxCompute project的權限。
标準模式,一個DataWorks項目空間綁定兩個MaxCompute project,此時固定MaxCompute的project一個是開發項目一個是生産項目,DataWorks其他項目成員根據成員角色擁有MaxCompute 開發project對應的role權限,但沒有MaxCompute生産project的權限,MaxCompute 任務需要走釋出流程釋出到生産project後以owner賬号送出到MaxCompute執行。
使用者與權限管理
使用者管理
操作類型 | DataWorks使用者管理 | MaxCompute使用者管理 |
---|---|---|
操作描述 | 準确添加和管理使用者,應删除或鎖定,無屬主、閑置以及離職人員的賬号權限,嚴控管理者、運維權限。 | 應删除或鎖定,無屬主、閑置以及離職人員的賬号權 限。 通過DataWorks新增的使用者,注意會可能授權于預設的 role。 |
操作角色 | owner或admin role | |
現狀檢視 | DataWorks項目管理頁子產品的——項目成員管理檢視現有成員及角色,并确認各個成員權限的合理性。 | 檢視項目下的使用者: ; 檢視指定使用者擁有的權限: |
賦權操作 | DataWorks項目管理頁子產品的——項目成員管理添加成員和配置設定角色。注意: 1.隻能添加該項目負責人賬号下的RAM子賬号為項目成員; 2.添加一個成員,并配置設定角色,可能會在MaxCompute 賦予預設的 role 權限。具體可參看前面《MaxCompute & DataWorks使用者和權限關系圖》小節 | 成員僅加入 MaxCompute project,不在DataWorks 項目成員中展現,且無任何權限。 需要結合“對象操作”、“Role 權限”、“label 權限”才能使用,是以應關注成員是否擁有“對象操作”和“label 權限”,并對相應授權進行清理。 另外,可以添加雲賬号和RAM子賬号。 在項目空間中添加使用者: |
回退操作 | 清理成員或對應角色權限,删除後,會自動清除對應 MaxCompute 内的 user 和預設 role。 | 在項目空間中移除使用者: |
角色管理
MaxCompute role管理 | DataWorks角色管理 | |
---|---|---|
準确的建立role并配置role權限,及時清理離職或轉崗人員的賬号,清理role中不必要開放的資源和權限。 MaxCompute project建立成功後除了預設有admin role外,DataWorks還給建立幾個role具體可參考前面《成員角色權限關系》小節。 | 準确的配置設定角色,成員工作性質發生改變需及時改變角色,嚴格控制項目管理者和運維角色的配置設定。 | |
project owner或admin | ||
檢視目前project所有role: 檢視role中的權限: 檢視某使用者在什麼role中: 檢視某個role都指派給哪些user:目前暫不支援! | DataWorks項目管理->成員管理頁面,可以點選每個角色檢視該角色下的成員。 | |
MaxCompute除了預設的role,還可以自定義role,通過指令自定義role權限并将role授權給user。 建立role: 給角色授權: 添加使用者到角色: 此外,DataWorks的項目管理->MaxCompute進階配置->自定義使用者角色頁面,可以通過界面方式建立MaxCompute自定義role、對role進行授權、将role授權給成員,但是注意通過指令行建立的role不會在這個界面顯示。 | DataWorks角色是固定的不能自定義,成員添加到DataWorks項目時勾選角色配置設定給成員,該成員既可擁有對應角色的權限。 | |
删除角色中的使用者: 撤銷對角色的授權: 删除角色: 如果是通過DataWorks的項目管理->MaxCompute進階配置->自定義使用者角色頁面建立的role,也通過這個頁面進行回退操作。 | DataWorks的角色不能删除,隻能将某個成員的角色去掉。 |
ACL(對象操作)的授權管理
說明 | |
---|---|
回收非必須必要的對象操作授權,操作權限涉及多種操作對象和類型,應逐一确認。 | |
project owner或admin role | |
檢視指定使用者的權限: 檢視目前使用者的權限: 檢視指定對象的授權清單: 檢視某 package 賦權情況案例: | |
進行某對象的操作賦權: 操作、主體、客體類型表達式: actions 類型: object 類型: subject 類型: 操作、主體、客體類型,詳細說明請看 官方文檔 。 | |
回收某對象的操作權限: |
Role授權管理
package授權管理
開啟 ProjectProtection 的項目,如果沒有在同一個互信項目組(TrustedProject Group),則必須使用 package 方式賦權,package 賦權有兩種方式。確定package 合理打包和賦權,無閑置 package 賦權。 | |
1. 了解本項目 Package 建立及賦權情況: 檢視已建立和已安裝的 Package 清單: 檢視 Package 詳細資訊: 2. 本項目安裝的 Package ,對使用者的授權情況: | |
Package建立者: 1. 建立 Package: 2. 将分享的資源添加到 Package: project_object 表達式: 3. 許可其他項目空間使用 Package: Package使用者: 1. 安裝 Package: 2. 将 package 賦權給使用者、角色,package賦權給具體使用者時,不能指定 label。(project owner 或admin 都可操作) 參考官方文檔 ,一般将Package的 read權限賦給對象既可滿足對象通路package裡的資源。 | |
1. 撤銷其他項目空間使用 Package 的許可: 2. 删除 Package: 3. 将分享的資源移出 Package: 4. 撤銷 package 的使用者、角色的權限。 |
Label授權管理
Maxcompute的字段、表、package 分為 1~4 個等級,應根據使用者實際需要,賦予對應的 label 權限。 | |
1. 檢視一個使用者能通路哪些敏感資料集: 2. 檢視一個敏感資料表能被哪些使用者通路: 3. 檢視一個使用者對一個資料表的所有列級别的 Label 權限: | |
1. 給使用者單個表或字段的安全許可标簽。 舉例: 2. 給使用者授權整個項目的安全許可标簽。 3. 控制 package 安裝者對 package 中敏感資源的許可通路級别 4. 将 package 賦權給使用者、角色,package 賦權給具體使用者時,不能指定 label。 | |
1. 撤銷使用者單個表或字段的安全許可标簽。 【撤銷授權】: 【清理過期的授權】: 舉例: 2. 更改使用者授權整個項目的安全許可标簽,預設等級為 0。 3. 更改 package 安裝者對 package 中敏感資源的許可通路級别,調整為其他級别,預設為 0。 |
安全功能啟用
設定 ProjectProtection(資料流出保護機制)
項目空間的資料保護主要解決“不允許使用者将資料轉移到項目空間之外”的需求。
設定 ProjectProtection 避免項目批量資料下載下傳到本地電腦,出現批量資料洩露風險。 | |
檢視現狀 | 執行指令: 查是否 ProjectProtection=true |
操作設定 | 設定 ProjectProtection 機制,預設為 false; 兩個方法設定: DataWorks界面上設定: 進入DataWorks項目管理->MaxCompute設定->基本設定頁面,把“項目空間資料保護”屬性打開。 指令行方式執行MaxCompute指令: 開啟後由于部分公共賬号,個人使用者因種種原因需要資料流出權限,根據需要附帶 exception 例外政策(白名單),exception policy具體看更新篇介紹。 以下情形建議配置 Exception 政策: 1) 需要資料流出權限的應用系統雲賬号或 IP 位址。 2) 個人賬号開通白名單,應指定允許下載下傳的表。 添加項目互信: 對于資料可互通的 project 可以通過項目互信的方式確定資料順利流轉。 檢視目前project 中的所有 TrustedProjects: 在目前 project 中添加一個 TrustedProject 在目前 project 中移除一個 TrustedProject: 未添加TrustedProject 的項目,申請本項目資料,需要以 package 方式授權。 |
關閉 ProjectProtection 機制: 移除 TrustedProject: |
開啟 Label Security(列及安全控制)
打開 LabelSecurity 確定字段級别安全控制生效, 項目空間中的 LabelSecurity 安全機制預設是關閉的。 | |
查是否 LabelSecurity=true | |
開啟 LabelSecurity 機制,預設為 false。 | |
關閉 LabelSecurity 機制: 操作前,需要确認外部 project 資料的依賴情況,是否賦于了表的 label 權限。 |
合理設定字段的 Label
MaxCompute資料的敏感性可以分為 0~4 級。所有資料表,可以設定安全等級,避免資料表出現不合理授權通路情形。 | |
檢視 MaxCompute表字段的等級,兩個方式: 方式一,執行指令: 方式二:在DataWorks的資料管理檢視表詳情中的字段資訊。 | |
給表字段設定安全級别可以通過兩種方式: 方式一【推薦此方式】: DataWorks的資料管理裡,建立表或者編輯已有表的字段資訊,均可以設定字段安全級别。(注意,隻有Project的LabelSecurity=true,資料管理頁面才可見字段安全級别屬性。) 方式二,執行指令: 注意:通過指令行設定自動安全級别後,在DataWorks的資料管理界面,對應表字段安全等級不同步,是以,建議通過DataWorks對表的字段進行安全級别設定 | |
将安全等級調整回原來等級。注意:字段安全等級的上調,會導緻原有的授權失效(涉及 package 授權、生産賬号和個人賬号),調整前必須通知到受影響使用者,以減少影響。 |
設定通路Project的IP白名單
設定IP白名單,指定白名單清單中的IP(console或者SDK所在的出口IP)能夠通路這個Project。 注: 1.目前project的所有user(包括主賬号)都會受限。 2.DataWorks的機器預設在白名單内,是以通過DataWorks送出MaxCompute任務不會受此限制。 | |
通過console執行指令: 檢視對應的‘odps.security.ip.whitelist= ’若等号後面為空則未設定白名單清單 | |
設定前請特别注意:在白名單list加上自己目前機器IP,以免把自己屏蔽。 白名單中IP清單的表示格式有三種。 單純IP:例如101.132.236.134。 子網路遮罩:100.116.0.0/16。 網段:101.132.236.134-101.132.236.144。 設定IP白名單後,您需要等待五分鐘後才會生效。 若需更精細化管理,也可以通過policy授權,可參考後面的案例《project Policy 案例》。 | |
IP白名單清空後,MaxCompute就認為Project關閉了白名單功能。 |
設定禁止DataWorks的select結果下載下傳到本地
描述 | 開發者通過DataWorks進行資料分析,通常會屏顯在IDE上并且可以下載下傳結果。project設定ProjectProtection為true後,在本project中隻要有表的讀取權限,依然可以通過DataWorks的開發界面select後進行結果下載下傳。 |
DataWorks管理者 | |
進入DataWorks的項目管理->項目設定頁面,檢視“在本項目中能下載下傳select結果”屬性是否打開。 | |
進入DataWorks的項目管理->項目設定頁面,關閉“在本項目中能下載下傳select結果”開關。 | |
進入DataWorks的項目管理->項目設定頁面,打開“在本項目中能下載下傳select結果”開關。 |
如何通過其它雲服務提高安全管理
使用MaxCompute過程中,會關聯使用到其他的雲服務,是以也需要考慮通過其他雲服務提高MaxCompute的安全管理。本章節主要介紹通過DataWorks使用MaxCompute時,添加項目成員必須會用到RAM子賬号,那麼如何在RAM子賬号服務上提高安全管理。
前面《MaxCompute安全模型》章節中提到MaxCompute的使用者認證“支援 雲賬号 和 RAM 賬号 兩種賬号體系,對于RAM賬号,僅識别賬号體系不識别RAM權 限體系,即可将主賬号自身的任意 RAM 子賬号加入 MaxCompute 的某一個項目中,但 MaxCompute 在對該 RAM 子賬号做權限驗證時,并不會考慮 RAM 中的權限定義。” 是以,我們隻需要從RAM子賬号登入驗證入手進行安全控制。
子賬号密碼強度設定
如果您允許子使用者更改登入密碼,那麼應該要求他們建立強密碼并且定期輪換。
您可以通過 RAM 控制台設定密碼政策,如最短長度、是否需要非字母字元、必須進行輪換的頻率等等。
子賬号登入掩碼設定
通過設定網絡掩碼決定哪些IP位址會受到登入控制台的影響,子使用者必須隻能從指定的IP位址進行登入。
及時撤銷使用者不再需要的權限
當一個子賬号對應員工由于工作職責變更而不再使用權限時,應該及時将對應子賬号的權限撤銷。
案例
具體請看
《MaxCompute安全管理指南-案例篇》更多MaxCompute的相關問題讨論可以加入釘釘群與衆多開發者一起讨論: