使用 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/...
<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/...