本文為您介紹在使用RAM使用者或RAM角色訪問阿里雲時遇到的無許可權問題的解決方案。
問題描述
RAM身份(RAM使用者和RAM角色)預設沒有任何操作許可權,只有被顯式授予許可權後,才能訪問特定的雲資源。對RAM身份授權的效果包括兩種:允許(Allow)和拒絕(Deny)。當RAM身份對阿里雲資源執行操作時,如果操作被顯式拒絕或未被顯式授權(也稱為隱式拒絕),將展示無許可權的報錯提示。具體如下:
控制台訪問報錯:提示
沒有許可權。OpenAPI調用訪問報錯:提示
NoPermission、Forbidden.RAM、NotAuthorized等。
部分阿里雲產品不支援RAM鑒權。如果RAM身份訪問某產品時提示無許可權,且該產品不支援RAM鑒權,則無法通過RAM身份訪問該產品資源。
解決方案
控制台訪問
控制台上大多數的無許可權報錯彈窗,除了錯誤原因,還會提供額外的錯誤詳情資訊。
您可以按照如下步驟瞭解無許可權的具體原因和處理方法。
確定操作者身份。
鑒權主體提供了操作者身份的詳細資料。具體如下:
身份類型:操作者的身份類型。包括RAM使用者、RAM角色或SSO聯合身份。
身份信息:身份標識。RAM使用者提供的是UID資訊,RAM角色提供的是角色名稱和角色會話名稱(例如:
RoleName:RoleSessionName),SSO聯合身份提供的是身份供應商類型和身份供應商名稱(例如:saml-provider/AzureAD)。所屬帳號:當前身份所屬的阿里雲帳號UID資訊。
確定操作缺失的許可權點。
鑒權操作提供了導致無許可權的具體操作,可用於許可權的排查或授予。
確定影響許可權的策略類型。
策略类型提供了導致無許可權的策略類型,包括管控策略、會話策略、角色信任策略、基於身份策略(帳號級)、基於身份策略(資源群組級)。更多資訊,請參見權限原則判定流程。
策略類型決定了調整策略的方法,具體如下:
如果操作是因為管控策略(ControlPolicy)被拒絕,需要聯絡企業的資來源目錄管理帳號進行授權。管控策略是資來源目錄中對成員訪問定義的許可權邊界,優先順序高於帳號內的許可權判定。
如果操作是因為會話策略(SessionPolicy)被拒絕,需要聯絡帳號管理員檢查調用AssumeRole介面附加的會話策略。
如果操作是因為角色信任策略(AssumeRolePolicy)被拒絕,需要聯絡帳號管理員檢查被扮演的RAM角色的信任策略。
如果操作是因為基於身份策略(AccountLevelIdentityBasedPolicy、ResourceGroupLevelIdentityBasedPolicy)被拒絕,需要聯絡帳號管理員檢查操作者身份上被授與權限策略。
確定無許可權的原因是未被顯式授權或被顯式拒絕。
未被顯式授權:錯誤原因會提示當前操作未被授權,權限判定會提示
許可權不足。這種情況需要帳號管理員為您主動授予執行操作的許可權,即在Allow語句中添加鑒權操作。被顯式拒絕:錯誤原因會提示當前操作被顯式拒絕,權限判定會提示
顯式拒絕。這種情況需要帳號管理員檢查已授與權限,Deny語句中是否包含了鑒權操作。說明如果策略類型是管控策略,鑒權操作如沒有包含在Allow語句中,也會返回顯示拒絕。
此外,對於支援許可權診斷的產品,您也可以在報錯彈框中單擊權限診斷,直接查看錯誤原因和解決方案。
許可權診斷彈窗的解決方案地區會推薦可關聯的系統策略(如 AliyunRAMFullAccess、AliyunRAMReadOnlyAccess),並提供查看授權、建立權限原則、新增授權等快捷操作入口。
許可權診斷功能僅對支援RAM鑒權的產品有效。如果產品不支援RAM鑒權,許可權診斷無法提供排查結果。
許可權診斷為事後診斷工具,需要先發起 API 呼叫並觸發拒絕,再通過診斷密文(EncodedDiagnosticMessage)或 RequestID 反向解析拒絕原因,兩者均來自被拒絕的 API 呼叫響應。許可權診斷暫不支援在不發起真實調用的前提下,類比驗證 RAM 主體在資源群組下的最終生效許可權。如需預檢許可權,可以使用訪問分析功能建立分析器審計許可權、識別過度授權,或在 API 呼叫中添加 DryRun 參數驗證許可權是否充足。
OpenAPI調用訪問
當您通過阿里雲SDK、CLI或OpenAPI開發人員門戶等方式直接調用OpenAPI時,在錯誤返回中提供了錯誤詳情資訊。以下是在OpenAPI開發人員門戶調試時返回的報錯資訊。
{
"RequestId": "1090E608-D26F-5A08-BAE3-80D350E9FE20",
"HostId": "ram.aliyuncs.com",
"Code": "NoPermission",
"Message": "You are not authorized to do this action. Resource: acs:ram:*:xxx:user/* Action: ram:ListUsers",
"Recommend": "https://next.api.alibabacloud.com/troubleshoot?q=NoPermission&product=Ram",
"AccessDeniedDetail": {
"PolicyType": "AccountLevelIdentityBasedPolicy",
"AuthPrincipalOwnerId": "xxx",
"EncodedDiagnosticMessage": "AQIBIAAAAMDAbkn...jHF4TLvjT8hp17I0RFKObkV4=",
"AuthPrincipalType": "SubUser",
"AuthPrincipalDisplayName": "xxx",
"NoPermissionType": "ExplicitDeny",
"AuthAction": "ram:ListUsers"
}
}錯誤返回中的AccessDeniedDetail欄位展示了無許可權錯誤詳情,您可以按照如下步驟瞭解無許可權的具體原因和處理方法。
確定操作者身份。
AuthPrincipalType:操作者的身份類型。SubUser代表是RAM使用者,AssumedRoleUser代表是RAM角色,Federated代表是SSO聯合身份。
AuthPrincipalDisplayName:身份標識。RAM使用者提供的是UID資訊,RAM角色提供的是角色名稱和角色會話名稱(例如:
RoleName:RoleSessionName),SSO聯合身份提供的是身份供應商類型和身份供應商名稱(例如:saml-provider/AzureAD)。AuthPrincipalOwnerId:當前身份所屬的阿里雲帳號UID資訊。
確定操作缺失的許可權點。
AuthAction提供了導致無許可權的具體操作,可用於許可權的排查或授予。
確定影響許可權的策略類型。
PolicyType提供了導致無許可權的策略類型,包括管控策略、會話策略、角色信任策略、基於身份策略(帳號級)、基於身份策略(資源群組級)。更多資訊,請參見權限原則判定流程。
策略類型決定了調整策略的方法,具體如下:
如果操作是因為管控策略(ControlPolicy)被拒絕,需要聯絡企業的資來源目錄管理帳號進行授權。管控策略是資來源目錄中對成員訪問定義的許可權邊界,優先順序高於帳號內的許可權判定。
如果操作是因為會話策略(SessionPolicy)被拒絕,需要聯絡帳號管理員檢查調用AssumeRole介面附加的會話策略。
如果操作是因為角色信任策略(AssumeRolePolicy)被拒絕,需要聯絡帳號管理員檢查被扮演的RAM角色的信任策略。
如果操作是因為基於身份的策略(AccountLevelIdentityBasedPolicy、ResourceGroupLevelIdentityBasedPolicy)被拒絕,需要聯絡帳號管理員檢查操作者身份上被授與權限策略。
確定無許可權的原因是未被顯式授權或被顯式拒絕。
未被顯式授權:NoPermissionType會提示
ImplicitDeny。這種情況需要帳號管理員為您主動授予執行操作的許可權,即在Allow語句中添加AuthAction。被顯式拒絕:NoPermissionType會提示
ExplicitDeny。這種情況需要帳號管理員檢查已授與權限,Deny語句中是否包含了AuthAction。說明如果策略類型是管控策略,鑒權操作如沒有包含在Allow語句中,也會返回顯示拒絕。
此外,對於支援許可權診斷的產品,您可以將EncodedDiagnosticMessage中的全部資訊提供給帳號管理員,帳號管理員訪問RAM許可權診斷頁面排查原因。帳號管理員需要擁有ram:DecodeDiagnosticMessage許可權。
如果OpenAPI返回Forbidden.RAM錯誤,還需確認目標產品API是否支援RAM鑒權。部分產品API不支援RAM鑒權,無法通過RAM身份調用。
常見情境:為RAM使用者授予雲產品許可權
RAM使用者操作某個雲產品(如ECS、OSS、RDS等)時,控制台提示沒有許可權或OpenAPI返回Forbidden.RAM錯誤,通常是因為該RAM使用者未被授予對應雲產品的操作許可權。按以下步驟為RAM使用者添加許可權:
使用阿里雲帳號(主帳號)登入RAM控制台。
在左側導覽列,選擇。
在使用者列表中找到目標RAM使用者,單擊使用者登入名稱稱。
單擊权限管理頁簽,然後單擊新增授权。
在策略搜尋方塊中輸入目標雲產品名稱(如
ECS),選擇對應的系統策略並確認授權。常見雲產品與系統策略對照如下:
雲產品
完全系統管理權限策略
唯讀權限原則
Elastic Compute Service
AliyunECSFullAccess
AliyunECSReadOnlyAccess
Object Storage Service
AliyunOSSFullAccess
AliyunOSSReadOnlyAccess
雲資料庫RDS
AliyunRDSFullAccess
AliyunRDSReadOnlyAccess
Virtual Private Cloud
AliyunVPCFullAccess
AliyunVPCReadOnlyAccess
Server Load Balancer
AliyunSLBFullAccess
AliyunSLBReadOnlyAccess
更多系統策略資訊,請參見管理RAM使用者的許可權。
部分雲產品不支援RAM鑒權,上述系統策略對照表僅適用於支援RAM鑒權的產品。如果授權後仍提示無許可權,查閱對應產品文檔確認是否支援RAM鑒權。
常見情境:ECS控制台匯出執行個體列表提示許可權不足
RAM使用者已被授予ReadOnlyAccess系統策略,在ECS控制台單擊匯出執行個體列表後仍提示無許可權,或返回User.NoPermission錯誤,錯誤詳情中的鑒權操作為oos:StartExecution,許可權判定為許可權不足。
ECS控制台的匯出執行個體列表功能通過系統營運管理 OOS 非同步執行匯出任務,該操作需要oos:StartExecution許可權。ReadOnlyAccess只包含各雲產品資源的唯讀查詢許可權,不包含系統營運管理 OOS 的執行許可權,因此僅被授予唯讀許可權的RAM使用者無法觸發匯出。
為該RAM使用者附加AliyunOOSFullAccess系統策略,或建立自訂策略授予oos:StartExecution許可權,然後重新匯出執行個體列表。
排查無許可權錯誤時,還需確認操作是否涉及跨產品依賴。部分控制台操作底層調用其他雲產品的API,這類依賴無法從操作入口所在的產品名稱推斷,以錯誤詳情中的鑒權操作(例如oos:StartExecution)為準判斷實際缺失的許可權。
HTTP 401 認證失敗排查
調用OpenAPI或存取控制台時如果收到HTTP 401錯誤(例如InvalidAccessKeyId.NotFound),說明身份認證失敗,需要與前述403許可權相關報錯區分處理:HTTP 401表示認證失敗,系統無法識別當前身份;HTTP 403表示授權失敗,身份已被識別但沒有許可權執行該操作。遇到401錯誤時,請按以下步驟排查。
檢查AccessKey有效性。
登入RAM控制台,查看AccessKey列表。如果AccessKey已被刪除,需重新建立AccessKey。AccessKey狀態為Inactive時不影響API調用,僅影響控制台登入。
檢查RAM使用者狀態。
確認RAM使用者狀態為Active。如果狀態為Inactive,請先啟用該RAM使用者。
檢查STS Token有效期間。
如果調用時使用的是STS臨時訪問憑證,憑證到期會導致認證失敗。請重新調用AssumeRole介面擷取新的STS Token。