本文為您介紹在使用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
許可權。