MaxCompute建立隻有查詢權限的自定義角色
需求場景
在很多的資料開發場景下,MaxCompute項目管理者需要能夠提供給某些角色或團隊(如開發人員、運維人員)對項目内所有表具備特定權限。例如,某些客戶可能需要在生産項目中,給ETL開發團隊賦予所有表(或者所有ods開頭的表)隻讀權限,當項目内建立了新表後,對應角色人員可以自動擷取到新表的權限,友善開發人員能夠快速處理線上資料問題排查。
MaxCompute原有的權限模型提供的ACL授權方式,需要明确指定授權對象才能授權,ACL方式不支援通配符方式對新增表做授權。本文通過一個自定義角色的場景,介紹使用MaxCompute新更新的權限模型,利用ACL實作對特定規則的表進行授權。
前置條件
您的MaxCompute項目需要支援MaxCompute新權限模型。截止目前(2020/1/6),MaxCompute新權限模型正在陸續灰階釋出,如果您在參考本文檔操作時不能正确執行,很可能您的項目還沒有開放新權限模型,您可以主動通過工單進行"權限模型2.0"功能申請。如何申請,請參考
這裡的說明。
MaxCompute項目的内建角色介紹
通過Dataworks的控制台建立的MaxCompute項目,在MaxCompute Project中預置了以下内建角色(Predefined roles,
文檔連結):

以上内建角色,沒有提供對項目内所有表隻讀的角色,不滿足文前的需求場景。需要建立一個自定義角色來配置可以滿足的角色。
建立僅查詢資料的MaxCompute自定義角色
在MaxCompute項目中建立自定義角色可以通過MaxCompute指令行方式(MaxCompute用戶端工具)和Dataworks的Web Console來建立并授權。
在指令行工具操作
使用MaxCompute指令行工具(
odpscmd),通路需要做授權管理的MaxCompute項目。具體操作如下:
建立角色并賦權
1.在目标項目(本demo的項目名稱為your_project_name)中建立一個自定義角色_
create role select_only_role;
2.為自定義角色select_only_role對項目内所有表(包括未來項目内建立的表)賦予Describe,Select權限_
_1) 項目下的所有表_
GRANT Describe,SELECT ON table TO Role select_only_role privilegeproperties("policy" = "true");
2)_項目下的所有符合特定規則的表_
GRANT Describe,SELECT ON table orders TO Role select_only_role privilegeproperties("policy" = "true");
3.給select_only_role角色賦予在your_project_name項目内運作作業(CreateInstance,如送出SQL作業)、檢視項目内的資料對象(List,如show tables,list resources等)_
GRANT CreateInstance,List ON project your_project_name TO Role select_only_role ;
_4.給使用者賦予自定義角色權限(也可以在Dataworks的自定義角色web-ui界面裡,添加某個成員到該自定義角色下)_
grant role select_only_role to RAM$account@company_name.com:ram_account01;**
驗證測試
上面剛剛建立了自定義角色select_only_role(這裡假設這個角色授權僅能通路orders開頭的表),同時将這個角色授權給了子賬号ram_account01。
在項目中找到一張在ram_account01在獲得select_only_role角色前,不能通路的表orders_test。通過指令,可以檢視到表orders_test目前對于角色select_only_role提供了Describe和Select權限。
odps@ your_project_name>show grants on table orders_test;
`Authorization Type: Implicit
<br />
AG project_owner/ALIYUN$account@company_name.com: All
<br />
AG object_creator/ALIYUN$account@company_name.com: All`
Authorization Type: Policy
`
A role/role_project_admin: *
<br />
A role/role_project_dev: *
<br />
A role/role_project_pe: Describe | Read
<br />
A role/role_project_scheduler: *
<br />
A role/select_only_role: Describe | Select`
同時,ram_account01通路MaxCompute項目,可以檢視orders_test表的表結構和資料。
odps@ your_project_name>select * from orders_test limit 10;
在Dataworks中操作
1.在dataworks的項目管理中建立自定義角色select_only_role
2.點選角色右側的"權限管理"按鈕,勾選添加List和CreateInstance權限
3.在dataworks的臨時查詢視窗,通過ACL指令為建立角色授權。
4.向某個子賬号授予select_only_role角色的權限。
在自定義使用者角色功能頁面中,選擇自定義角色的成員管理,将某個子賬号添加至該角色下,完成角色授權。
5.查詢被授權的表,驗證是否獲得權限
除此之外,還可以繼續測試是否可以寫入、删除該表,進一步驗證擷取的權限是否符合預期。
結束語
MaxCompute新的權限模型,支援在ACL授權中使用通配符,在原先必須明确指明已經存在的授權對象基礎上,可以通過通配符指定所有表或者特定規則表,在角色上實作更靈活的授權管理需求。更多安全管理的介紹,請檢視
産品官方文檔