By jonathan
I’m encountering a SignatureDoesNotMatch error when attempting to set the ACL to “public-read” within a PutObject command using a pre-signed URL. The request utilizes the PUT verb against the pre-signed URL.
Is there a limitation on including the ACL parameter with a pre-signed URL?
PS: I am using AWS SDK PHP to create the pre-signed URL.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
There is indeed a limitation with using the ACL parameter and pre-signed URLs in the AWS SDK for PHP. Pre-signed URLs are designed to grant temporary access with predefined permissions, and including ACL attempts to modify the object’s access control beyond the pre-signed URL’s scope.
Here’s how you can address it:
Separate the actions: Create a separate pre-signed URL for the PutObject action without the ACL parameter. Then, use a different API call (e.g., putObjectAcl) to set the ACL to “public-read” after uploading the object.
Consider IAM Policies: If you require public access to the object, consider setting the bucket policy or a specific object policy on the S3 console to “public-read” instead of relying on the ACL parameter during upload. This avoids pre-signed URL limitations.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Full documentation for every DigitalOcean product.
The Wave has everything you need to know about building a business, from raising funding to marketing your product.
Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.
New accounts only. By submitting your email you agree to our Privacy Policy
Scale up as you grow — whether you're running one virtual machine or ten thousand.
Sign up and get $200 in credit for your first 60 days with DigitalOcean.*
*This promotional offer applies to new accounts only.