阿里云首页

STS中临时授权访问OSS资源时出现“You are not authorized to do this action. You should be authorized by RAM“报错

问题描述

通过STS服务给其他用户颁发一个临时访问凭证,希望该用户可使用临时访问凭证在规定时间内访问您的OSS资源。在使用代码实现授权时出现以下报错。

Code: NoPermission
Error message: You are not authorized to do this action. You should be authorized by RAM.

问题原因

STS中临时授权访问OSS资源时出现报错的原因如下:

  • 原因一:代码中使用的AccessKey ID和AccessKeySecret是主账号的,并非RAM用户的。
  • 原因二:没有为RAM用户添加AliyunSTSAssumeRoleAccess权限策略。
  • 原因三:代码中使用的RoleARN参数对应的角色不是用户角色,而是服务角色。

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

原因一的解决方法

在代码中使用RAM用户的AccessKey和AccessKeySecret。

原因二的解决方法

请为该RAM用户添加系统策略(AliyunSTSAssumeRoleAccess)或自定义策略,具体操作如下:

方法一:添加系统策略

  1. 请参见使用STS临时访问凭证访问OSS,为该RAM用户添加AliyunSTSAssumeRoleAccess策略或自定义策略。
  2. 登录RAM访问控制的控制台,进入人员管理页面,单击用户,然后单击指定RAM用户名,在权限管理页面中,确认该RAM用户的已被授权AliyunSTSAssumeRoleAccess系统策略。

方法二:添加自定义策略

  1. 登录RAM控制台
  2. 在左侧导航栏,选择身份管理>角色,单击目标RAM角色名称。
  3. 基本信息区域,查看RAM角色ARN。
  4. 您可以通过创建自定义策略指定RAM用户具体可以扮演的RAM角色。策略示例如下所示:
    {
        "Statement": [
            {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Resource": "acs:ram:*:[$Account_ID]:role/[$Role_Name]"
            }
        ],
        "Version": "1"
    }
    说明
    • Resource为角色ARN。
    • [$Account_ID]为阿里云账号ID。
    • [$Role_Name]为RAM角色名称。
  5. 将上述自定义策略授权给RAM用户,便可以指定具体可以扮演的RAM角色。关于如何为RAM用户授权,请参见为RAM用户授权

原因三的解决方法

请参见以下两种方法判定RAM用户的角色,确定代码中使用的RoleARN参数对应的角色是用户角色。请参见修改RAM角色的信任策略,为RAM角色添加允许该RAM用户扮演的信任策略。

创建RAM用户角色时进行判定

RAM用户角色的定义在创建RAM角色时可参考下图分辨。如何创建阿里云账号的RAM角色,请参见创建可信实体为阿里云账号的RAM角色

说明:其中,阿里云账号为用户角色,阿里云服务为服务角色。

通过策略信息进行判定

登录主账号控制台,进入人员管理页面,单击RAM角色管理,选择指定RAM用户,在基本信息页面中,单击信任策略管理,进行RAM用户的角色判定。判定方法如下图所示,在信任策略管理中,若选中区域为RAM,则为用户角色。

相关文档

适用于

  • 对象存储OSS
  • 访问控制
首页 STS中临时授权访问OSS资源时出现“You are not authorized to do this action. You should be authorized by RAM“报错