Как мне сделать мои видеоролики S3 доступными для просмотра только на определенном веб-сайте?

#amazon-web-services #amazon-s3 #protected

#amazon-web-services #amazon-s3 #защищено

Вопрос:

ОБНОВЛЕНИЕ: добавлена политика CORS (ниже), но она по-прежнему не работает. Пожалуйста, кто-нибудь, помогите мне найти проблему.

Я боролся с этим в течение нескольких часов. У меня есть ведро под названием test-pcrp. Я хочу, чтобы видео в этом сегменте были доступны для просмотра только на моем веб-сайте. Ниже приведены настройки корзины, политика корзины и CORS, которые у меня есть. Однако, независимо от того, что я делаю, видео недоступно для просмотра на сайте.

Настройки корзины:
ОТКЛЮЧИТЬ блокировку всего общедоступного доступа
ВКЛЮЧИТЬ блокировку общедоступного доступа к сегментам и объектам, предоставленным через новые списки управления доступом (ACL)
Заблокировать общедоступный доступ к сегментам и объектам, предоставленным через любые списки управления доступом (ACL)
ОТКЛЮЧИТЬ блокировку общедоступного доступа к сегментам и объектам, предоставленным через новые политики общедоступных сегментов или точек доступаОТКЛЮЧИТЕ
публичный и межаккаунтный доступ к корзинам и объектам с помощью любых политик общедоступных корзин или точек доступа

Политика:

 {
    "Version": "2012-10-17",
    "Id": "http referer policy example",
    "Statement": [
        {
            "Sid": "Allow get requests originating from www.dev.pcrprograms.org and dev.pcrprograms.org.",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::test-pcrp/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "https://dev.pcrprograms.org/*",
                        "http://dev.pcrprograms.org/*"
                    ]
                }
            }
        }
    ]
}
 

Политика CORS

 [
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"HEAD"
],
"AllowedOrigins": [
"https://dev.pcrprograms.org"
],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]
 

Комментарии:

1. К вашему сведению, ваше условие ссылки включает dev.pcrprograms.org , но не www.dev.pcrprograms.org включает. С помощью чего вы проводите тестирование?

2. Домен на реальном сайте не включает www, поэтому это домен, на котором я тестирую.

3. Пожалуйста, поясните, что вы подразумеваете под «не работает». Что отображается в окне консоли разработчика в веб-браузере? Какое поведение отображается в сетевом окне веб-браузера?

Ответ №1:

Вероятно, ваша политика не работает, поскольку объекты в Amazon S3 по умолчанию являются частными. Добавление Deny политики не предоставляет доступ — оно просто еще больше ограничивает доступ.

Однако использование referer для управления доступом ненадежно. Подделка ссылок довольно проста, и на нее не следует полагаться как на средство безопасности.

Предпочтительный вариант — заставить серверную часть генерировать предварительно подписанные URL-адреса Amazon S3, которые являются ограниченными по времени URL-адресами, предоставляющими временный доступ к частным объектам, хранящимся в Amazon S3.

Комментарии:

1. Я не беспокоюсь о подделке ссылок, поскольку это будет происходить в зоне членства, пользователи которой не имеют серьезных технических навыков. По этой же причине я не могу использовать URL-адреса с ограниченным временем. Эти видеоролики будут доступны на сайте участника в обозримом будущем. Я обновил свою политику корзины, но я по-прежнему не могу просматривать свои видео на своем веб-сайте. Есть предложения о том, что мне нужно изменить, чтобы это работало?

2. Предварительно подписанные URL-адреса генерируются вашей серверной системой и не требуют навыков пользователя. По сути, это способ сказать: «Хорошо, вы авторизованы для доступа к этому файлу, вот ссылка». Я вижу, что вы используете WordPress, так что это можно сделать с помощью PHP. См.: предварительный URL-адрес для объекта AWS S3 с помощью PHP

3. Я бы предложил отладку следующим образом: сначала удалите referer условие в политике корзины. Это должно сделать объекты в корзине доступными. Затем верните условие и выясните, что может привести к сбою. Проверьте все сообщения об ошибках в выводе консоли вашего браузера.

4. Хорошо, указанный URL-адрес НЕ работает для меня. Может кто-нибудь, пожалуйста, помогите мне разобраться в причине, по которой не работают вышеуказанные настройки и политика корзины? Единственная ошибка, которую показывает консоль, — «np равно нулю», и я не могу найти никакой информации об этом.

5. Вы протестировали код, который генерирует предварительно подписанный URL-адрес? Он должен возвращать URL-адрес, который вы можете ввести в браузер для извлечения объекта.