全部产品
Search
文档中心

访问控制:如何排查无权限的访问错误?

更新时间:May 18, 2023

本文为您介绍在使用RAM用户或RAM角色访问阿里云时遇到的无权限问题的解决方法。

问题描述

RAM身份(RAM用户和RAM角色)默认没有任何操作权限,只有被显式授予权限后,才能访问特定的云资源。对RAM身份授权的效果包括两种:允许(Allow)和拒绝(Deny)。当RAM身份对阿里云资源执行操作时,如果操作被显式拒绝或未被显式授权(也称为隐式拒绝),将展示无权限的报错提示。具体如下:

  • 控制台访问报错:提示没有权限

  • OpenAPI调用访问报错:提示NoPermissionForbidden.RAMNotAuthorized等。

解决方法

控制台访问

如下图所示,控制台上大多数的无权限报错弹窗,除了错误原因,还会提供额外的错误详情信息。没有权限-zh..jpeg

您可以按照如下步骤了解无权限的具体原因和处理方法。

  1. 确定操作者身份。

    鉴权主体提供了操作者身份的详细信息。具体如下:

    • 身份类型:操作者的身份类型。包括RAM用户、RAM角色或SSO联合身份。

    • 身份信息:身份标识。RAM用户提供的是UID信息,RAM角色提供的是角色名称和角色会话名称(例如:RoleName:RoleSessionName),SSO联合身份提供的是身份提供商类型和身份提供商名称(例如:saml-provider/AzureAD)。

    • 所属账号:当前身份所属的阿里云账号UID信息。

  2. 确定操作缺失的权限点。

    鉴权操作提供了导致无权限的具体操作,可用于权限的排查或授予。

  3. 确定影响权限的策略类型。

    策略类型提供了导致无权限的策略类型,包括管控策略、会话策略、角色信任策略、基于身份策略(账号级)、基于身份策略(资源组级)。更多信息,请参见权限策略判定流程

    策略类型决定了调整策略的方法,具体如下:

    • 如果操作是因为管控策略被拒绝,需要联系企业的资源目录管理账号进行授权。管控策略是资源目录中对成员访问定义的权限边界,优先级高于账号内的权限判定。

    • 如果操作是因为会话策略被拒绝,需要联系账号管理员检查调用AssumeRole接口附加的会话策略。

    • 如果操作是因为角色信任策略被拒绝,需要联系账号管理员检查被扮演的RAM角色的信任策略。

    • 如果操作是因为基于身份策略被拒绝,需要联系账号管理员检查操作者身份上被授予的权限策略。

  4. 确定无权限的原因是未被显式授权被显式拒绝

    • 未被显式授权:错误原因会提示当前操作未被授权,权限判定会提示权限不足。这种情况需要账号管理员为您主动授予执行操作的权限,即在Allow语句中添加鉴权操作

    • 被显式拒绝:错误原因会提示当前操作被显式拒绝,权限判定会提示显式拒绝。这种情况需要账号管理员检查已授予的权限,Deny语句中是否包含了鉴权操作

      说明

      如果策略类型是管控策略,鉴权操作如没有包含在Allow语句中,也会返回显示拒绝。

此外,对于支持权限诊断的产品,您也可以在报错弹框中单击权限诊断,直接查看错误原因和解决方法。

权限诊断-zh..jpeg

OpenAPI调用访问

当您通过阿里云SDK、CLI或OpenAPI开发者门户等方式直接调用OpenAPI时,在错误返回中提供了错误详情信息。下图是在OpenAPI开发者门户调试时返回的报错信息。image..png

错误返回中的AccessDeniedDetail字段展示了无权限错误详情,您可以按照如下步骤了解无权限的具体原因和处理方法。

  1. 确定操作者身份。

    • AuthPrincipalType:操作者的身份类型。SubUser代表是RAM用户,AssumedRoleUser代表是RAM角色,Federated代表是SSO联合身份。

    • AuthPrincipalDisplayName:身份标识。RAM用户提供的是UID信息,RAM角色提供的是角色名称和角色会话名称(例如:RoleName:RoleSessionName),SSO联合身份提供的是身份提供商类型和身份提供商名称(例如:saml-provider/AzureAD)。

    • AuthPrincipalOwnerId:当前身份所属的阿里云账号UID信息。

  2. 确定操作缺失的权限点。

    AuthAction提供了导致无权限的具体操作,可用于权限的排查或授予。

  3. 确定影响权限的策略类型。

    PolicyType提供了导致无权限的策略类型,包括管控策略、会话策略、角色信任策略、基于身份策略(账号级)、基于身份策略(资源组级)。更多信息,请参见权限策略判定流程

    策略类型决定了调整策略的方法,具体如下:

    • 如果操作是因为管控策略被拒绝,需要联系企业的资源目录管理账号进行授权。管控策略是资源目录中对成员访问定义的权限边界,优先级高于账号内的权限判定。

    • 如果操作是因为会话策略被拒绝,需要联系账号管理员检查调用AssumeRole接口附加的会话策略。

    • 如果操作是因为角色信任策略被拒绝,需要联系账号管理员检查被扮演的RAM角色的信任策略。

    • 如果操作是因为基于身份的策略被拒绝,需要联系账号管理员检查操作者身份上被授予的权限策略。

  4. 确定无权限的原因是未被显式授权被显式拒绝

    • 未被显式授权NoPermissionType会提示ImplicitDeny。这种情况需要账号管理员为您主动授予执行操作的权限,即在Allow语句中添加AuthAction

    • 被显式拒绝NoPermissionType会提示ExplicitDeny。这种情况需要账号管理员检查已授予的权限,Deny语句中是否包含了AuthAction

      说明

      如果策略类型是管控策略,鉴权操作如没有包含在Allow语句中,也会返回显示拒绝。

此外,对于支持权限诊断的产品,您可以将EncodedDiagnosticMessage中的全部信息提供给账号管理员,账号管理员访问RAM权限诊断页面排查原因。账号管理员需要拥有ram:DecodeDiagnosticMessage权限。

权限诊断页面-zh..jpeg