全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
阿里云SDK开发指南

使用STS Token作为用户凭据

更新时间:2018-02-02 15:52:00

直接使用阿里云账号的主账号的Access Key IDAccess Key Secret进行应用开发会有一定的安全风险,为了提升安全性,除了通过RAM角色控制权限范围外,您还可以使用为RAM角色签发的STS Token来访问阿里云服务。这里介绍如何使用STS Token来调用SDK访问阿里云服务,更多关于RAM和STS的资料请参考RAM和STS介绍

请注意:在使用STS Token前,您需要确认目标产品是否支持该验证方式,点此查看目前支持STS Token产品线

使用STS Token调用SDK有以下好处:

  1. 减少了主账号Access Key IDAccess Key Secret泄露的风险,特别是移动设备等场景。
  2. 能使用灵活的权限控制,STS Token有一定的时间限制,并且根据RAM角色的灵活设置对ECS、SLB资源的精细授权。

方式一:直接使用STS Token

请注意:如果要直接使用STS Token,您需要自行维护STS Token的周期性更新。```javaimport com.aliyuncs.DefaultAcsClient;import com.aliyuncs.auth.BasicSessionCredentials;import com.aliyuncs.ecs.model.v20140526.DescribeInstancesRequest;import com.aliyuncs.ecs.model.v20140526.DescribeInstancesResponse;import com.aliyuncs.exceptions.ClientException;import com.aliyuncs.profile.DefaultProfile;public class SimpleSTSTokenSample { public static void main(String[] args) { BasicSessionCredentials credentials = new BasicSessionCredentials( ““, ““, ““ ); DefaultProfile profile = DefaultProfile.getProfile(““); DefaultAcsClient client = new DefaultAcsClient(profile, credentials); DescribeInstancesRequest request = new DescribeInstancesRequest(); try { DescribeInstancesResponse response = client.getAcsResponse(request); } catch (ClientException e) { System.err.println(e.toString()); } }}

  1. 其中:
  2. * `region-id`是您正在使用的地域(可用区)的id,详情请看[地域列表](https://help.aliyun.com/document_detail/40654.html)。
  3. * `sts-access-key-id` `sts-access-key-secret` `sts-session-token` 是通过STS的[AssumeRole](https://help.aliyun.com/document_detail/28763.html)请求返回的授权信息。==与快速开始中的AccessKeyId/AccessKeySecret不同==
  4. # 方式二:使用SDK自动管理STS Token的周期
  5. 您可以通过传入RAM中的角色信息,让SDK帮您自动申请并维护STS Token
  6. ```java
  7. import com.aliyuncs.DefaultAcsClient;
  8. import com.aliyuncs.auth.BasicCredentials;
  9. import com.aliyuncs.auth.STSAssumeRoleSessionCredentialsProvider;
  10. import com.aliyuncs.ecs.model.v20140526.DescribeInstancesRequest;
  11. import com.aliyuncs.ecs.model.v20140526.DescribeInstancesResponse;
  12. import com.aliyuncs.exceptions.ClientException;
  13. import com.aliyuncs.profile.DefaultProfile;
  14. public class UseRoleArnSample {
  15. public static void main(String[] args) {
  16. DefaultProfile profile = DefaultProfile.getProfile("<your-region-id>");
  17. BasicCredentials basicCredentials = new BasicCredentials(
  18. "<your-access-key-id>",
  19. "<your-access-key-id>"
  20. );
  21. STSAssumeRoleSessionCredentialsProvider provider = new STSAssumeRoleSessionCredentialsProvider(
  22. basicCredentials,
  23. "<your-role-arn>",
  24. profile
  25. );
  26. DefaultAcsClient client = new DefaultAcsClient(profile, provider);
  27. DescribeInstancesRequest request = new DescribeInstancesRequest();
  28. try {
  29. DescribeInstancesResponse response = client.getAcsResponse(request);
  30. } catch (ClientException e) {
  31. System.err.println(e.toString());
  32. }
  33. }
  34. }

其中:

  • role-arn 是角色全局资源描述符,您可以通过访问RAM控制台-角色管理,点击角色名进入详情页后查询角色名对应的role-arn
  • role-session-name 是临时角色名称,您可以通过调用RAM的AssumeRole接口来获取一个扮演该角色的临时身份,创建成功后,便可以使用创建时的RoleSessionName作为本方式的role-session-name参数
本文导读目录