Как добавить параметр строки запроса в Cloudfront?

Я хотел бы добавить параметр строки запроса в свой 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.

Для подписанного распространения аудио включено ведение журнала, в то время как для распространения изображений ведение журнала отсутствует. Помимо этого, их настройки одинаковы.

Что мне нужно сделать, чтобы распространение аудио приняло мой параметр пользовательского запроса? Спасибо / о

Итак, в чем именно заключается ваш вопрос: как перенаправить строки запроса на S3 или как заставить S3 их принимать?

AlexK 10.12.2018 10:27

Извините, если неясно, но вопрос в том, как заставить Cloudfront принимать строку запроса и не возвращать ответ «Доступ запрещен».

jola 10.12.2018 12:00

Да, объект действительно существует, запрос его без настраиваемого параметра запроса работает нормально, но если я добавлю параметр (например, тестовый в моем примере выше), я получаю отказ в доступе. Мне не нужно изменять настройку «переадресованных строк запроса», поскольку мне не нужен запрос для перехода на S3, мне нужно только, чтобы он фиксировался журналами доступа Cloudfront, что должно происходить даже без пересылки, согласно docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…. (jfyi) изменение его в существующем дистрибутиве работает нормально (хотя мне это и не нужно :-)

jola 10.12.2018 13:18

Обратитесь к этому. Надеюсь, поможет. stackoverflow.com/questions/54965779/…

Nagarajan S R 23.05.2021 22:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
4
4 969
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Одна из основных концепций подписанных 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.

jola 10.12.2018 16:22

Дополнительные / необязательные параметры можно разрешить для подписанного URL-адреса облачного интерфейса, добавив звездочку (*) к ресурсу в политике подписи.

Например, если вы подпишете URL-адрес: https://example.com/images/funny/cat.png*, то вы сможете добавить дополнительные параметры к URL-адресу.

Если параметры не должны быть необязательными, вы также можете подписать его так: https://example.com/images/funny/cat.png?w=*&h=*. Таким образом, значения параметров w и h могут быть любыми, но оба параметра должны быть установлены.

Другие вопросы по теме