1

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을 따르는 경우에 나는이 메시지 ?

+0

버킷 소유자가 객체의 소유자입니까? 내가 물어 본 이유는 버킷 정책은 버킷 소유자가 객체의 소유자 인 경우에만 적용됩니다. – imperalix

+0

물통과 물체 모두에 "Owner : Me"라고 표시되어 있습니다. 루트 계정이 아니라 동일한 IAM 계정을 사용하여 두 계정을 모두 만들었습니다. 나는 또한 CloudFront Origin Access Identity ************* 명시 적 열기/다운로드 권한을 객체에 부여하려고 시도했지만 그 역시 도움이되지 않았습니다. –

+0

CloudFront 설정에서 신뢰할 수있는 서명자를 추가했다고 언급하지 않았습니다 (http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html). CloudFront가 신뢰할 수있는 서명을 알 수 있도록하려면이 작업을 수행해야합니다. –

답변

1

오늘 문제가 해결되어 누구나 같은 문제가 발생하면 해결책을 게시하겠다고 생각했습니다.

나는 URL 자체의 생성에 문제가 있다는 것을 알아 냈으므로, 다시 한 번 자격 증명을 검토했다. 모든 것을 확인한 후에 새로운 Cloudfront 키 쌍을 만들려고했습니다. 어떤 이유로이 문제가 해결되었습니다.

관련 문제