阿里云ECS API 查询类接口鉴权机制变更公告

为降低权限判断复杂度,提升RAM用户及角色调用接口时的权限管理体验,阿里云ECS将于北京时间 20251220日对查询(Describe)类接口的鉴权机制进行升级,统一OpenAPI无权限调用时的返回标准,包括不限于SDK、CLI以及Terraform等调用方式。

变更时间

北京时间 20251220

影响地域

全部地域

变更内容

对于ECS产品的查询(Describe)类接口,在使用RAM用户及角色调用时,如缺乏对应的资源操作接口权限,接口返回将由HttpCode:200(OK)的空资源列表升级为HttpCode:403(Forbidden)的错误响应(鉴权不通过)。

变更前后对比

对比项

升级前

升级后

返回结果

空资源列表(HTTP 200)

鉴权失败(HTTP 403)

错误码

返回 Forbidden.RAM 错误码

错误信息

User not authorized to operate on the specified resource, or this API doesn't support RAM. 或类似错误信息

诊断信息

AccessDeniedDetail字段

DescribeInstances接口为例,如无ecs:DescribeInstances权限调用时,升级前后返回结果如下:

升级前

升级后

{
  "RequestId": "ABCD-1234-1234-ABCD",
  "Instances": {
    "Instance": []
  },
  "NextToken": "",
  "PageNumber": 1,
  "PageSize": 10,
  "TotalCount": 0
}
{
  "RequestId": "ABCD-1234-1234-ABCD",
  "HostId": "ecs.cn-hangzhou.aliyuncs.com",
  "Code": "Forbidden.RAM",
  "Message": "User not authorized to operate on the specified resource, or this API doesn't support RAM.",
  "Recommend": "https://api.aliyun.com/troubleshoot?q=Forbidden.RAM&product=Ecs&requestId=ABCD-1234-1234-ABCD",
  "AccessDeniedDetail": {
    "AuthAction": "ecs:DescribeInstances",
    ...
  }
}

涉及API清单

产品

API版本

接口名称

Ecs

2014-05-26

DescribeInstances

Ecs

2014-05-26

DescribeDisks

SDK调用适配

在代码中捕获该异常进行相应的处理:Exception中会包含一个字段AccessDeniedDetail,用来描述权限失败的详细原因,可以通过getAccessDeniedDetail()方法获取。以Java语言为例:

V1.0 Java SDK示例

// 生成的 SDK 的 Request
DescribeXXXRequest request = new DescribeXXXRequest();
try {
    DescribeXXXResponse response = client.getAcsResponse(request);
} catch (ServerException e) {
    // 打印错误码
    System.out.println(e.getErrCode());
} catch (ClientException e) {
    // 打印错误码,无权限报错此次输出为“Forbidden.RAM”
    System.out.println(e.getErrCode());
    // 获取权限失败的详细原因
    System.out.println(e.getAccessDeniedDetail());
}

V2.0 Java SDK示例

DescribeXXXRequest request = new DescribeXXXRequest();
try {
    client.describeXXX(request);
} catch (TeaException e) {
    // 打印错误码,无权限报错此次输出为“Forbidden.RAM”
    System.out.println(e.getErrCode());
    // 获取权限失败的详细原因
    System.out.println(e.getAccessDeniedDetail());
}

其他语言及不同版本SDK调用适配:

语言

版本

适配文档链接

Python

V1.0

异常处理

V2.0

异常处理

PHP

V1.0

异常处理

V2.0

异常处理

Node.js

V1.0

异常处理

V2.0

异常处理

.NET

V1.0

异常处理

V2.0

异常处理

Go

V2.0

异常处理

说明

V1.0 Go SDK已停止支持,详情请参考宣布将于 2025 年 3 月 1 日终止对阿里云 V1.0 Golang SDK 支持,请使用V2.0 Go SDK

解决方案与支持

权限诊断排查

在权限报错时,返回结果中会带有AccessDeniedDetail字段,通过该字段可以获得权限拒绝的详细信息,可通过下面任意一个途径进行解析:

更多信息,请参见如何排查无权限的访问错误

权限配置建议

必要操作权限

如果确认此权限为必要操作权限,请联系您的主账号或权限管理员,对上述诊断结果涉及的权限(AuthAction)进行RAM用户授权或者RAM角色授权

兼容性处理

如果需要对报错请求进行捕获识别,请try...catch对应的异常,判断错误码是否为Forbidden.RAM,此错误码代表子账号缺少RAM权限。

联系我们

给您带来的不便敬请谅解,如遇问题,请提交工单联系我们。