使用 aws-cloudfront-sign 和 node.js 为 Amazon s3 生成签名 url 时拒绝访问

AccessDenied when generate signed url for Amazon s3 using aws-cloudfront-sign and node.js

我在 s3 上创建了一个存储桶并添加了一个 HTML 文件,之后我使用我的 root 用户创建了一个 Cloud Front 密钥对并为该存储桶添加了一个 Cloud Front Distribution。尝试使用该分布访问对象并且它有效,而不是我使用行为限制对存储桶的访问并选择 "self"。 最后,我从节点 js 生成了一个签名 url 并使用 Postman 对其进行了测试。 问题是我总是得到 AccessDenied。

<Error>
<Code>AccessDenied</Code>
<Message>Access denied</Message>
</Error>

这是我的代码。

const cfsign = require("aws-cloudfront-sign");

var signingParams = {
    keypairId: process.env.PUBLIC_KEY,
    privateKeyPath: "./aws/Y3PA.pem",
    expireTime: (new Date().getTime() + 999999999)
};

// Generating a signed URL
signedUrl = () => {
    console.log("url created " + process.env.PUBLIC_KEY);

    return cfsign.getSignedUrl(
        "xxxx.cloudfront.net/test.html",
        signingParams
    );
}

该方案是 input to the signature algorithm 所要求的 URL 的一部分,因此您的错误很可能在这里:

cfsign.getSignedUrl("xxxx.cloudfront.net/...

你需要的不是那个:

cfsign.getSignedUrl("https://xxxx.cloudfront.net/...