cloudfront流分发无法使用签名网址访问我的存储桶文件

时间:2013-09-30 23:25:44

标签: java amazon-cloudfront

我设置流媒体发布的方式与设置下载发行版的方式相同,我使用的是osmf播放器。由于某些原因,我无法播放我正在测试的mp4文件。所以我测试了一些我在我的发行版中使用Restrict Viewer Access的东西,我能够播放我的普通文件,只需添加文件名,以及带有signedurl的文件。但是当我使用Restricted Viewer Access放回我的发行版时,对于签名的网址我只能播放它们。 我在我的云端分发E1XXXXXXXXXW上附加了一个标识,这是我的存储桶策略

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1XXXXXXXXXW"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucketXXXXXXXXXXXX/*"
        }
    ]
}

但是当我限制“AWS”时,我无法访问我的任何文件:“arn:aws:iam :: cloudfront:user / CloudFront Origin Access Identity E1XXXXXXXXXW”

更新

所以我做了更多测试,我创建了一个下载发行版并保留了我的流媒体发布,这就是代码,

String signedUrlDownload = CloudFrontService.signUrl("http://" + distributionDomain + "/" + s3ObjectKey, // Resource
                                                                                                                    // URL or
                                                                                                                    // Path
                        keyPairId, // Certificate identifier, an active trusted
                                    // signer for the distribution
                        derPrivateKey, // DER Private key data
                        policy // Access control policy
                        );

                System.out.println(signedUrlDownload);

                signedUrl = CloudFrontService.signUrl(s3ObjectKey, // Resource
                                                                    // URL or
                                                                    // Path
                        keyPairId, // Certificate identifier, an active trusted
                                    // signer for the distribution
                        derPrivateKey, // DER Private key data
                        policy // Access control policy
                        );
                System.out.println(signedUrl);

所以当我这样做时,我可以使用signedUrlDownload发出的字符串下载我的文件。

所以我知道它是正确生成的。

所以我一直在做测试并取消了Restrict View Access,并再次尝试使用签名的URL,它似乎工作,但后来我开始手动更改网址,无论我做什么,它每次都有效。 一切正常:

testfolder/myfile.m4a
testfolder/myfile.m4a?aaaaaa=xxxxxxxxx
testfolder/myfile.m4a??Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6IioiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEzODA1OTg3NTN9LCJJcEFkZHJlc3MiOnsiQVdTOlNvdXJjZUlwIjoiMC4wLjAuMC8wIn0sIkRhdGVHcmVhdGVyVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxMzgwNTg3OTUzfX19XX0_&Signature=EzXX1h6iBFSb6Gx2LeFwOnFmvCl6flNMXYsEKwd7ZSSMWlcd-mtOXjBqvoP58M~Bj1kikbNSDaCX5j14TY6LjVtTXE7QgcGC~0c9~wxsDAnN8VYN8ItTDJySzwv8oLPrHc3O2hh6kGF7UH3T04qbhXplRdSgHZJePLHbfG70z6A_&Key-Pair-Id=APKAITVLU6K7B3YQB4HQ

因此,这告诉我,当我限制访问时,我的策略无法正常工作,或者我将错误的值传递给我的播放器(我还在cloudfront客户端诊断工具http://d1k5ny0m6d4zlj.cloudfront.net/diag/CFStreamingDiag.html上进行了测试)。

这就是我在客户端上所做的基本上是传递以下流:

rtmp://myasdfad.cloudfront.com/cfx/st/mp4:testfolder/myfiles.m4p?Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6IioiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEzODA1OTk5MjB9LCJJcEFkZHJlc3MiOnsiQVdTOlNvdXJjZUlwIjoiMC4wLjAuMC8wIn0sIkRhdGVHcmVhdGVyVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxMzgwNTg5MTIwfX19XX0_&Signature=jaw9KQybdckjvJBpJpeo-ukVEy9nerKsTpNAa3SJxrYkWzQG0CrF6hP1ok0iGW4wKvft4hhKzZhaO-OL7hVXE09ORzCxosDhYVPGvFoLKGNYH3mP4KXXxqlBxVcNeoUogRXqNI2SJW2J-TwQ-othwwRRas3pDaVfMddyrjBr2pU_&Key-Pair-Id=APKAITVLU6K7B3YQB4HQ

1 个答案:

答案 0 :(得分:0)

我错了,最初的时间是错误的,这就是为什么它有时有效,有时它没有。