开发者社区> 问答> 正文

Java SDK:使用STS Token进行访问



直接使用阿里云账号的主账号的Access Key ID和Access Key Secret进行应用开发会有一定的安全风险,为了提升安全性,您可以使用为RAM角色签发的STS Token来访问阿里云服务。这里介绍如何使用STS Token来调用SDK访问阿里云服务,更多关于RAM和STS的资料请参考 RAM和STS介绍
使用STS Token调用SDK有以下好处:
1) 减少了主账号Access Key ID和Access Key Secret泄露的风险,特别是移动设备等场景。2) 能使用灵活的权限控制,STS Token有一定的时间限制,并且根据RAM角色的灵活设置对ECS、SLB资源的精细授权。

方式一:直接使用STS Token


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

  1. import com.aliyuncs.DefaultAcsClient;
  2. import com.aliyuncs.auth.BasicSessionCredentials;
  3. import com.aliyuncs.ecs.model.v20140526.DescribeInstancesRequest;
  4. import com.aliyuncs.ecs.model.v20140526.DescribeInstancesResponse;
  5. import com.aliyuncs.exceptions.ClientException;
  6. import com.aliyuncs.profile.DefaultProfile;
  7. public class SimpleSTSTokenSample {
  8.     public static void main(String[] args) {
  9.         BasicSessionCredentials credentials = new BasicSessionCredentials(
  10.             "<your-access-key-id>",
  11.             "<your-access-key-secret>",
  12.             "<your-session-token>"
  13.         );
  14.         DefaultProfile profile = DefaultProfile.getProfile("<your-region-id>");
  15.         DefaultAcsClient client = new DefaultAcsClient(profile, credentials);
  16.         DescribeInstancesRequest request = new DescribeInstancesRequest();
  17.         try {
  18.             DescribeInstancesResponse response = client.getAcsResponse(request);
  19.         } catch (ClientException e) {
  20.             System.err.println(e.toString());
  21.         }
  22.     }
  23. }

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


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


直接使用STS Token调用SDK会带来周期性刷新的麻烦,SDK提供了一种更为方便的方式供您调用。您可以传入RoleArn(角色的全局资源描述符,详情请看 身份管理中的角色)给SDK,让SDK帮您管理AssumeRole请求的调用、授权信息的获取和使用以及授权信息的过期自动更新。样例代码如下:
  1. import com.aliyuncs.DefaultAcsClient;
  2. import com.aliyuncs.auth.BasicCredentials;
  3. import com.aliyuncs.auth.STSAssumeRoleSessionCredentialsProvider;
  4. import com.aliyuncs.ecs.model.v20140526.DescribeInstancesRequest;
  5. import com.aliyuncs.ecs.model.v20140526.DescribeInstancesResponse;
  6. import com.aliyuncs.exceptions.ClientException;
  7. import com.aliyuncs.profile.DefaultProfile;
  8. public class UseRoleArnSample {
  9.     public static void main(String[] args) {
  10.         DefaultProfile profile = DefaultProfile.getProfile("<your-region-id>");
  11.         BasicCredentials basicCredentials = new BasicCredentials(
  12.             "<your-access-key-id>",
  13.             "<your-access-key-id>"
  14.         );
  15.         STSAssumeRoleSessionCredentialsProvider provider = new STSAssumeRoleSessionCredentialsProvider(
  16.             basicCredentials,
  17.             "<your-role-arn>",
  18.             profile
  19.         );
  20.         DefaultAcsClient client = new DefaultAcsClient(profile, provider);
  21.         DescribeInstancesRequest request = new DescribeInstancesRequest();
  22.         try {
  23.             DescribeInstancesResponse response = client.getAcsResponse(request);
  24.         } catch (ClientException e) {
  25.             System.err.println(e.toString());
  26.         }
  27.     }
  28. }

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

展开
收起
行者武松 2017-10-23 14:48:46 3325 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载