開箱即用的安全方案:MaxCompute資料安全方案介紹
MaxCompute 是一個支援多租戶的統一大資料處理平臺,不同的使用者對資料安全需求不盡相同。為了滿足不同租戶對資料安全的靈活需求,MaxCompute 支援專案空間級別的安全配置,ProjectOwner 可以定製適合自己的外部賬號支援和鑑權模型並且在某種程度上保障Project的資料安全。
通常情況下,常見的開發模式為__MaxCompute+DataWorks__方式,針對這種場景下資料安全方案如下:
一、禁止資料下載到本地
禁止資料流出或下載本地
方式①: 資料保護機制也被稱之為開啟專案空間資料保護,可以通過MaxCompute console 開啟服務端禁止資料流出:
set projectProtection=true --設定ProjectProtection規則:資料只能流入,不能流出。 --預設時,ProjectProtection不會被設定,值為false。
方式②: 那麼更多開發者通過DataWorks進行資料分析,通常會屏顯在IDE上並且可以下載結果,這種可以通過專案管理 > 專案配置中開啟“在本專案中能下載select結果”,具體如下:
那麼這種情況下,在DataWorks查詢結果頁面就不可以通過“下載”按鈕進行下載資料到本地。
開啟資料保護機制後的資料流出方法
在您的Project被設定了ProjectProtection之後,您可能很快就會遇到這樣的需求:user1向您提出申請,她的確需要將某張表的資料匯出您的專案空間。
而且經過您的審查之後,那張表也的確沒有洩漏您關心的敏感資料。為了不影響user1的正常業務需要,MaxCompute為您提供了在ProjectProtection被設定之後的兩種資料匯出途徑。
方式①: ProjectOwner設定ExceptionPolicy,針對已經開啟專案資料保護的進行開例外。具體方式如下(需要通過MaxCompute console操作):
SET ProjectProtection=true WITH EXCEPTION <policyFile>
這種policy不同於Policy授權(儘管它與Policy授權語法完全一樣),它只是對專案空間保護機制的例外情況的一種描述,即所有符合policy中所描述的訪問情形都可以打破ProjectProtection規則。>>>policy詳細文件
{
"Version": "1",
"Statement":
[{
"Effect":"Allow",
"Principal":" [email protected]",
"Action":["odps:Select"],
"Resource":"acs:odps:*:projects/alipay/tables/table_test",
"Condition":{
"StringEquals": {
"odps:TaskType":["DT", "SQL"]
}
}
}]
}
ProjectProtection是一種資料流向的控制,而不是訪問控制。只有在使用者能訪問資料的前提下,控制資料流向才是有意義的。
*** 另外,可以通過show grants [for <username>
] [on type <objectType>
] 檢視某使用者許可權,檢視是否加例外成功。
方法②: 設定TrustedProject,若當前專案空間處於受保護狀態,如果將資料流出的目標空間設定為當前空間的TrustedProject,那麼向目標專案空間的資料流向將不會被視為觸犯ProjectProtection規則。可以通過如下命令方式進行設定(需通過MaxCompute console進行):
list trustedprojects;
--檢視當前project中的所有TrustedProjects
add trustedproject <projectname>;
--在當前project中新增一個TrustedProject
remove trustedproject <projectname>;
--在當前project中移除一個TrustedProject
二、IP白名單控制
MaxCompute支援Project級別的IP白名單。
- 設定IP白名單後,只有白名單列表中的IP(console或者SDK所在的出口IP)能夠訪問這個Project。
- 設定IP白名單後,您需要等待五分鐘後才會生效。
- 切記在設定白名單的時候,加上自己當前機器IP,以免把自己遮蔽。
setproject odps.security.ip.whitelist=101.132.236.134,100.116.0.0/16,101.132.236.134-101.132.236.144;
白名單中IP列表的表示格式有三種。
- 單純IP:例如101.132.236.134。
- 子網掩碼:100.116.0.0/16。
- 網段:101.132.236.134-101.132.236.144。
更精細化的管理
當然MaxCompute Policy機制也可以實現控制某個使用者/或者角色的使用者從具體IP地址來訪問具體資源(表、UDF、資源)等。Policy樣例:
{
"Version": "1",
"Statement":
[{
"Effect":"Allow",
"Principal":"[email protected]",
"Action":["odps:CreateTable","odps:CreateInstance","odps:List"],
"Resource":"acs:odps:*:projects/prj1",
"Condition":{
"DateLessThan": {
"acs:CurrentTime":"2013-11-11T23:59:59Z"
},
"IpAddress": {
"acs:SourceIp":"10.32.180.0/23"
}
}
},
{
"Effect":"Deny",
"Principal":"[email protected]",
"Action":"odps:Drop",
"Resource":"acs:odps:*:projects/prj1/tables/*"
}]
}
授權使用者[email protected]只能在"2013-11-11T23:59:59Z"這個時間點之前、只能從“10.32.180.0/23”這個IP段提交請求, 只允許在專案空間prj1中執行CreateInstance, CreateTable和 List操作,禁止刪除prj1下的任何table。具體可以參考Policy文件。
三、資料保護傘(資料脫敏)
可以針對敏感資料在DataWorks屏顯進行加**顯示,如下圖所示:
注意:資料保護傘是DataWorks的一個模組,如果使用了資料保護傘且進行了資料脫敏,但是通過console進行tunnel download還是未脫敏狀態。
四、細粒度的許可權管控
1、列級別LabelSecurity訪問控制 專案空間中的LabelSecurity安全機制預設是關閉的,ProjectOwner可以自行開啟。
【應用場景】 場景說明:user_profile是某專案空間中的一張含有敏感資料的表,它包含有100列,其中有5列包含敏感資料:id_card, credit_card, mobile, user_addr, birthday. 當前的DAC機制中已經授權了所有使用者對該表的Select操作。ProjectOwner希望除了Admin之外,所有使用者都不允許訪問那5列敏感資料。
ProjectOwner操作步驟如下:
set LabelSecurity=true;
--開啟LabelSecurity機制
set label 2 to table user_profile(mobile, user_addr, birthday);
--將指定列的敏感等級設定為2
set label 3 to table user_profile(id_card, credit_card);
--將指定列的敏感等級設定為3
Alice是專案空間中的一員,由於業務需要,她要申請訪問user_profile的mobile列的資料,需要訪問1周時間。專案空間管理員操作步驟如下:
GRANT LABEL 2 ON TABLE user_profile TO USER alice WITH EXP 7;
2、Role Policy管理自定義Role 很多使用者會因為DataWorks內建的資料開發、運維、管理員等角色不能滿足其個性化需求,會基於ACL建立符合自己業務邏輯的角色如資料分析師、ETL開發等,基於這些role如何進行復雜的授權,如批量授予ods_開頭的表許可權,但限制條件的,以及Deny型別的角色,這個時候就需要結合Role policy來精細化管理。
- 一次操作對一組物件進行授權,如所有的函式、所有以”taobao”開頭的表。
- 帶限制條件的授權,如授權只會在指定的時段內才會生效、當請求者從指定的IP地址發起請求時授權才會生效、或者只允許使用者使用SQL(而不允許其它型別的Task)來訪問某張表。
方式①: Policy操作程式碼如下所示:
get policy --讀取專案空間的Policy
put policy <policyFile> --設定(覆蓋)專案空間的Policy
get policy on role <roleName> --讀取專案空間中某個角色的Policy
put policy <policyFile> on role <roleName> --設定(覆蓋)專案空間中某個角色的Policy
方式②: 通過DataWorks-專案管理-MaxCompute配置-自定義使用者角色中進行。
建立步驟:
- 【新增角色】點選新建角色,填寫角色名稱,勾選需要加入該角色的賬號(子賬號使用者)。
- 【角色授權】包括兩種一個是表一個是專案。以表為例:
- 選擇需要授權的表,並賦予相應的操作許可權,如下所示針對具體表賦予具體許可權。
說明:上述兩種方式最大的區別就是,role policy可以進行批量表授權,如以taobao_開頭的。但是DataWorks大的方式需要逐個表來進行篩選並配置許可權。
四、JDBC 2.4(資料安全加固)
在JDBC中使用資料安全加固方案具體步驟:
- 下載JDBC 2.4(建議)
- 開啟專案保護SET ProjectProtection=true,不需要加exception例外,具體可以想見專案保護機制章節。
- 開啟控制返回資料條數:setproject READ_TABLE_MAX_ROW=1000;
- 基於JDBC的工具進行查詢,資料返回條數會控制在1000條以內。
說明:如果使用的版本小於JDBC 2.4,並且開啟了專案保護那麼通過JDBC方式會直接報錯(無許可權)。
原文連結 本文為雲棲社群原創內容,未經允許不得轉載。