Report this

What is the reason for this report?

Presigned URL SignatureDoesNotMatch on Digital Oceans Spaces

Posted on August 7, 2019

Hi all. I’m new to spaces and I can’t seem to get a valid Pre-signed URL with this code. If anyone has pointers or corrections I would really appreciate it. I have also added a wildcard CORS with all permissions.

module.exports = async function (context, req) {
    const aws = require('aws-sdk');

    var signedURL;

    let DO_ENDPOINT = req.body.do_endpoint;
    let DO_ACCESS_KEY_ID = req.body.access_key;
    let DO_SECRET_ACCESS_KEY = req.body.secret_key;
    let DO_SPACE = req.body.bucket;
    let DO_GUID = req.body.key;

    const spacesEndpoint = new aws.Endpoint(DO_ENDPOINT);
    const s3 = new aws.S3({
        endpoint: spacesEndpoint,
        accessKeyId: DO_ACCESS_KEY_ID,
        secretAccessKey: DO_SECRET_ACCESS_KEY,
    });

    const s3Params = {
        Bucket: DO_SPACE,
        Key: DO_GUID,
        ACL: 'public-read',
        Expires: 600,
    };

    s3.getSignedUrl('putObject', s3Params, function (err, url) {
        if (err) {
            context.res = {
                status: 400,
                body: "Something went wrong, please try again."
            };
        } else {
            context.res = {
                body: url
            };
        }
    });
};

The error I keep getting is:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>SignatureDoesNotMatch</Code>
    <RequestId>tx0000000000000a3a794c8-005d4ad207-11f28ea-ams3a</RequestId>
    <HostId>11f28ea-ams3a-ams3</HostId>
</Error>

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Start building today

From GPU-powered inference and Kubernetes to managed databases and storage, get everything you need to build, scale, and deploy intelligent applications.