我正在尝试为我的S3存储桶设置一个云,这只会允许用户使用签名的URL读取或写入。(读取文件,上传和下载(
S3没有公共读/写许可。
CloudFront是:HTTP和HTTPS。它已信任签名者是自我。它具有限制的视图访问。它具有原始域名作为Origin Domain-Name/public。最后,它具有原始访问身份作为Origin-access-endistity/cloudfront/xxxxxxx。
我有我的CloudFront PEM文件和AWS私钥ID。
我的C#代码生成签名的URL是:
StreamReader sr = new StreamReader("../../keys/CloudFront-PrivateKey.pem");
var url = AmazonCloudFrontUrlSigner.GetCannedSignedURL(
AmazonCloudFrontUrlSigner.Protocol.http,
"http://xxxxxxxxxx.cloudfront.net",
sr,
"public/AddinJudgeIssue.png",
"<AWS Private Key ID>",
DateTime.Now.AddDays(2));
每次执行代码时,都会生成URL。但是,当我将其复制并粘贴到URL时,它说"访问被拒绝"。
首先,有人知道为什么会发生这种情况吗?
其次,这可以以某种方式起作用,我可以使用相同的技术将资产上传到存储桶?
谢谢您,对我的无知表示歉意。我挖了AWS白皮书,但没有找到直接的指导。
查看文档提出了两个问题:
"http://xxxxxxxxxx.cloudfront.net"
不应包括http://
,因为该字段是distributionDomain
,并且期望域名,而不是基本URL。
"public/AddinJudgeIssue.png"
应该具有领先的/
,因为此字段是resourcePath
。路径以/
开头,即使对象键没有。
进行一些实验后,我使它起作用。尽管我使用根凭证和PEM密钥来生成签名的URL,但我仍然必须对我的S3存储桶进行公众读取/写入访问。这就是为什么我被访问被拒绝错误的原因。在CloudFront设置中,"限制存储键访问"选项无论如何都会限制我的存储桶。