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

STS Token介绍

阿里云STS(Security Token Service)是为阿里云账号(或RAM用户)提供短期访问权限管理的云服务。通过STS,您可以为联盟用户(您的本地账号系统所管理的用户)颁发一个自定义时效和访问权限的访问凭证。联盟用户可以使用STS短期访问凭证直接调用阿里云服务API,或登录阿里云管理控制台操作被授权访问的资源。

阿里云2000元代金券免费领,最新优惠1折抢购,2核4G云服务器仅799元/3年,新老用户同享,立即抢购>>>

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

  • 减少了主账号AccessKey ID和AccessKey Secret泄露的风险,特别是移动设备等场景。
  • 能使用灵活的权限控制,STS Token有一定的时间限制,并且根据RAM角色的灵活设置对ECS、SLB等资源的精细授权。
说明 在使用STS Token前,确保该产品支持STS Token验证。

设置STS Token

您可以通过以下两种方式设置STS Token:

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

    using System; using Aliyun.Acs.Core; using Aliyun.Acs.Core.Auth; using Aliyun.Acs.Core.Profile; using Aliyun.Acs.Core.Exceptions; using Aliyun.Acs.Ecs.Model.V20140526;  class SimpleSTSTokenSample {     static void Main(string[] args)     {         BasicSessionCredentials credentials = new BasicSessionCredentials(             "<your-access-key-id>",             "<your-access-key-secret>",             "<your-session-token>");          // 创建客户端实例         IClientProfile profile = DefaultProfile.GetProfile("<your-region-id>");         DefaultAcsClient client = new DefaultAcsClient(profile, credentials);         try         {             // 创建API请求并设置参数             DescribeInstancesRequest request = new DescribeInstancesRequest();             request.PageSize = 10;              // 请求并打印处理结果             DescribeInstancesResponse response = client.GetAcsResponse(request);             Console.WriteLine("TotalCount: {0}", response.TotalCount);         }         catch (ServerException e)         {             Console.WriteLine(e.ErrorCode);             Console.WriteLine(e.ErrorMessage);         }         catch (ClientException e)         {             Console.WriteLine(e.ErrorCode);             Console.WriteLine(e.ErrorMessage);         }     } }

    其中:

    • region-id是您正在使用的地域ID。您可以通过调用DescribeRegions接口查看地域ID。
    • sts-access-key-idsts-access-key-secretsts-session-token调用AssumeRole接口返回的授权信息。
  • 方式二:使用SDK自动管理STS Token
    您可以通过指定RAM的角色信息,让SDK帮您自动申请并维护STS Token。

    using System; using Aliyun.Acs.Core; using Aliyun.Acs.Core.Auth; using Aliyun.Acs.Core.Profile; using Aliyun.Acs.Core.Exceptions; using Aliyun.Acs.Ecs.Model.V20140526;  class UseRoleArnSample {     static void Main(string[] args)     {         IClientProfile profile = DefaultProfile.GetProfile("<your-region-id>");         BasicCredentials basicCredentials = new BasicCredentials(             "<your-access-key-id>",             "<your-access-key-secret>");         STSAssumeRoleSessionCredentialsProvider provider = new STSAssumeRoleSessionCredentialsProvider(             basicCredentials,             "<your-role-arn>",             profile);          // 创建客户端实例         DefaultAcsClient client = new DefaultAcsClient(profile, provider);          try         {             // 创建API请求并设置参数             DescribeInstancesRequest request = new DescribeInstancesRequest();             request.PageSize = 10;              // 请求并打印处理结果             DescribeInstancesResponse response = client.GetAcsResponse(request);             Console.WriteLine("TotalCount: {0}", response.TotalCount);         }         catch (ServerException e)         {             Console.WriteLine(e.ErrorCode);             Console.WriteLine(e.ErrorMessage);         }         catch (ClientException e)         {             Console.WriteLine(e.ErrorCode);             Console.WriteLine(e.ErrorMessage);         }     } }

    其中:

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

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