本文為您介紹如何?將資源(表、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。
查看依賴包。