本文为您介绍在使用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
权限。