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

更新时间:
复制 MD 格式

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

问题描述

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

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

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

解决方法

控制台访问

控制台上大多数的无权限报错弹窗,除了错误原因,还会提供额外的错误详情信息。

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

  1. 确定操作者身份。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      说明

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

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

权限诊断弹窗的解决方案区域会推荐可关联的系统策略(如 AliyunRAMFullAccessAliyunRAMReadOnlyAccess),并提供查看授权创建权限策略新增授权等快捷操作入口。

OpenAPI调用访问

当您通过阿里云SDK、CLIOpenAPI开发者门户等方式直接调用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.aliyun.com/troubleshoot?q=NoPermission&product=Ram",
  "AccessDeniedDetail": {
    "PolicyType": "AccountLevelIdentityBasedPolicy",
    "AuthPrincipalOwnerId": "xxx",
    "EncodedDiagnosticMessage": "AQIBIAAAAMDAbkn...jHF4TLvjT8hp17I0RFKObkV4=",
    "AuthPrincipalType": "SubUser",
    "AuthPrincipalDisplayName": "xxx",
    "NoPermissionType": "ExplicitDeny",
    "AuthAction": "ram:ListUsers"
  }
}

错误返回中的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权限。

常见场景:为RAM用户授予云产品权限

RAM用户操作某个云产品(如ECS、OSS、RDS等)时,控制台提示没有权限OpenAPI返回Forbidden.RAM错误,通常是因为该RAM用户未被授予对应云产品的操作权限。按以下步骤为RAM用户添加权限:

  1. 使用阿里云账号(主账号)登录RAM控制台

  2. 在左侧导航栏,选择身份管理 > 用户

  3. 在用户列表中找到目标RAM用户,单击用户登录名称。

  4. 单击权限管理页签,然后单击新增授权

  5. 在策略搜索框中输入目标云产品名称(如ECS),选择对应的系统策略并确认授权。

    常见云产品与系统策略对照如下:

    云产品

    完全管理权限策略

    只读权限策略

    云服务器ECS

    AliyunECSFullAccess

    AliyunECSReadOnlyAccess

    对象存储OSS

    AliyunOSSFullAccess

    AliyunOSSReadOnlyAccess

    云数据库RDS

    AliyunRDSFullAccess

    AliyunRDSReadOnlyAccess

    专有网络VPC

    AliyunVPCFullAccess

    AliyunVPCReadOnlyAccess

    负载均衡SLB

    AliyunSLBFullAccess

    AliyunSLBReadOnlyAccess

    更多系统策略信息,请参见管理RAM用户的权限