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