背景:使用者在使用MaxCompute與DataWorks這兩種權限模型不清楚,并且對于相關MaxCompute的權限執行語句也不太熟悉,以至于在自己的實際操作中不能建立完整的權限政策,導緻權限控制的混亂,甚至在開發過程中時常遇到權限問題的錯誤,導緻延誤業務的推動進展,該篇文檔集主要的權限知識點與一體,常用的MaxCompute權限語句,以及經典的開發環境和生産環境之間的賦權示例給大家做出做出介紹。
一、MaxCompute的安全模型

七、成員管理的相關語句
檢視成員:
Project owner或admin指令行執行
List users; --檢視成員清單
Show grants for <username>; -- 檢視某成員權限
添加成員:
1.DataWorks添加RAM子賬号;
2.Project owner或admin指令行方式執行
add user <username> --可為RAM子賬戶或其他雲賬戶
删除成員:
1.DataWorks删除RAM子賬号;
2.Project owner或admin指令行方式執行:
remove user <username>
八、角色管理的相關語句:
檢視角色:
檢視role清單:List roles;
檢視role中的權限:describe role <role_name>
檢視某使用者在什麼role中:show grants for <username>
檢視某個role都指派給那些user:目前不支援!
建立角色:
建立role:Create role <role_name>;
給角色授權:grant actions on object to <role_name>
添加使用者到角色:grant <roleName> TO <full_username>
删除角色:
删除角色中的使用者:REVOKE <roleName> FROM <full_usename>;
撤銷對角色的授權:revoke <privList> on <objType> <objName> from role <rolename>
删除角色: DROP ROLE <roleName>
九、policy授權介紹
Policy授權則是⼀種基于主體的授權。通過Policy授權的權限資料(即通路政策)被看做是授權主體的⼀種 ⼦資源。隻有當主體(⽤戶或⻆⾊)存在時才能進⾏Policy授權操作。當主體被删除時,通過Policy授權的 權限資料會被⾃動删除。 Policy授權使⽤MaxCompute⾃定義的⼀種通路政策語⾔來進⾏授權,允許或 禁⽌主體對項⽬空間對象的通路權限。
Policy授權機制,主要解決ACL授權機制⽆法解決的⼀些複雜授權場景,⽐如:
- ⼀次操作對⼀組對象進⾏授權,如所有的函數、所有以 “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
policy基本術語
- 主體(Principal) 主體(Principal)是指通路政策中的權限被指派的對象。⽐如,通路政策”允許張三在 2011年12⽉31⽇之前對資源SampleBucket執⾏CreateObject操作”中的主體是”張三”。
- 操作(Action) 操作(Action)是指主體對資源的通路⽅法。⽐如,通路政策”允許張三在2011年12⽉ 31⽇之前對資源SampleBucket執⾏CreateObject操作”中的操作是”CreateObject”。
- 資源(Resource) 資源(Resource)是指主體請求通路的對象。⽐如,通路政策”允許張三在2011年12 ⽉31⽇之前對資源SampleBucket執⾏CreateObject操作”中的資源是”SampleBucket”。
- 通路限制(Access Restriction) 通路限制(Access Restriction)是指權限⽣效的限制條件。⽐如,訪 問政策”允許張三在2011年12⽉31⽇之前對資源SampleBucket執⾏CreateObject操作”中的限制 條件是”在2011年12⽉31⽇之前”。
- 效⼒(Effect) 授權效⼒包括兩個⽅⾯:允許操作(Allow)和拒絕操作(Deny)。通常,Deny有更⾼ 的效⼒,在權限檢查時會優先使⽤。 注意:“拒絕操作”和”撤銷授權”是完全獨⽴的兩個概念,撤銷授 權通常包括撤銷對Allow和Deny這兩種不同效⼒的授權,⽐如傳統資料庫⼀般⽀持Revoke和Revoke Deny兩種操作
授權語句(Statement)結構
- Effect: 指明該條語句的權限類型,取值必須為Allow或Deny。
- Principal: 如果Policy在授權時是與⽤戶或⻆⾊綁定,那麼就不允許再指定Principal,⽐如 MaxCompute的Role Policy。 如果Policy在授權時是與項⽬空間或項⽬空間内的對象綁定,那麼必 須指Principal,⽐如MaxCompute的Project Policy。
- Action: 它表示授權操作,可以是⼀個或多個操作名,可⽀持通配符号” ” 和 ” ? ” 。 例 如 , A c t i o n = “ ” 表示所有的操作。
- Resource: 它表示授權對象,可以是⼀個或多個對象名,可⽀持通配符号” ” 和 ” ? ” 。 例 如 R e s o u r c e = “ ” 表示所有的對象。
- Condition Block: 條件塊是該條授權語句所述權限得以⽣效的條件。條件塊結構請參⻅下節的描述。
十、Policy的實際使用授權案例
基于以前的經驗,我們在odps項目中建立了兩個基本的角色,分别是開發角色dev、查詢角色adhoc。
create role dev;
create role adhoc;
我們對于角色的權限要求大概分如下兩類:
- A開發權限:不能修改project屬性但可以讀取project資訊,有建表、建資源、建Job等各種常用權限;可以修改、删除自己在開發庫中建立的表,但對于其他同學建立的表則隻有讀取權限。
- B查詢權限:隻能讀取project資訊,不能建表、建資源、建Job;隻能讀取表,但沒有任何修改、删除權限。
我們的安全政策大緻是這樣的:
- 開發庫上,給所有開發同學賦予A開發權限。
- 生産庫上,給所有開發同學賦予B查詢權限。
以下是開發權限的policy:policy_dev_dev.txt内容:
{
"Version": "1",
"Statement":
[{
"Effect":"Allow",
"Action":["odps:Read","odps:CreateTable","odps:CreateResource","odps:CreateJob","odps:CreateInstance","odps:CreateFunction","odps:List"],
"Resource":"acs:odps:*:projects/cbu_dw_dev"
}
,{
"Effect":"Allow",
"Action":"odps:*",
"Resource":[
"acs:odps:*:projects/cbu_dw_dev/tables/*",
"acs:odps:*:projects/cbu_dw_dev/jobs/*",
"acs:odps:*:projects/cbu_dw_dev/instances/*",
"acs:odps:*:projects/cbu_dw_dev/resources/*",
"acs:odps:*:projects/cbu_dw_dev/registration/functions/*"
]
}]
}
角色授權語句:
use cbu_dw_dev;
put policy /home/odps/bin/policy_dev_dev.txt on role dev;
使用者授權語句:
use cbu_dw_dev;
add user [email protected];
grant dev to [email protected];
一下是查詢權限的policy:policy_dw_adhoc.txt内容
{
"Version": "1",
"Statement":
[{
"Effect":"Allow",
"Action":["odps:Read","odps:List"],
"Resource":"acs:odps:*:projects/cbu_dw"
}
,{
"Effect":"Allow",
"Action":["odps:Describe","odps:Select"],
"Resource":"acs:odps:*:projects/cbu_dw/tables/*"
}
,{
"Effect":"Allow",
"Action":"odps:Read",
"Resource":[
"acs:odps:*:projects/cbu_dw/jobs/*",
"acs:odps:*:projects/cbu_dw/instances/*",
"acs:odps:*:projects/cbu_dw/resources/*",
"acs:odps:*:projects/cbu_dw/registration/functions/*"
]
}]
}
use cbu_dw;
put policy /home/odps/bin/policy_dw_adhoc.txt on role adhoc;
use cbu_dw;
add user ALIYUN$ [email protected];
grant adhoc to [email protected];
歡迎加入“MaxCompute開發者社群2群”,點選連結申請加入或掃描二維碼
https://h5.dingtalk.com/invite-page/index.html?bizSource=____source____&corpId=dingb682fb31ec15e09f35c2f4657eb6378f&inviterUid=E3F28CD2308408A8&encodeDeptId=0054DC2B53AFE745