#amazon-web-services #amazon-s3 #cors #amazon-cloudfront
#amazon-веб-службы #amazon-s3 #cors #amazon-cloudfront
Вопрос:
У меня есть корзина s3, в которой я храню файлы hls, и мне нужно иметь возможность передавать эти файлы в проигрыватель, если использовать URL-адрес s3 по умолчанию, это работает, но это небезопасно.
Я прочитал и обнаружил, что вы можете использовать CloudFront и создать подписанный URL-адрес или файл cookie. Затем я создал новый дистрибутив со следующими параметрами
Origin Domain Name: Name of my s3 bucket
Restrict Bucket Access: yes
Create a New Identity
Yes, Update Bucket Policy
Allowed HTTP Methods: GET, HEAD, OPTIONS
Cached HTTP Methods: select checkbox OPTIONS
Use legacy cache settings
And then I selected whitelist and choose
Access-Control-Request-Headers
Access-Control-Request-Method
Origin
И, наконец, я выбрал
Restrict Viewer Access (Use Signed URLs or Signed Cookies): yes
После создания дистрибутива я попытался получить доступ к файлу через
zxxxx.cloudfront.net/ls/600/10/playlist.m3u8
И я получил отсутствующий параметр запроса пары ключей-идентификатора или значение cookie
До этого момента я думаю, что все работает нормально.
Я создал скрипт Ruby, чтобы получить эти учетные данные в
CloudFront-Policy
CloudFront-Signature
CloudFront-Key-Pair-Id
Если затем я попытаюсь получить доступ к файлу, используя cookie или URL
zxxxx.cloudfront.net/ls/600/10/playlist.m3u8?Policy=amp;Signature=amp;Key-Pair-Id
Я могу загрузить файл, это означает, что все снова работает нормально.
Проблема в том, что когда я пытаюсь получить доступ к файлу через мое приложение rails, я получаю сообщение: заблокирован политикой CORS
Я прочитал и обнаружил, что запрос должен быть из того же домена, чтобы иметь возможность отправлять cookie
Затем я добавил CNAME в свой дистрибутив cloudfront под названием cloud.example.com
И локально я создал запись в файле хоста под названием dev.example.com , порт 80
Снова попытался воспроизвести файл, и я все еще получаю ту же ошибку:
'http://cloud.example/hls/600/10/playlist.m3u8' from origin 'http://dev.example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
CORS в корзине — это
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
<AllowedHeader>Range</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Кто-нибудь может мне помочь?
Комментарии:
1. Вы включили метод параметров в cloudfront
2.
Allowed HTTP Methods
Опция в разделе «Поведение» cloudfront — это то, о чем я говорю.3. Да, выбран параметр GET, HEAD, ПАРАМЕТРЫ, и в кэшированных методах HTTP я также установил флажок ПАРАМЕТРЫ
4. Я думаю, что проблема не в Cloudfront, я просто сделал запрос через Postman, установив файлы cookie, и я получаю файл. Я включил журналы Cloudfront и вижу файлы cookie в файле журнала. Но если сделать запрос через приложение rails, я не вижу файлов cookie в файле и получаю 403.
5. Фернандо, ты когда-нибудь это понимал?? Вы прекрасно описали мою ситуацию, и я здесь кручу свои колеса.