如何排查無權(quán)限的訪問錯(cuò)誤?
本文為您介紹在使用RAM用戶或RAM角色訪問阿里云時(shí)遇到的無權(quán)限問題的解決方法。
問題描述
RAM身份(RAM用戶和RAM角色)默認(rèn)沒有任何操作權(quán)限,只有被顯式授予權(quán)限后,才能訪問特定的云資源。對(duì)RAM身份授權(quán)的效果包括兩種:允許(Allow)和拒絕(Deny)。當(dāng)RAM身份對(duì)阿里云資源執(zhí)行操作時(shí),如果操作被顯式拒絕或未被顯式授權(quán)(也稱為隱式拒絕),將展示無權(quán)限的報(bào)錯(cuò)提示。具體如下:
控制臺(tái)訪問報(bào)錯(cuò):提示
沒有權(quán)限
。OpenAPI調(diào)用訪問報(bào)錯(cuò):提示
NoPermission
、Forbidden.RAM
、NotAuthorized
等。
解決方法
控制臺(tái)訪問
如下圖所示,控制臺(tái)上大多數(shù)的無權(quán)限報(bào)錯(cuò)彈窗,除了錯(cuò)誤原因,還會(huì)提供額外的錯(cuò)誤詳情信息。
您可以按照如下步驟了解無權(quán)限的具體原因和處理方法。
確定操作者身份。
鑒權(quán)主體提供了操作者身份的詳細(xì)信息。具體如下:
身份類型:操作者的身份類型。包括RAM用戶、RAM角色或SSO聯(lián)合身份。
身份信息:身份標(biāo)識(shí)。RAM用戶提供的是UID信息,RAM角色提供的是角色名稱和角色會(huì)話名稱(例如:
RoleName:RoleSessionName
),SSO聯(lián)合身份提供的是身份提供商類型和身份提供商名稱(例如:saml-provider/AzureAD
)。所屬賬號(hào):當(dāng)前身份所屬的阿里云賬號(hào)UID信息。
確定操作缺失的權(quán)限點(diǎn)。
鑒權(quán)操作提供了導(dǎo)致無權(quán)限的具體操作,可用于權(quán)限的排查或授予。
確定影響權(quán)限的策略類型。
策略類型提供了導(dǎo)致無權(quán)限的策略類型,包括管控策略、會(huì)話策略、角色信任策略、基于身份策略(賬號(hào)級(jí))、基于身份策略(資源組級(jí))。更多信息,請參見權(quán)限策略判定流程。
策略類型決定了調(diào)整策略的方法,具體如下:
如果操作是因?yàn)?b>管控策略被拒絕,需要聯(lián)系企業(yè)的資源目錄管理賬號(hào)進(jìn)行授權(quán)。管控策略是資源目錄中對(duì)成員訪問定義的權(quán)限邊界,優(yōu)先級(jí)高于賬號(hào)內(nèi)的權(quán)限判定。
如果操作是因?yàn)?b>會(huì)話策略被拒絕,需要聯(lián)系賬號(hào)管理員檢查調(diào)用AssumeRole接口附加的會(huì)話策略。
如果操作是因?yàn)?b>角色信任策略被拒絕,需要聯(lián)系賬號(hào)管理員檢查被扮演的RAM角色的信任策略。
如果操作是因?yàn)?b>基于身份策略被拒絕,需要聯(lián)系賬號(hào)管理員檢查操作者身份上被授予的權(quán)限策略。
確定無權(quán)限的原因是未被顯式授權(quán)或被顯式拒絕。
未被顯式授權(quán):錯(cuò)誤原因會(huì)提示當(dāng)前操作未被授權(quán),權(quán)限判定會(huì)提示
權(quán)限不足
。這種情況需要賬號(hào)管理員為您主動(dòng)授予執(zhí)行操作的權(quán)限,即在Allow語句中添加鑒權(quán)操作。被顯式拒絕:錯(cuò)誤原因會(huì)提示當(dāng)前操作被顯式拒絕,權(quán)限判定會(huì)提示
顯式拒絕
。這種情況需要賬號(hào)管理員檢查已授予的權(quán)限,Deny語句中是否包含了鑒權(quán)操作。說明如果策略類型是管控策略,鑒權(quán)操作如沒有包含在Allow語句中,也會(huì)返回顯示拒絕。
此外,對(duì)于支持權(quán)限診斷的產(chǎn)品,您也可以在報(bào)錯(cuò)彈框中單擊權(quán)限診斷,直接查看錯(cuò)誤原因和解決方法。
OpenAPI調(diào)用訪問
當(dāng)您通過阿里云SDK、CLI或OpenAPI開發(fā)者門戶等方式直接調(diào)用OpenAPI時(shí),在錯(cuò)誤返回中提供了錯(cuò)誤詳情信息。下圖是在OpenAPI開發(fā)者門戶調(diào)試時(shí)返回的報(bào)錯(cuò)信息。
錯(cuò)誤返回中的AccessDeniedDetail字段展示了無權(quán)限錯(cuò)誤詳情,您可以按照如下步驟了解無權(quán)限的具體原因和處理方法。
確定操作者身份。
AuthPrincipalType:操作者的身份類型。SubUser代表是RAM用戶,AssumedRoleUser代表是RAM角色,Federated代表是SSO聯(lián)合身份。
AuthPrincipalDisplayName:身份標(biāo)識(shí)。RAM用戶提供的是UID信息,RAM角色提供的是角色名稱和角色會(huì)話名稱(例如:
RoleName:RoleSessionName
),SSO聯(lián)合身份提供的是身份提供商類型和身份提供商名稱(例如:saml-provider/AzureAD
)。AuthPrincipalOwnerId:當(dāng)前身份所屬的阿里云賬號(hào)UID信息。
確定操作缺失的權(quán)限點(diǎn)。
AuthAction提供了導(dǎo)致無權(quán)限的具體操作,可用于權(quán)限的排查或授予。
確定影響權(quán)限的策略類型。
PolicyType提供了導(dǎo)致無權(quán)限的策略類型,包括管控策略、會(huì)話策略、角色信任策略、基于身份策略(賬號(hào)級(jí))、基于身份策略(資源組級(jí))。更多信息,請參見權(quán)限策略判定流程。
策略類型決定了調(diào)整策略的方法,具體如下:
如果操作是因?yàn)?b>管控策略被拒絕,需要聯(lián)系企業(yè)的資源目錄管理賬號(hào)進(jìn)行授權(quán)。管控策略是資源目錄中對(duì)成員訪問定義的權(quán)限邊界,優(yōu)先級(jí)高于賬號(hào)內(nèi)的權(quán)限判定。
如果操作是因?yàn)?b>會(huì)話策略被拒絕,需要聯(lián)系賬號(hào)管理員檢查調(diào)用AssumeRole接口附加的會(huì)話策略。
如果操作是因?yàn)?b>角色信任策略被拒絕,需要聯(lián)系賬號(hào)管理員檢查被扮演的RAM角色的信任策略。
如果操作是因?yàn)?b>基于身份的策略被拒絕,需要聯(lián)系賬號(hào)管理員檢查操作者身份上被授予的權(quán)限策略。
確定無權(quán)限的原因是未被顯式授權(quán)或被顯式拒絕。
未被顯式授權(quán):NoPermissionType會(huì)提示
ImplicitDeny
。這種情況需要賬號(hào)管理員為您主動(dòng)授予執(zhí)行操作的權(quán)限,即在Allow語句中添加AuthAction。被顯式拒絕:NoPermissionType會(huì)提示
ExplicitDeny
。這種情況需要賬號(hào)管理員檢查已授予的權(quán)限,Deny語句中是否包含了AuthAction。說明如果策略類型是管控策略,鑒權(quán)操作如沒有包含在Allow語句中,也會(huì)返回顯示拒絕。
此外,對(duì)于支持權(quán)限診斷的產(chǎn)品,您可以將EncodedDiagnosticMessage中的全部信息提供給賬號(hào)管理員,賬號(hào)管理員訪問RAM權(quán)限診斷頁面排查原因。賬號(hào)管理員需要擁有ram:DecodeDiagnosticMessage
權(quán)限。