通過policy配置權限過程中遇到的一些問題
背景信息:
本文以如下場景爲基準進行編寫,如下:
用戶通過DataWorks-簡單模式使用MaxCompute;
用戶具有DataWorks默認角色,如DataWorks開發者角色;
用戶通過console提交policy配置精細化權限管控,
本案例以禁止某一些用戶羣體(role)可以刪除以tb_開頭的表爲例來展開討論。
解決方案:
通過policy進行deny某個role禁止刪除以tb_開頭的表,同時將屬於這一部分的user都添加到該角色中。
具體如下:
create role denydroprole;
put policy t_policy.json on role denydroprole;
grant denydroprole to user RAM$..;
t_policy.json配置文件如下:
{
"Version": "1",
"Statement": [{
"Effect": "Deny",
"Action": "odps:Drop",
"Resource": "acs:odps::projects/szmc/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限制)。
你只需要在這裏設置爲【個人賬號】即可滿足上述需求。