
S3 버킷에서 공급되는 CloudFront 배포에 대해 서명된 쿠키를 통합하려고 하는데 액세스 거부 오류 메시지가 나타납니다.
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>BLAH BLAH</RequestId>
<HostId>BLAH BLAH</HostId>
</Error>
나를 당혹스럽게 만드는 것은 일부 파일이 일관되게 작동하는 것처럼 보이는 반면 내 사용자 정의 정책이 허용하는 것과 동일한 디렉터리에 있는 다른 파일은 동일한 서명된 쿠키를 사용하여 실패한다는 것입니다.
예: 다음 위치에 파일이 있습니다./projects/index.html작동하는 파일과 파일/projects/src/Runtime.js리소스에 와일드카드를 사용하여 두 가지를 모두 명확하게 허용하는 사용자 지정 정책을 사용하더라도 그렇지 않습니다.http://test.mydomain.com/projects/*
두 파일 모두 S3에서 비공개로 설정되어 있는데, 이 두 파일이 요청되는 방식 사이에서 제가 생각할 수 있는 유일한 차이점은/projects/src/Runtime.js파일이 리퍼러와 함께 요청되었습니다test.mydomain.com그리고는 아니다mydomain.com그게 첫 번째로 봉사한 거야/projects/index.html요구.
나는 쿠키가 두 요청 모두에서 적절하게 설정되고 있다는 것을 알고 있으며 쿠키에 대한 사용자 정의 정책과 서명이 유효하다는 것을 알고 있습니다. 쿠키를 조작하고 잘못된 값을 제공하면 다른 오류 메시지가 표시되기 때문입니다.
어쨌든! 내 구성은 다음과 같습니다.
CloudFront 설정:i.imgur.com/DMcUeDY.png(Serverfault 링크 제한, ㅋㅋㅋ)
파일을 제공하는 사이트의 하위 도메인인 대체 호스트 이름이 있습니다(예: test.mydomain.com). 실제 CNAME 항목이 아니며 이에 대한 인증서가 없습니다. 로컬 /etc/hosts 항목을 통해 해당 이름을 사용하여 CloudFront를 참조하고 있습니다.
CloudFront 오리진 설정:i.imgur.com/ereGJ42.png(Serverfault 링크 제한, meh)
원본은 간단합니다. 내 s3 버킷의 루트를 참조하고 공개적으로 사용하려는 파일도 포함되어 있기 때문에 버킷을 제한하지 않습니다.
기본 동작을 수정했습니다.i.imgur.com/5N2RlxM.png(Serverfault 링크 제한, 어)
기본적으로 뷰어 액세스 제한이 켜져 있습니다. 신뢰할 수 있는 서명자는 s3 버킷의 소유자이기도 한 루트 계정입니다.
나머지 CloudFront 옵션은 그대로 유지되었습니다. Amazon에서 생성한 CloudFront 키 쌍이 있고 이를 PHP용으로 제공되는 Amazon 코드 조각(openssl_sign 사용)과 함께 사용하여 전체 디렉터리에 대한 액세스를 제공하는 사용자 지정 정책에 서명하고 있습니다.
매우 모호한 "액세스 거부" 오류 메시지로 인해 문제가 어디에 있는지 확인할 수는 없지만 쿠키에 서명하는 방식이 아닌 것은 확실합니다. 잘못된 값을 사용하려고 시도했는데 "잘못된 서명" 또는 "잘못된 정책"과 같은 다른 오류가 발생하여 서명이 체크아웃된 것으로 가정합니다. 또한 앞서 언급했듯이 일부 파일은 작동합니다.
나는 며칠 동안 이 문제에 봉착했습니다. 어떤 도움이라도 대단히 감사하겠습니다!