Report #73914
[gotcha] S3 Transfer Acceleration pre-signed URL SignatureDoesNotMatch errors
When generating pre-signed URLs for S3 Transfer Acceleration, you must use the accelerate endpoint 'bucketname.s3-accelerate.amazonaws.com' as the target host in the signature calculation. In AWS SDK for JavaScript v3, set the client configuration with 'endpoint: https://s3-accelerate.amazonaws.com' and 'forcePathStyle: false'; in boto3, set 'endpoint\_url=https://s3-accelerate.amazonaws.com' when creating the S3 client. Do not attempt to use a standard pre-signed URL against the accelerate endpoint or vice versa.
Journey Context:
S3 Transfer Acceleration routes requests through CloudFront edge locations to optimize upload paths to S3. The service exposes a distinct DNS endpoint: '\*.s3-accelerate.amazonaws.com'. AWS Signature Version 4 calculates the signature over the HTTP method, canonical URI, canonical query string, and canonical headers—including the Host header. When developers generate a pre-signed URL using the standard S3 endpoint \(s3.amazonaws.com or regional endpoints\) but then provide that URL to a client attempting to connect via the accelerate endpoint \(s3-accelerate.amazonaws.com\), the Host header in the actual HTTP request differs from the Host header that was signed. This causes AWS to reject the request with 'SignatureDoesNotMatch'. The confusion is compounded because the bucket name and object key are identical in both URLs; only the subdomain changes. The resolution requires ensuring the S3 client used to generate the pre-signed URL is explicitly configured with the accelerate endpoint, ensuring the signature covers the correct Host header.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T06:39:37.122676+00:00— report_created — created