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

使用STS Token访问云服务API

更新时间:2018-02-02 15:20:18

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

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

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

直接使用STS Token

这是直接使用STS Token调用SDK的代码示例。如果要直接使用STS Token,您需要自行维护STS Token的周期性更新。

  1. #include <iostream>
  2. #include <alibabacloud/core/AlibabaCloud.h>
  3. #include <alibabacloud/core/sts/StsClient.h>
  4. #include <alibabacloud/core/StsAssumeRoleCredentialsProvider.h>
  5. #include <alibabacloud/ecs/EcsClient.h>
  6. using namespace AlibabaCloud;
  7. using namespace AlibabaCloud::Ecs;
  8. int main(int argc, char** argv)
  9. {
  10. // 初始化 SDK
  11. AlibabaCloud::InitializeSdk();
  12. // 配置 ecs 实例
  13. ClientConfiguration configuration("<your-region-id>");
  14. EcsClient client(Credentials("<your-access-key-id>", "<your-access-key-secret>", <your-session-token>),
  15. configuration);
  16. // 创建API请求并设置参数
  17. Model::DescribeInstancesRequest request;
  18. request.setPageSize(10);
  19. auto outcome = client.describeInstances(request);
  20. if (!outcome.isSuccess())
  21. {
  22. // 异常处理
  23. std::cout << outcome.error().errorCode() << std::endl;
  24. AlibabaCloud::ShutdownSdk();
  25. return -1;
  26. }
  27. std::cout << "totalCount: " << outcome.result().getTotalCount() << std::endl;
  28. // 关闭 SDK
  29. AlibabaCloud::ShutdownSdk();
  30. return 0;
  31. }

其中:

  • <your-region-id>是您正在使用的地域的Region ID,详情请看地域列表
  • <your-access-key-id><your-access-key-secret><your-session-token>是通过STS的AssumeRole请求返回的授权信息。

使用SDK自动管理STS Token的周期

直接使用STS Token调用SDK会带来周期性刷新的麻烦,SDK提供了一种更为方便的方式供您调用。您可以传入RoleArn(角色的全局资源描述符,详情请看身份管理中的角色)给SDK,让SDK帮您管理AssumeRole请求的调用、授权信息的获取和使用以及授权信息的过期自动更新。样例代码如下:

  1. #include <iostream>
  2. #include <alibabacloud/core/AlibabaCloud.h>
  3. #include <alibabacloud/core/sts/StsClient.h>
  4. #include <alibabacloud/core/StsAssumeRoleCredentialsProvider.h>
  5. #include <alibabacloud/ecs/EcsClient.h>
  6. using namespace AlibabaCloud;
  7. using namespace AlibabaCloud::Ecs;
  8. int main(int argc, char** argv)
  9. {
  10. // 初始化 SDK
  11. AlibabaCloud::InitializeSdk();
  12. // 配置 ecs 实例
  13. ClientConfiguration configuration("<your-region-id>");
  14. auto stsClient = std::make_shared<Sts::StsClient>("<your-access-key-id>", "<your-access-key-secret>", configuration);
  15. auto credentialsProvider = std::make_shared<StsAssumeRoleCredentialsProvider>(stsClient, "<your-role-arn>", "<your-role-session-name>");
  16. EcsClient client(credentialsProvider, configuration);
  17. // 创建API请求并设置参数
  18. Model::DescribeInstancesRequest request;
  19. request.setPageSize(10);
  20. auto outcome = client.describeInstances(request);
  21. if (!outcome.isSuccess())
  22. {
  23. // 异常处理
  24. std::cout << outcome.error().errorCode() << std::endl;
  25. AlibabaCloud::ShutdownSdk();
  26. return -1;
  27. }
  28. std::cout << "totalCount: " << outcome.result().getTotalCount() << std::endl;
  29. // 关闭 SDK
  30. AlibabaCloud::ShutdownSdk();
  31. return 0;
  32. }

其中:

  • <your-region-id>是您正在使用的地域的Region ID,详情请看地域列表
  • <your-access-key-id><your-access-key-secret>来自您使用的子账号,请从阿里云控制台获取。
  • <your-role-arn><your-role-session-name>可以从控制台的访问控制产品的角色管理的相应角色页面中获得。
本文导读目录