diff --git a/.changelog/363e17c617154bf4b6f4f27355dce260.json b/.changelog/363e17c617154bf4b6f4f27355dce260.json new file mode 100644 index 00000000000..06d5c2855fd --- /dev/null +++ b/.changelog/363e17c617154bf4b6f4f27355dce260.json @@ -0,0 +1,8 @@ +{ + "id": "363e17c6-1715-4bf4-b6f4-f27355dce260", + "type": "bugfix", + "description": "Fixes an issues where an error from an underlying SigV4 credential provider would not be surfaced from the SigV4a credential provider. Contribution by [sakthipriyan-aqfer](https://github.com/sakthipriyan-aqfer).", + "modules": [ + "internal/v4a" + ] +} \ No newline at end of file diff --git a/internal/v4a/credentials.go b/internal/v4a/credentials.go index 856dcd62d4e..3ae3a019e62 100644 --- a/internal/v4a/credentials.go +++ b/internal/v4a/credentials.go @@ -51,7 +51,7 @@ type SymmetricCredentialAdaptor struct { func (s *SymmetricCredentialAdaptor) Retrieve(ctx context.Context) (aws.Credentials, error) { symCreds, err := s.retrieveFromSymmetricProvider(ctx) if err != nil { - return aws.Credentials{}, nil + return aws.Credentials{}, err } if asymCreds := s.getCreds(); asymCreds == nil { diff --git a/internal/v4a/credentials_test.go b/internal/v4a/credentials_test.go index f19d73a21b9..43033bd6901 100644 --- a/internal/v4a/credentials_test.go +++ b/internal/v4a/credentials_test.go @@ -9,9 +9,15 @@ import ( type rotatingCredsProvider struct { count int + fail chan struct{} } func (r *rotatingCredsProvider) Retrieve(ctx context.Context) (aws.Credentials, error) { + select { + case <-r.fail: + return aws.Credentials{}, fmt.Errorf("rotatingCredsProvider error") + default: + } credentials := aws.Credentials{ AccessKeyID: fmt.Sprintf("ACCESS_KEY_ID_%d", r.count), SecretAccessKey: fmt.Sprintf("SECRET_ACCESS_KEY_%d", r.count), @@ -21,7 +27,10 @@ func (r *rotatingCredsProvider) Retrieve(ctx context.Context) (aws.Credentials, } func TestSymmetricCredentialAdaptor(t *testing.T) { - provider := &rotatingCredsProvider{} + provider := &rotatingCredsProvider{ + count: 0, + fail: make(chan struct{}), + } adaptor := &SymmetricCredentialAdaptor{SymmetricProvider: provider} @@ -58,4 +67,10 @@ func TestSymmetricCredentialAdaptor(t *testing.T) { if load := adaptor.asymmetric.Load(); load.(*Credentials) != nil { t.Errorf("expect asymmetric credentials to be nil") } + + close(provider.fail) // All requests to the original provider will now fail from this point-on. + _, err := adaptor.Retrieve(context.Background()) + if err == nil { + t.Error("expect error, got nil") + } }