拒绝访问签名URL .NET CloudFront

时间:2019-05-14 19:03:04

标签: asp.net amazon-web-services amazon-cloudfront pre-signed-url

我正在尝试为s3存储桶设置一个Cloudfront,它将仅允许用户使用签名的URL进行读取或写入。(读取文件,上传和下载)

S3没有公共的读/写权限。

CloudFront是: Http和HTTPS。 它具有Trusted Signer作为自己。 它具有“受限视图”访问权限。 它的原始域名为origin-domain-name / public。 最后,它的原始访问身份为origin-access-identity / cloudfront / XXXXXXX。

我有我的Cloudfront Pem文件和AWS私钥ID。

我的用于生成签名URL的C#代码是:

  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白皮书,但没有找到直接的指导。

2 个答案:

答案 0 :(得分:0)

查看documentation时会遇到两个问题:

"http://xxxxxxxxxx.cloudfront.net"不应包含http://,因为该字段是distributionDomain,并且需要域名,而不是基本URL。

"public/AddinJudgeIssue.png"应该有前导/,因为此字段是resourcePath。即使对象键没有,路径也以/开头。

答案 1 :(得分:0)

做了一些实验后,我开始工作了。尽管我使用根凭据和pem密钥生成了签名的URL,但仍必须授予对S3存储桶的公共读/写访问权限。这就是为什么我遇到拒绝访问错误的原因。在Cloudfront设置中,“限制存储桶访问”选项仍然会限制我的存储桶。