
Я пытаюсь интегрировать подписанные файлы 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", поэтому я предполагаю, что моя подпись проходит проверку. Кроме того, как я уже упоминал, некоторые файлы работают.
Я уже несколько дней не могу решить эту проблему. Буду очень признателен за любую помощь!