Description
Describe the bug
After upgrading aws-sdk-go-v2
beyond v1.24.0, the PresignGetObject
op adds to X-Amz-SignedHeaders
which seems to always produce "SignatureDoesNotMatch" errors.
Expected Behavior
https://s3.us-east-2.amazonaws.com/
some_bucket/some_file.png
?X-Amz-Algorithm=AWS4-HMAC-SHA256&
X-Amz-Credential=REDACTED%2Fus-east-2%2Fs3%2Faws4_request&
X-Amz-Date=20240305T040452Z&
X-Amz-Expires=900&
X-Amz-Security-Token=REDACTED&
X-Amz-SignedHeaders=host&
x-id=GetObject&
X-Amz-Signature=REDACTED
URL retrieves object.
Current Behavior
https://s3.us-east-2.amazonaws.com/
some_bucket/some_file.png
?X-Amz-Algorithm=AWS4-HMAC-SHA256&
X-Amz-Credential=REDACTED%2Fus-east-2%2Fs3%2Faws4_request&
X-Amz-Date=20240305T040232Z&
X-Amz-Expires=900&
X-Amz-Security-Token=REDACTED&
X-Amz-SignedHeaders=amz-sdk-request%3Bhost&
x-id=GetObject&
X-Amz-Signature=REDACTED
SignatureDoesNotMatch
The request signature we calculated does not match the signature you provided. Check your key and signing method.
Reproduction Steps
go get github.com/aws/[email protected]
Any version between v1.24.1 -> v1.25.2 exhibits the new behavior.
Possible Solution
Seems like it's introduced here...
diff --git a/aws/retry/middleware.go b/aws/retry/middleware.go
index 722ca34c6a..dc703d482d 100644
--- a/aws/retry/middleware.go
+++ b/aws/retry/middleware.go
@@ -328,10 +328,12 @@ func AddRetryMiddlewares(stack *smithymiddle.Stack, options AddRetryMiddlewaresO
middleware.LogAttempts = options.LogRetryAttempts
})
- if err := stack.Finalize.Add(attempt, smithymiddle.After); err != nil {
+ // index retry to before signing, if signing exists
+ if err := stack.Finalize.Insert(attempt, "Signing", smithymiddle.Before); err != nil {
return err
}
- if err := stack.Finalize.Add(&MetricsHeader{}, smithymiddle.After); err != nil {
+
+ if err := stack.Finalize.Insert(&MetricsHeader{}, attempt.ID(), smithymiddle.After); err != nil {
return err
}
return nil
Reverting if err := stack.Finalize.Add(&MetricsHeader{}, smithymiddle.After); err != nil {
fixes the issue for me.
Additional Information/Context
No response
AWS Go SDK V2 Module Versions Used
github.com/aws/aws-sdk-go-v2 v1.24.1
github.com/aws/aws-sdk-go-v2/config v1.25.8
github.com/aws/aws-sdk-go-v2/credentials v1.16.6
github.com/aws/aws-sdk-go-v2/service/s3 v1.46.0
Compiler and Version used
go version go1.21.3 darwin/arm64
Operating System and version
MacOS 13.6.3 (22G436)
Activity