provider.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package aws
  2. import (
  3. "fmt"
  4. "github.com/aws/aws-sdk-go/aws"
  5. "github.com/aws/aws-sdk-go/aws/credentials"
  6. "github.com/aws/aws-sdk-go/aws/credentials/stscreds"
  7. "github.com/aws/aws-sdk-go/aws/request"
  8. "github.com/aws/aws-sdk-go/aws/session"
  9. "github.com/aws/aws-sdk-go/service/sts"
  10. ctrl "sigs.k8s.io/controller-runtime"
  11. )
  12. // Config contains configuration to create a new AWS provider.
  13. type Config struct {
  14. AssumeRole string
  15. Region string
  16. APIRetries int
  17. }
  18. var log = ctrl.Log.WithName("provider").WithName("aws")
  19. // NewSession creates a new aws session based on the supported input methods.
  20. // https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials
  21. func NewSession(sak, aks, region, role string, stsprovider STSProvider) (*session.Session, error) {
  22. config := aws.NewConfig()
  23. sessionOpts := session.Options{
  24. Config: *config,
  25. }
  26. if sak != "" && aks != "" {
  27. sessionOpts.Config.Credentials = credentials.NewStaticCredentials(aks, sak, "")
  28. sessionOpts.SharedConfigState = session.SharedConfigDisable
  29. }
  30. sess, err := session.NewSessionWithOptions(sessionOpts)
  31. if err != nil {
  32. return nil, fmt.Errorf("unable to create aws session: %w", err)
  33. }
  34. if region != "" {
  35. log.V(1).Info("using region", "region", region)
  36. sess.Config.WithRegion(region)
  37. }
  38. if role != "" {
  39. log.V(1).Info("assuming role", "role", role)
  40. stsclient := stsprovider(sess)
  41. sess.Config.WithCredentials(stscreds.NewCredentialsWithClient(stsclient, role))
  42. }
  43. sess.Handlers.Build.PushBack(request.WithAppendUserAgent("external-secrets"))
  44. return sess, nil
  45. }
  46. type STSProvider func(*session.Session) stscreds.AssumeRoler
  47. func DefaultSTSProvider(sess *session.Session) stscreds.AssumeRoler {
  48. return sts.New(sess)
  49. }