通過policy配置權限過程中遇到的一些問題
背景資訊:
本文以如下場景為基準進行編寫,如下:
- 使用者通過DataWorks-簡單模式使用MaxCompute;
- 使用者具有DataWorks預設角色,如DataWorks開發者角色;
- 使用者通過console送出policy配置精細化權限管控,
本案例以禁止某一些使用者群體(role)可以删除以tb_開頭的表為例來展開讨論。
解決方案:
通過policy進行deny某個role禁止删除以tb_開頭的表,同時将屬于這一部分的user都添加到該角色中。
具體如下:
-
create role denydroprole;
-
`denydroprole;`put policy t_policy.json on role
-
`denydroprolegrant
;`to RAM$..
t_policy.json配置檔案如下:
{
"Version": "1",
"Statement": [{
"Effect": "Deny",
"Action": "odps:Drop",
"Resource": "acs:odps:*:projects/sz_mc/tables/tb_*"
}]
}
檢視上述配置的子賬号權限:

針對上圖的說明:
- [roles]該子賬号同僚隸屬與兩個角色,一個是建立的denydroprole,一個是DataWorks的開發者角色role_project_dev。
- [Authorization Type: Policy]其中A代表Allow,D代表Deny,當兩者同僚存在時,deny優先原則。
是否符合預期:
(1)在DataWorks上進行測試:
居然删除成功了!!!納尼,是我們配置政策不對嘛???
(2)再在console上進行驗證:
在MaxCompute console上測試政策生效了,删除以tb_開頭的表直接被拒絕并且傳回錯誤。
這是為什麼呢??為什麼呢??
其實在這一塊需要注意的是,在DataWorks-工作空間配置-計算引擎資訊-通路身份()配置情況。
通路身份大科普:
這個要看下我們在項目管理裡面的賬号設定是個人賬号還是系統賬号。兩個最大的差別如下:
dataworks這裡的角色,會有兩種權限,一種是dataworks界面操作權限,一種是MaxCompute資料相關權限(建表、查詢等)。
然後有兩種情況:
1)如果MaxCompute通路身份為 個人賬号,那麼角色的“MaxCompute資料相關權限”就會生效,這個子賬号用其他用戶端操作MaxCompute都可以有這個project的相關權限。
2)如果MaxCompute通路身份為 系統賬号,那麼角色的“MaxCompute資料相關權限”就不會生效,這個子賬号在dataworks上送出的MaxCompute任務因為是通過系統賬号送出是以隻要系統賬号有權限就可以。但是子賬号用非dataworks的用戶端送出MaxCompute就會沒權限。
詳情可以參考:
https://yq.aliyun.com/articles/686800對應如下邏輯示意圖:
那麼,到這裡親們應該明白了,為什麼在DataWorks中測試發現policy政策沒有生效麼?是因為配置的通路身份為系統賬号,那麼通過DataWorks送出的Query都會用系統賬号來執行(project owner擁有最大權限且并沒有受到該policy限制)。
你隻需要在這裡設定為【個人賬号】即可滿足上述需求。