全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
阿里云SDK开发指南

使用STS Token访问云服务API

更新时间:2018-02-24 18:15:16

直接使用阿里云账号的主账号的AccessKey ID和AccessKey Secret进行应用开发会有一定的安全风险,为了提升安全性,除了通过RAM角色控制权限范围外,您还可以使用为RAM角色签发的STS Token来访问阿里云服务。

使用STS Token调用SDK有以下优点:

  • 减少了主账号AccessKey ID和AccessKey Secret泄露的风险,特别是移动设备等场景。

  • 能使用灵活的权限控制,STS Token有一定的时间限制,并且根据RAM角色的灵活设置对ECS、SLB等资源的精细授权。

本文介绍如何使用STS Token来调用SDK访问阿里云服务,更多关于RAM和STS的信息,请参考RAM和STS介绍

注意: 在使用STS Token前,确保该产品支持STS Token验证。详情参见支持STS Token的产品

方式一:直接使用STS Token

直接使用STS Token时,您需要自行维护STS Token的周期性更新。

  1. using System;
  2. using Aliyun.Acs.Core;
  3. using Aliyun.Acs.Core.Auth;
  4. using Aliyun.Acs.Core.Profile;
  5. using Aliyun.Acs.Core.Exceptions;
  6. using Aliyun.Acs.Ecs.Model.V20140526;
  7. class SimpleSTSTokenSample
  8. {
  9. static void Main(string[] args)
  10. {
  11. BasicSessionCredentials credentials = new BasicSessionCredentials(
  12. "<your-access-key-id>",
  13. "<your-access-key-secret>",
  14. "<your-session-token>");
  15. // 创建客户端实例
  16. IClientProfile profile = DefaultProfile.GetProfile("<your-region-id>");
  17. DefaultAcsClient client = new DefaultAcsClient(profile, credentials);
  18. try
  19. {
  20. // 创建API请求并设置参数
  21. DescribeInstancesRequest request = new DescribeInstancesRequest();
  22. request.PageSize = 10;
  23. // 请求并打印处理结果
  24. DescribeInstancesResponse response = client.GetAcsResponse(request);
  25. Console.WriteLine("TotalCount: {0}", response.TotalCount);
  26. }
  27. catch (ServerException e)
  28. {
  29. Console.WriteLine(e.ErrorCode);
  30. Console.WriteLine(e.ErrorMessage);
  31. }
  32. catch (ClientException e)
  33. {
  34. Console.WriteLine(e.ErrorCode);
  35. Console.WriteLine(e.ErrorMessage);
  36. }
  37. }
  38. }

其中:

  • region-id是您正在使用的地域(可用区)的ID,详情参见地域列表
  • sts-access-key-id sts-access-key-secret sts-session-token 是通过STS的AssumeRole请求返回的授权信息。

方式二:使用SDK自动管理STS Token的周期

您可以通过指定RAM的角色信息,让SDK帮您自动申请并维护STS Token。

  1. using System;
  2. using Aliyun.Acs.Core;
  3. using Aliyun.Acs.Core.Auth;
  4. using Aliyun.Acs.Core.Profile;
  5. using Aliyun.Acs.Core.Exceptions;
  6. using Aliyun.Acs.Ecs.Model.V20140526;
  7. class UseRoleArnSample
  8. {
  9. static void Main(string[] args)
  10. {
  11. IClientProfile profile = DefaultProfile.GetProfile("<your-region-id>");
  12. BasicCredentials basicCredentials = new BasicCredentials(
  13. "<your-access-key-id>",
  14. "<your-access-key-secret>");
  15. STSAssumeRoleSessionCredentialsProvider provider = new STSAssumeRoleSessionCredentialsProvider(
  16. basicCredentials,
  17. "<your-role-arn>",
  18. profile);
  19. // 创建客户端实例
  20. DefaultAcsClient client = new DefaultAcsClient(profile, provider);
  21. try
  22. {
  23. // 创建API请求并设置参数
  24. DescribeInstancesRequest request = new DescribeInstancesRequest();
  25. request.PageSize = 10;
  26. // 请求并打印处理结果
  27. DescribeInstancesResponse response = client.GetAcsResponse(request);
  28. Console.WriteLine("TotalCount: {0}", response.TotalCount);
  29. }
  30. catch (ServerException e)
  31. {
  32. Console.WriteLine(e.ErrorCode);
  33. Console.WriteLine(e.ErrorMessage);
  34. }
  35. catch (ClientException e)
  36. {
  37. Console.WriteLine(e.ErrorCode);
  38. Console.WriteLine(e.ErrorMessage);
  39. }
  40. }
  41. }

其中:

  • role-arn是角色全局资源描述符,您可以通过访问RAM控制台,单击角色名,进入详情页后查询角色名对应的role-arn

  • role-session-name是临时角色名称,您可以通过调用AssumeRole接口来获取一个扮演该角色的临时身份,创建成功后,便可以使用创建时的RoleSessionName作为本方式的role-session-name参数。

本文导读目录