使用签名的URL在Cloudfront分发中拒绝访问
我正尝试使用以S3存储桶为原点的Cloudfront专用分发服务。
我的存储桶中有一个图像文件用于测试目的,并将其权限设置为“私人”。 我已经设置了我的存储桶策略,以便Cloudfront原始访问标识获得权限
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity **************"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::studeersnel.{{my-bucket}}/*"
}
]
}
当我将我的Cloudfront发行版设置为公开(不使用签名的url)时,它可以正常工作。 该对象不能通过直接S3链接访问,但可以使用Cloudfront URL访问该对象。
现在,当我在“默认缓存行为设置”下将“限制查看器访问(使用签名的URL)”设置为“是”时,它不再起作用。 我得到一个403错误。 如果我按照签名的网址收到此消息:
<Error>
<Code>AccessDenied</Code>
<Message>Access denied</Message>
</Error>
我正在使用下面的代码使用php-sdk来创建我的签名url:
require '../vendor/autoload.php';
use AwsCloudFrontCloudFrontClient;
$cloudFront = CloudFrontClient::factory(array(
'key' => '********************',
'secret' => '****************************************',
'private_key' => '../pk-********************.pem',
'key_pair_id' => '********************',
));
$hostUrl = 'http://**************.cloudfront.net';
$resourceKey = 'desert.jpg';
$expires = time() + 300;
$signedUrl = $cloudFront->getSignedUrl(array(
'url' => $hostUrl . '/' . $resourceKey,
'expires' => $expires,
));
echo $signedUrl.'<br><br>';
echo '<img src="' . $signedUrl . '">';
任何想法我做错了什么?
今天修正了这个问题,所以想到如果有人遇到同样的问题,我会在这里发布解决方案。
我认为这一定是网址本身产生的问题,所以再次重申证书。 在检查完所有我决定尝试创建一个新的Cloudfront密钥对之后。 出于某种原因,这已经解决了这个问题。
链接地址: http://www.djcxy.com/p/93535.html上一篇: Access denied on Cloudfront distribution using signed URL's