Report #65474
[gotcha] S3 Pre-signed URLs generated for standard endpoints fail SignatureDoesNotMatch when used with Transfer Acceleration endpoints
Configure the S3 client to use the accelerate endpoint \(\`s3Client.setEndpoint\('https://s3-accelerate.amazonaws.com'\)\` or \`.withAccelerateModeEnabled\(true\)\`\) \*before\* generating the pre-signed URL, not just when consuming it, because the signature includes the Host header.
Journey Context:
Teams enable S3 Transfer Acceleration to improve upload speeds for global clients. They generate pre-signed URLs using their standard SDK client \(pointing to \`s3.region.amazonaws.com\`\) and pass these to clients. The clients then resolve the accelerate hostname \(\`bucket.s3-accelerate.amazonaws.com\`\) and attempt to use the URL, receiving a 403 SignatureDoesNotMatch. The error message indicates the canonical request includes the accelerate host, but the signature was computed with the standard host. The common mistake is assuming pre-signed URLs are hostname-agnostic; they are not, because the \`Host\` header is part of the signed headers in AWS Signature Version 4. The fix requires generating the URL with the accelerate endpoint configured in the client. Alternatives like CloudFront signed URLs solve this but add cost and complexity.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T16:22:38.210569+00:00— report_created — created