Как безопасно обслуживать потоки HLS из S3 (авторизовано и аутентифицировано)
Проблема:
Я храню количествоHLS потоки вS3 с заданной файловой структурой:
Video1
├──hls3
├──hlsv3-master.m3u8
├──media-1
├──media-2
├──media-3
├──media-4
├──media-5
├──hls4
├──hlsv4-master.m3u8
├──media-1
├──media-2
├──media-3
├──media-4
├──media-5
В моем пользователеAPI Я знаю, какой именно пользователь имеет доступ к какому-либо видеоконтенту, но я также должен убедиться, что ссылки на видео не доступны для общего доступа и доступны только пользователям с соответствующими правами.
Решения:
1) Используйте подписанный / временныйS3 URL для частногоS3 содержание. Когда клиент хочет воспроизвести какое-то конкретное видео, он отправляет запрос на мойAPI, Если пользователь имеет права доступа,API генерирует подписанный URL и возвращает его обратно клиенту, который передает его игроку.
Проблема, которую я вижу здесь, состоит в том, что реальный видеоконтент хранится в десятках файлов сегментов всредства массовой информации-* каталоги, и я не вижу, как я могу защитить их все - нужно ли подписывать каждый URL-адрес файла сегмента отдельно?
2)S3 содержание является частным. Запросы видео потоков, сделанные игроками, проходят через мойAPI или отдельнообратный прокси, Поэтому, когда клиент решает воспроизвести конкретное видео,API / обратный прокси получает запрос, выполняет аутентификацию и авторизацию и передает нужный контент (файлы и сегменты основного списка воспроизведения).
В этом случае мне еще нужно сделатьS3 контент частный и доступен только моимAPI / обратный прокси, Какой должен быть рекомендуемый путь здесь?S3 rest аутентификация через токены?
3) Используйте шифрование с защищенным ключом. В этом случае все сегменты видео зашифрованы и доступны для общественности. Ключ также хранится вS3 но не является общедоступным. Каждый запрос ключа, сделанный игроком, аутентифицирован и авторизован моимAPI / обратный прокси.
Это 3 решения, которые я сейчас имею в виду. Не убежден во всех из них. Я ищу что-то простое и безопасное. Любые рекомендации / предложения?
Используемая технология:
FFmpeg для кодирования видео на разные битрейты
bento4 для сегментации видео