Доступ к CloudFront + S3 запрещен при использовании подписанных файлов cookie

Доступ к CloudFront + S3 запрещен при использовании подписанных файлов cookie

Я пытаюсь интегрировать подписанные файлы cookie для дистрибутива CloudFront, который питается от контейнера S3, но получаю сообщения об ошибке «Отказано в доступе»:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>BLAH BLAH</RequestId>
    <HostId>BLAH BLAH</HostId>
</Error>

Меня сбивает с толку то, что некоторые файлы, похоже, работают стабильно, в то время как другие в том же каталоге, который разрешен моей пользовательской политикой, не работают при использовании тех же подписанных файлов cookie.

Например: у меня есть файл по адресу/проекты/index.htmlкоторый работает и файл на/projects/src/Runtime.jsчто не происходит, несмотря на использование пользовательской политики, которая явно разрешает оба варианта, имея подстановочный знак в ресурсе:http://test.mydomain.com/projects/*

Оба файла настроены как приватные на S3, единственное различие, которое я могу придумать между тем, как эти два файла запрашиваются, заключается в том, что/projects/src/Runtime.jsфайл запрашивается с рефереромtest.mydomain.comи немойдомен.comчто и послужило первым/проекты/index.htmlзапрос.

Я знаю, что файлы cookie устанавливаются правильно в обоих запросах, и что пользовательская политика и подпись для них действительны, потому что когда я вмешиваюсь в них и задаю им неправильные значения, я получаю другое сообщение об ошибке.

В любом случае! Моя конфигурация следующая:
Настройки CloudFront:i.imgur.com/DMcUeDY.png(Ограничение ссылок Serverfault, ха-ха)
У меня есть альтернативное имя хоста, которое является поддоменом сайта, обслуживающего файл (например, test.mydomain.com). Это не настоящая запись CNAME, и у меня нет сертификата для нее — я ссылаюсь на CloudFront, используя это имя через локальную запись /etc/hosts.

Настройки CloudFront Origin:i.imgur.com/ereGJ42.png(Ограничение ссылок Serverfault, эээ)
Источник прост — ссылка на корень моего контейнера s3, и я не ограничиваю контейнер, потому что он также содержит файлы, которые я хочу оставить общедоступными.

Я изменил поведение по умолчанию:i.imgur.com/5N2RlxM.png(Ограничение ссылок Serverfault, ухх)
По сути включил Restrict Viewer Access. Доверенные подписанты — это учетная запись root, которая также является владельцем бакета s3.

Остальные параметры CloudFront остались нетронутыми. У меня есть пара ключей CloudFront, сгенерированная Amazon, и я использую ее с фрагментами, предоставленными Amazon для PHP (используя openssl_sign), чтобы подписать пользовательскую политику, предоставляющую доступ ко всему каталогу.

Я не могу точно определить, в чем проблема, из-за очень расплывчатого сообщения об ошибке "Доступ запрещен", но я почти уверен, что проблема не в том, как я подписываю куки. Я пробовал использовать неправильные значения и получал разные ошибки, такие как "Malformed Signature" или "Malformed Policy", поэтому я предполагаю, что моя подпись проходит проверку. Кроме того, как я уже упоминал, некоторые файлы работают.

Я уже несколько дней не могу решить эту проблему. Буду очень признателен за любую помощь!

Связанный контент