在DataWorks中實現指定UDF只能被指定帳戶訪問

背景

以前寫過一篇文章是關於「DataWorks和MaxCompute內部權限體系的區別」有興趣的朋友能夠點擊閱讀查看詳情。可是仍是有些同窗會問,我如何在DataWorks中實現個人具體某個Resource,Table仍是UDF只能被我指定的用戶所使用的權限管控。這個UDF可能涉及到數據的加解密算法,屬於數據安全管控範圍了。html

常見方案

  1. package方案,經過打包受權進行權限精細化管控。
  2. DataWorks上新建角色(管理>MaxCompute高級配置>自定義用戶角色)來進行高級管控。
  3. Role policy方案,經過role policy來自定義role的權限集合。

可選方案

(1)package方案,經過打包受權進行權限精細化管控。
package基本知識,一般是爲了解決跨項目空間的共享數據及資源的用戶受權問題。當經過package後會發現給予其DataWorks開發者角色後用戶擁有了全部權限。不可控。算法

  • 首先,普及你們熟知的DataWorks開發者角色的權限以下:

image

從權限配置上看明顯不符合咱們的要求,明顯看出來其對project中的package、functions、resources和table默認有所有權限。
A projects/sz_mc/packages/*: *
A projects/sz_mc/registration/functions/*: *
A projects/sz_mc/resources/*: *
A projects/sz_mc/tables/*: *json

  • 其次,經過DataWorks添加了子帳號並賦予了開發者角色,具體以下:

image

上述的普及應該讓你們明白,經過打package和DataWorks默認的角色都不可以知足咱們的需求。好比我將子帳號RAM$yangyi.pt@aliyun-test.com:ramtest並給予開發者角色,那麼他就默認擁有這個當前項目裏全部Object的全部action權限,具體詳見安全

(2)DataWorks上新建角色(管理>MaxCompute高級配置>自定義用戶角色)來進行高級管控。可是在DataWorks-MaxCompute高級配置中只能針對某個表/某個項目進行受權,不能對resource和udf進行受權。測試

(3)role policy方案,經過policy能夠精細化的管理到具體用戶針對具體資源的具體權限粒度,能夠知足咱們的場景需求。可是policy機制的官方文檔一直沒有公開,主要考慮到用戶是否熟悉policy不然使用起來會形成必定的困擾和問題,耽誤開發效率。spa

Role policy方案

爲了安全起見,建議初學者找個測試項目來驗證policy。如下操做都是經過MaxCompute console完成,具體詳見:console配置3d

① 建立默認拒絕訪問UDF角色

step1:建立一個role  denyudfrole,以下:
odps@ sz_mc>create role denyudfrole;code

step2:建立policy受權文件,以下:htm

{
"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"
}
 ] }

step3:設置和查看role policy。以下:
odps@ sz_mc>put policy /Users/yangyi/Desktop/role_policy.json on role denyudfrole;

imageblog

step4:添加用戶至role denyudfrole。
odps@ sz_mc>grant denyudfrole to RAM$yangyi.pt@aliyun-test.com:ramtest;

至此咱們驗證下,以子帳號RAM$yangyi.pt@aliyun-test.com:ramtest登陸MaxCompute console。
一、登陸console確認角色。

image

二、show grants查看當前登陸用戶權限。

image

能夠看出來,該RAM子帳號有兩個角色,一個是role_project_dev其實就是DataWorks默認的開發者角色,一個是咱們剛自定義建立的denyudfrole。

三、驗證自建UDF以及依賴的包的權限。

image

image

驗證成功,該子帳號在擁有了DataWorks開發者角色的前提下並無自建UDF:getregion的讀權限。可是離咱們指望只能指定某個用戶來訪問該UDF還差最後一步。須要結合project policy來解決此需求。

配置project policy

step1:編寫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$yangyi.pt@aliyun-test.com:yangyitest",
"Action":["odps:Read","odps:List","odps:Select"],
"Resource":"acs:odps:*:projects/sz_mc/registration/functions/getregion"
}] }

step2:設置和查看policy。
odps@ sz_mc>put policy /Users/yangyi/Desktop/project_policy.json;

image

驗證下:

image

跑一個SQL看看:

image

查看依賴的包:

image

--->到此爲止,咱們完成了需求。指定項目下只有指定的RAM子帳號可以訪問指定的UDF和依賴的包。

總結

有些同窗到這裏可能清晰的認識了DataWorks和MaxCompute的安全體系,可是有些同窗可能還比較暈。總結以下:

  1. 不想其訪問具體資源的,在DataWorks中添加數據開發者權限後再在MaxCompute console上按照role policy配置爲拒絕訪問權限。
  2. 指定帳戶訪問資源的,在DataWorks配置數據數據開發者權限後再再MaxCompute console上按照project policy配置爲容許訪問權限。
  3. 具體實例詳見上述,能夠知足咱們的精細化管理需求。
相關文章
相關標籤/搜索