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用户如何创建AccessKey,请参见创建AccessKey

原因二的解决方法

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

方法一:添加系统策略

  1. 为RAM用户添加AliyunSTSAssumeRoleAccess策略。具体操作,请参见使用STS临时访问凭证访问OSS

  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角色时选择的类型为阿里云账号。关于如何创建RAM角色,请参见创建可信实体为阿里云账号的RAM角色

image
说明

阿里云账号为用户角色,阿里云服务为服务角色。

相关文档

适用于

  • 对象存储OSS

  • 访问控制

阿里云首页 对象存储 OSS 相关技术圈