文档

创建并授权STS用户

更新时间:

本文主要介绍RAM角色(STS用户)背景信息、基本概念、如何创建RAM角色及RAM角色授权。

背景信息

在使用5G互联平台产品时,如果有跨账号使用和临时使用的场景,可以通过创建RAM角色(STS用户)来实现,且RAM角色具有一定的规避风险的能力:

  • 使用STS Token,减少长期访问密钥(Accesskey)泄露的风险。

  • STS Token具有时效性,可以自定义有效期,到期后将自动失效,无需定期轮换。

  • 可以为STS Token绑定自定义权限策略,提供更加灵活和精细的云资源授权。

基本概念

RAM角色(STS用户)是一种虚拟用户,没有确定的身份认证密钥,需要被一个受信的实体用户扮演才能正常使用,根据可信实体的不同,支持三种类型的角色:阿里云账号、阿里云服务、身份提供商。

根据产品的特性,我们推荐使用信任阿里云账号的方式进行使用。扮演的阿里云账号可以是属于自己的账号,也可以是其他账号(解决跨账号问题),同时可以通过令牌来解决临时使用的问题。

创建RAM角色

  1. 使用阿里云主账号,或具有管理员权限的RAM用户、RAM角色登录RAM控制台

  2. 单击左侧导航栏的角色,在角色页面单击创建角色,类型选择阿里云账号,单击下一步;

  3. 输入角色名称和备注之后,选择信任的云账号,单击完成

RAM角色授权

首先需要创建一个RAM用户,并对该用户授予创建STS令牌的权限。

  • 创建RAM用户。

  • 在权限策略中对该RAM用户授权系统策略,AliyunSTSAssumeRoleAccess。

获取STS令牌

获取令牌的方式为SDK的方式获取。获取令牌时,也获取到了该RAM角色的AccessKeyId和AccessKeySecret。

前提条件:

  • 创建RAM用户,且创建了该RAM用户的AccessKey;

  • 对该RAM用户授权AliyunSTSAssumeRoleAccess。

获取步骤:

  • 首先在项目的pom.xml文件中加入如下依赖项:

<dependencies>
    <dependency>
        <groupId>com.alibaba.fastjson2</groupId>
        <artifactId>fastjson2</artifactId>
        <version>2.0.12</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-sts</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.4.6</version>
    </dependency>
</dependencies>
  • JAVA SDK 实例:

import com.alibaba.fastjson2.JSON;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.sts.model.v20150401.*;

public class STS {
    public static void main(String[] args) {
        //构建一个阿里云客户端,用于发起请求。
        //构建阿里云客户端时需要设置AccessKey ID和AccessKey Secret。
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
        IAcsClient client = new DefaultAcsClient(profile);

        //构造请求,设置参数。
        AssumeRoleRequest request = new AssumeRoleRequest();
        request.setRegionId("cn-hangzhou");
        request.setRoleArn("<RoleArn>");
        request.setRoleSessionName("<RoleSessionName>");
        request.setDurationSeconds(1800L);//设置令牌可使用时长(单位:秒),不能超过控制台设置的最大会话时间

        //发起请求,并得到响应。
        try {
            AssumeRoleResponse response = client.getAcsResponse(request);
            System.out.println(JSON.toJSONString(response));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }

    }
}
说明

RoleArn获取方式为:在RAM访问控制台,单击创建的角色名称可查看详情,详情中有ARN,格式为:acs:ram::<阿里云主账号ID>:role/<角色名>

关于令牌生效时长:在RAM访问控制台,单击创建的角色名称可查看详情,详情中有最大会话时间,设置的时间范围为3600~43200 秒,默认为3600秒,在获取STS token时,DurationSeconds可以配置的范围为900~最大会话时间,如果超出该范围,则会提示【The Min/Max value of DurationSeconds is 15min/1hr.】

说明

如果在通过SDK的方式获取STS令牌时报如下提示:

ErrCode:NoPermission

ErrMsg:You are not authorized to do this action. You should be authorized by RAM.

原因在于没有给RAM用户授权AliyunSTSAssumeRoleAccess,或者使用的是主账号。

  • 本页导读 (0)
文档反馈