本文為您介紹如何實現將資源(表、UDF等)設置為僅能被指定的用戶訪問。此方法涉及數據的加密解密算法,屬于數據安全管控范疇。
前提條件
您需要提前安裝MaxCompute客戶端,以實現指定UDF被指定用戶訪問的操作。詳情請參見安裝并配置MaxCompute客戶端。
背景信息
設置用戶訪問權限的常見方法有如下幾種:
Package方案,通過打包授權進行權限精細化管控。
Package用于解決跨項目空間的數據共享及資源授權問題。通過Package授予用戶開發者角色后,用戶擁有所有權限,風險不可控。詳情請參見基于Package跨項目訪問資源。
下圖為DataWorks開發者角色的權限。
由上圖可見,開發者角色對工作空間中的Package、Functions、Resources和Table默認有全部權限,不符合權限配置的要求。
下圖為通過DataWorks添加子賬號并賦予開發者角色的權限。
由此可見,通過打包授權和DataWorks默認的角色都不能滿足特定用戶訪問指定UDF的需求。例如,授予子賬號
RAM$xxxxx.pt@aliyun-test.com:ramtest
開發者角色,則默認該子賬號擁有當前工作空間中全部對象的所有操作權限,詳情請參見用戶授權。在DataWorks中新建角色進行權限管控。
在DataWorks工作配置頁面的MaxCompute高級配置頁面,可以對自定義用戶角色進行權限管控。在該頁面只能針對某個表或項目進行授權,不能對資源和UDF進行授權。
說明更多有關DataWorks工作空間的MaxCompute屬性介紹,請參見配置MaxCompute引擎權限。
Role Policy結合Project Policy實現指定用戶訪問指定UDF。
通過Policy可以精細化地管理具體用戶對特定資源的具體權限粒度。
說明為了安全起見,建議初學者使用測試項目來驗證Policy。
因此您可以通過Policy方案實現特定UDF被指定用戶訪問:
如果您不想讓其他用戶訪問工作空間內具體的資源,在DataWorks中添加數據開發者權限后,再根據Role Policy的操作,在MaxCompute客戶端將其配置為拒絕訪問權限。
如果您需要指定用戶訪問指定資源,在DataWorks中添加數據開發者權限后,再根據Project Policy的操作,在MaxCompute客戶端將其配置為允許訪問權限。
操作步驟
創建默認拒絕訪問UDF的角色。
在客戶端輸入如下命令創建角色denyudfrole。
create role denyudfrole;
創建Policy授權文件,如下所示。
{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": ["odps:Read","odps:List"], "Resource": "acs:odps:*:projects/sz_mc/resources/getaddr.jar" }, { "Effect": "Deny", "Action": ["odps:Read","odps:List"], "Resource": "acs:odps:*:projects/sz_mc/registration/functions/getregion" } ] }
設置Role Policy。
在客戶端執行如下命令,設置Role Policy文件的存放路徑。
put policy /Users/yangyi/Desktop/role_policy.json on role denyudfrole;
在客戶端執行如下命令查看Role Policy。
get policy on role denyudfrole;
返回結果如下。
在客戶端執行如下命令添加子賬號至role denyudfrole。
grant denyudfrole to RAM$xxxx.pt@aliyun-test.com:ramtest;
驗證拒絕訪問UDF的角色是否創建成功。
登錄客戶端輸入
whoami;
確認角色。通過
show grants;
查看當前登錄用戶權限。通過查詢發現該RAM子賬號有兩個角色,一個是role_project_dev(即DataWorks默認的開發者角色),另一個是剛自定義創建的denyudfrole。
驗證自建UDF以及依賴的包的權限。
通過上述驗證發現,該子賬號在擁有DataWorks開發者角色的前提下,沒有自建UDF(getregion)的讀權限。您還需要結合Project Policy來實現該UDF只能被指定的用戶訪問。
配置Project Policy。
編寫Policy。
{ "Version": "1", "Statement": [{ "Effect":"Allow", "Principal":"RAM$yangyi.pt@aliyun-test.com:yangyitest", "Action":["odps:Read","odps:List","odps:Select"], "Resource":"acs:odps:*:projects/sz_mc/resources/getaddr.jar" }, { "Effect":"Allow", "Principal":"RAM$xxxx.pt@aliyun-test.com:yangyitest", "Action":["odps:Read","odps:List","odps:Select"], "Resource":"acs:odps:*:projects/sz_mc/registration/functions/getregion" }] }
設置Role Policy。
在客戶端執行如下命令,設置Role Policy文件的存放路徑。
put policy /Users/yangyi/Desktop/project_policy.json;
在客戶端執行如下命令查看Role Policy。
get policy;
返回結果如下。
通過
whoami;
和show grants;
進行驗證。運行SQL任務,查看是否僅指定的RAM子賬號能夠查看指定的UDF和依賴的包。
指定的RAM子賬號查看指定的UDF。
查看依賴包。