S3 버킷을 원본으로 사용하는 Cloudfront 개인 배포를 사용하여 콘텐츠를 제공하려고합니다.서명 된 URL을 사용하여 Cloudfront 배포에서 액세스가 거부 됨
개인용으로 설정된 권한으로 테스트 용으로 이미지 파일을 버킷에 보관하고 있습니다. CloudFront를 기원 액세스 아이덴티티가 잘 작동 권한
내가 (서명 URL을 사용하지 않고) 대중에게 내 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}}/*"
}
]
}
얻을 수있다, 그래서 나는 나의 버킷 정책을 설정했습니다. 개체는 직접 S3 링크로 액세스 할 수 없지만 Cloudfront URL을 사용하여 액세스 할 수 있습니다.
이제 "기본 캐시 동작 설정"에서 "뷰어 액세스 제한 (서명 된 URL 사용)"을 "예"로 설정하면 더 이상 작동하지 않습니다. 403 오류가 발생합니다.
<Error>
<Code>AccessDenied</Code>
<Message>Access denied</Message>
</Error>
나는 다음과 같은 코드를 사용하여 내 서명 URL의를 만들기 위해 PHP-SDK를 사용하고 있습니다 :
require '../vendor/autoload.php';
use Aws\CloudFront\CloudFrontClient;
$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 . '">';
모든 아이디어를 내가 무슨 일을하고 있어요을 내가 서명 된 URL을 따르는 경우에 나는이 메시지 ?
버킷 소유자가 객체의 소유자입니까? 내가 물어 본 이유는 버킷 정책은 버킷 소유자가 객체의 소유자 인 경우에만 적용됩니다. – imperalix
물통과 물체 모두에 "Owner : Me"라고 표시되어 있습니다. 루트 계정이 아니라 동일한 IAM 계정을 사용하여 두 계정을 모두 만들었습니다. 나는 또한 CloudFront Origin Access Identity ************* 명시 적 열기/다운로드 권한을 객체에 부여하려고 시도했지만 그 역시 도움이되지 않았습니다. –
CloudFront 설정에서 신뢰할 수있는 서명자를 추가했다고 언급하지 않았습니다 (http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html). CloudFront가 신뢰할 수있는 서명을 알 수 있도록하려면이 작업을 수행해야합니다. –