base.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package integration
  2. import (
  3. "fmt"
  4. "github.com/aliyun/alibaba-cloud-sdk-go/services/ram"
  5. "github.com/aliyun/alibaba-cloud-sdk-go/services/sts"
  6. "strings"
  7. "os"
  8. )
  9. var role_doc = `{
  10. "Statement": [{
  11. "Action": "sts:AssumeRole",
  12. "Effect": "Allow",
  13. "Principal": {
  14. "RAM": [
  15. "acs:ram::%s:root"
  16. ]
  17. }
  18. }],
  19. "Version": "1"
  20. }`
  21. func createRole(userid string) error{
  22. listRequest :=ram.CreateListRolesRequest()
  23. listRequest.Scheme = "HTTPS"
  24. client, err := ram.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  25. if err != nil {
  26. return err
  27. }
  28. listResponse, err :=client.ListRoles(listRequest)
  29. if err != nil {
  30. return err
  31. }
  32. for _, role := range listResponse.Roles.Role {
  33. if strings.ToLower(role.RoleName) == "testrole" {
  34. return nil
  35. }
  36. }
  37. createRequest := ram.CreateCreateRoleRequest()
  38. createRequest.Scheme = "HTTPS"
  39. createRequest.RoleName = "testrole"
  40. createRequest.AssumeRolePolicyDocument = fmt.Sprintf(role_doc, userid)
  41. _, err = client.CreateRole(createRequest)
  42. if err != nil {
  43. return err
  44. }
  45. return nil
  46. }
  47. func createUser()(error){
  48. listRequest := ram.CreateListUsersRequest()
  49. listRequest.Scheme = "HTTPS"
  50. client, err := ram.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  51. if err != nil {
  52. return err
  53. }
  54. listResponse, err := client.ListUsers(listRequest)
  55. if err != nil {
  56. return err
  57. }
  58. for _, user := range listResponse.Users.User {
  59. if user.UserName == "alice" {
  60. return nil
  61. }
  62. }
  63. createRequest := ram.CreateCreateUserRequest()
  64. createRequest.Scheme = "HTTPS"
  65. createRequest.UserName = "alice"
  66. _, err = client.CreateUser(createRequest)
  67. if err != nil {
  68. return err
  69. }
  70. return nil
  71. }
  72. func createAttachPolicyToUser()error{
  73. listRequest := ram.CreateListPoliciesForUserRequest()
  74. listRequest.UserName ="alice"
  75. listRequest.Scheme = "HTTPS"
  76. client, err := ram.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  77. if err != nil {
  78. return err
  79. }
  80. listResponse, err := client.ListPoliciesForUser(listRequest)
  81. if err != nil {
  82. return err
  83. }
  84. for _, policy := range listResponse.Policies.Policy {
  85. if policy.PolicyName == "AliyunSTSAssumeRoleAccess" {
  86. return nil
  87. }
  88. }
  89. createRequest := ram.CreateAttachPolicyToUserRequest()
  90. createRequest.Scheme = "HTTPS"
  91. createRequest.PolicyName = "AliyunSTSAssumeRoleAccess"
  92. createRequest.UserName = "alice"
  93. createRequest.PolicyType = "System"
  94. _, err = client.AttachPolicyToUser(createRequest)
  95. if err != nil {
  96. return err
  97. }
  98. return nil
  99. }
  100. //func createAccessKey()(string, string, error){
  101. // client, err := ram.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  102. // if err != nil {
  103. // return "", "", err
  104. // }
  105. // listrequest := ram.CreateListAccessKeysRequest()
  106. // listrequest.UserName = "alice"
  107. // listrequest.Scheme = "HTTPS"
  108. // listresponse, err := client.ListAccessKeys(listrequest)
  109. // if err != nil {
  110. // return "", "", err
  111. // }
  112. // if listresponse.AccessKeys.AccessKey != nil {
  113. // accesskey := listresponse.AccessKeys.AccessKey[0]
  114. // if accesskey.AccessKeySecret != "" && accesskey.AccessKeySecret != "---" {
  115. // return accesskey.AccessKeyId, accesskey.AccessKeySecret, err
  116. // } else {
  117. // deleterequest := ram.CreateDeleteAccessKeyRequest()
  118. // deleterequest.UserAccessKeyId = accesskey.AccessKeyId
  119. // deleterequest.UserName = "alice"
  120. // _, err := client.DeleteAccessKey(deleterequest)
  121. // if err != nil {
  122. // return "", "", err
  123. // }
  124. // }
  125. // }
  126. // request := ram.CreateCreateAccessKeyRequest()
  127. // request.Scheme = "HTTPS"
  128. // request.UserName = "alice"
  129. // response, err := client.CreateAccessKey(request)
  130. // if err != nil {
  131. // return "", "",err
  132. // }
  133. //
  134. // return response.AccessKey.AccessKeyId, response.AccessKey.AccessKeySecret, nil
  135. //}
  136. func createAssumeRole()(*sts.AssumeRoleResponse, error){
  137. err := createUser()
  138. if err != nil {
  139. return nil,err
  140. }
  141. err = createRole(os.Getenv("USER_ID"))
  142. if err != nil {
  143. return nil,err
  144. }
  145. err = createAttachPolicyToUser()
  146. if err != nil {
  147. return nil,err
  148. }
  149. //subaccesskeyid, subaccesskeysecret, err := createAccessKey()
  150. //if err != nil {
  151. // return "","","",err
  152. //}
  153. request := sts.CreateAssumeRoleRequest()
  154. request.RoleArn = fmt.Sprintf("acs:ram::%s:role/testrole", os.Getenv("USER_ID"))
  155. request.RoleSessionName = "alice_test"
  156. request.Scheme = "HTTPS"
  157. client, err := sts.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
  158. response, err := client.AssumeRole(request)
  159. if err != nil {
  160. return nil,err
  161. }
  162. return response, nil
  163. }