閱讀764 返回首頁    go 人物


使用入門__Java SDK_STS SDK使用手冊_訪問控製-阿裏雲

創建和管理角色

STS的AssumeRole接口的使用,需要在RAM中創建和管理角色,請參考RAM角色管理

使用maven創建項目

  1. mvn archetype:generate -DgroupId=com.aliyun.sts.sample
  2. -DartifactId=sts-sdk-sample
  3. -Dpackage=com.aliyun.sts.sample
  4. -Dversion=1.0-SNAPSHOT

修改生成的pom.xml, 添加aliyun-java-sdk的相關依賴。以2.1.6版本為例,在 標簽內加入如下內容:

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-sts</artifactId>
  4. <version>2.1.6</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.aliyun</groupId>
  8. <artifactId>aliyun-java-sdk-core</artifactId>
  9. <version>2.1.7</version>
  10. </dependency>

aliyun-java-sdk已經加入到 https://maven-repository.com/artifact/com.aliyun

無需設置maven的settings.xml。

aliyun-java-sdk-sts使用的示例代碼

  • 注意: 請修改accessKeyId和accessKeySecret為有效值。
  • 在com/aliyun/sts/sample/目錄下創建Java源代碼StsServiceSample.java,內容如下:
  1. package com.aliyun.sts.sample;
  2. import com.aliyuncs.DefaultAcsClient;
  3. import com.aliyuncs.exceptions.ClientException;
  4. import com.aliyuncs.http.MethodType;
  5. import com.aliyuncs.http.ProtocolType;
  6. import com.aliyuncs.profile.DefaultProfile;
  7. import com.aliyuncs.profile.IClientProfile;
  8. import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
  9. import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
  10. public class StsServiceSample {
  11. // 目前隻有"cn-hangzhou"這個region可用, 不要使用填寫其他region的值
  12. public static final String REGION_CN_HANGZHOU = "cn-hangzhou";
  13. // 當前 STS API 版本
  14. public static final String STS_API_VERSION = "2015-04-01";
  15. static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret,
  16. String roleArn, String roleSessionName, String policy,
  17. ProtocolType protocolType) throws ClientException {
  18. try {
  19. // 創建一個 Aliyun Acs Client, 用於發起 OpenAPI 請求
  20. IClientProfile profile = DefaultProfile.getProfile(REGION_CN_HANGZHOU, accessKeyId, accessKeySecret);
  21. DefaultAcsClient client = new DefaultAcsClient(profile);
  22. // 創建一個 AssumeRoleRequest 並設置請求參數
  23. final AssumeRoleRequest request = new AssumeRoleRequest();
  24. request.setVersion(STS_API_VERSION);
  25. request.setMethod(MethodType.POST);
  26. request.setProtocol(protocolType);
  27. request.setRoleArn(roleArn);
  28. request.setRoleSessionName(roleSessionName);
  29. request.setPolicy(policy);
  30. // 發起請求,並得到response
  31. final AssumeRoleResponse response = client.getAcsResponse(request);
  32. return response;
  33. } catch (ClientException e) {
  34. throw e;
  35. }
  36. }
  37. public static void main(String[] args) {
  38. // 隻有 RAM用戶(子賬號)才能調用 AssumeRole 接口
  39. // 阿裏雲主賬號的AccessKeys不能用於發起AssumeRole請求
  40. // 請首先在RAM控製台創建一個RAM用戶,並為這個用戶創建AccessKeys
  41. String accessKeyId = "o************F";
  42. String accessKeySecret = "y*******************U";
  43. // AssumeRole API 請求參數: RoleArn, RoleSessionName, Policy, and DurationSeconds
  44. // RoleArn 需要在 RAM 控製台上獲取
  45. String roleArn = "acs:ram::145883****900618:role/ossadminrole";
  46. // RoleSessionName 是臨時Token的會話名稱,自己指定用於標識你的用戶,主要用於審計,或者用於區分Token頒發給誰
  47. // 但是注意RoleSessionName的長度和規則,不要有空格,隻能有'-' '_' 字母和數字等字符
  48. // 具體規則請參考API文檔中的格式要求
  49. String roleSessionName = "alice-001";
  50. // 如何定製你的policy?
  51. String policy = "{n" +
  52. " "Version": "1", n" +
  53. " "Statement": [n" +
  54. " {n" +
  55. " "Action": [n" +
  56. " "oss:GetBucket", n" +
  57. " "oss:GetObject" n" +
  58. " ], n" +
  59. " "Resource": [n" +
  60. " "acs:oss:*:*:*"n" +
  61. " ], n" +
  62. " "Effect": "Allow"n" +
  63. " }n" +
  64. " ]n" +
  65. "}";
  66. // 此處必須為 HTTPS
  67. ProtocolType protocolType = ProtocolType.HTTPS;
  68. try {
  69. final AssumeRoleResponse response = assumeRole(accessKeyId, accessKeySecret,
  70. roleArn, roleSessionName, policy, protocolType);
  71. System.out.println("Expiration: " + response.getCredentials().getExpiration());
  72. System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId());
  73. System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret());
  74. System.out.println("Security Token: " + response.getCredentials().getSecurityToken());
  75. } catch (ClientException e) {
  76. System.out.println("Failed to get a token.");
  77. System.out.println("Error code: " + e.getErrCode());
  78. System.out.println("Error message: " + e.getErrMsg());
  79. }
  80. }
  81. }

編譯運行示例代碼

編譯

  1. mvn install

運行

  1. mvn -q exec:java -Dexec.mainClass=com.aliyun.sts.sample.StsServiceSample

最後更新:2016-11-23 16:04:01

  上一篇:go 示例__.Net SDK_RAM SDK使用手冊_訪問控製-阿裏雲
  下一篇:go 怎樣授權一個子用戶管理兩台指定的ECS實例___雲服務器(ECS)授權問題_授權常見問題_訪問控製-阿裏雲