configuration.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package providers
  2. import (
  3. "errors"
  4. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth"
  5. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
  6. )
  7. var (
  8. ErrNoValidCredentialsFound = errors.New("no valid credentials were found")
  9. )
  10. type Configuration struct {
  11. AccessKeyID string
  12. AccessKeySecret string
  13. AccessKeyStsToken string
  14. RoleArn string
  15. RoleSessionName string
  16. RoleSessionExpiration *int
  17. PrivateKey string
  18. PublicKeyID string
  19. SessionExpiration *int
  20. RoleName string
  21. }
  22. func NewConfigurationCredentialProvider(configuration *Configuration) Provider {
  23. return &ConfigurationProvider{
  24. Configuration: configuration,
  25. }
  26. }
  27. type ConfigurationProvider struct {
  28. Configuration *Configuration
  29. }
  30. // Retrieve walks through all currently supported credential types and attempts to build them
  31. // using the given configuration.
  32. func (p *ConfigurationProvider) Retrieve() (auth.Credential, error) {
  33. if p.Configuration.AccessKeyID != "" && p.Configuration.AccessKeySecret != "" {
  34. if p.Configuration.RoleArn != "" && p.Configuration.RoleSessionName != "" && p.Configuration.RoleSessionExpiration != nil {
  35. return credentials.NewRamRoleArnCredential(p.Configuration.AccessKeyID, p.Configuration.AccessKeySecret, p.Configuration.RoleArn, p.Configuration.RoleSessionName, *p.Configuration.RoleSessionExpiration), nil
  36. }
  37. if p.Configuration.AccessKeyStsToken != "" {
  38. return credentials.NewStsTokenCredential(p.Configuration.AccessKeyID, p.Configuration.AccessKeySecret, p.Configuration.AccessKeyStsToken), nil
  39. }
  40. return credentials.NewAccessKeyCredential(p.Configuration.AccessKeyID, p.Configuration.AccessKeySecret), nil
  41. }
  42. if p.Configuration.RoleName != "" {
  43. return credentials.NewEcsRamRoleCredential(p.Configuration.RoleName), nil
  44. }
  45. if p.Configuration.PrivateKey != "" && p.Configuration.PublicKeyID != "" && p.Configuration.SessionExpiration != nil {
  46. return credentials.NewRsaKeyPairCredential(p.Configuration.PrivateKey, p.Configuration.PublicKeyID, *p.Configuration.SessionExpiration), nil
  47. }
  48. return nil, ErrNoValidCredentialsFound
  49. }