Я хотел бы добавить параметр строки запроса в свой URL-адрес Cloudfront, чтобы иметь возможность получать дополнительную информацию в журнале Cloudfront. У меня есть два дистрибутива, один подписан, а другой не подписан, что указывает на два разных сегмента S3 (один со звуком, один с изображениями). Доступ к обоим дистрибутивам отлично работает без добавленных строк запроса, но если я добавлю параметр запроса, подобный приведенному ниже тесту:
https://x.cloudfront.net/audio.m4a?li=...62&Expires=1544430879&Signature=...QTQ__&Key-Pair-Id=xxx&test=fail
https://y.cloudfront.net/image.jpg?test=allgood
Первый не работает (отказано в доступе), но второй работает нормально. Ни один из дистрибутивов не пересылает строку запроса на S3.
Для подписанного распространения аудио включено ведение журнала, в то время как для распространения изображений ведение журнала отсутствует. Помимо этого, их настройки одинаковы.
Что мне нужно сделать, чтобы распространение аудио приняло мой параметр пользовательского запроса? Спасибо / о
Извините, если неясно, но вопрос в том, как заставить Cloudfront принимать строку запроса и не возвращать ответ «Доступ запрещен».
Да, объект действительно существует, запрос его без настраиваемого параметра запроса работает нормально, но если я добавлю параметр (например, тестовый в моем примере выше), я получаю отказ в доступе. Мне не нужно изменять настройку «переадресованных строк запроса», поскольку мне не нужен запрос для перехода на S3, мне нужно только, чтобы он фиксировался журналами доступа Cloudfront, что должно происходить даже без пересылки, согласно docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…. (jfyi) изменение его в существующем дистрибутиве работает нормально (хотя мне это и не нужно :-)
Обратитесь к этому. Надеюсь, поможет. stackoverflow.com/questions/54965779/…





Одна из основных концепций подписанных URL-адресов заключается в том, что они не уязвимы для подделки - вы не можете изменить подписанный URL-адрес, чтобы он оставался действительным.
CloudFront uses the public key to validate the signature and confirm that the URL hasn't been tampered with. If the signature is invalid, the request is rejected.
...
Signed CloudFront URLs cannot contain extra query string arguments. If you add a query string to a signed URL after you create it, the URL returns an HTTP 403 status.
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html
Чтобы добавить параметр строки запроса к URL-адресу, подписанному CloudFront, необходимо добавить его до, подписывая URL-адрес ... потому что добавление изменит подпись.
Спасибо, это все объясняет! Тем не менее, для Amazon было бы хорошо прояснить это в своей документации. Они говорят (в контексте веб-приложений, добавляющих строки запроса): «Если вы используете подписанные URL-адреса и хотите настроить CloudFront для пересылки строк запроса в ваш источник, ваши собственные параметры строки запроса не могут называться Expires, Key-Pair- Идентификатор, Политика или Подпись ". Это натолкнуло меня на мысль, что это можно сделать на стороне клиента. Вместо этого я попытаюсь установить файл cookie, который, надеюсь, будет отслеживаться в журнале Cloudfront.
Дополнительные / необязательные параметры можно разрешить для подписанного URL-адреса облачного интерфейса, добавив звездочку (*) к ресурсу в политике подписи.
Например, если вы подпишете URL-адрес: https://example.com/images/funny/cat.png*, то вы сможете добавить дополнительные параметры к URL-адресу.
Если параметры не должны быть необязательными, вы также можете подписать его так: https://example.com/images/funny/cat.png?w=*&h=*. Таким образом, значения параметров w и h могут быть любыми, но оба параметра должны быть установлены.
Итак, в чем именно заключается ваш вопрос: как перенаправить строки запроса на S3 или как заставить S3 их принимать?