Wie werden HLS-Streams von S3 auf sichere Weise bereitgestellt (autorisiert und authentifiziert)?

Problem

Ich speichere die Nummer von HLS Streams in S3 mit gegebener Dateistruktur:

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

In meinem Benutzer API Ich weiß genau, welcher Benutzer Zugriff auf welchen Videoinhalt hat, muss aber auch sicherstellen, dass Videolinks nicht freigegeben werden können und nur für Benutzer mit den richtigen Berechtigungen zugänglich sind.

Lösungen:

1) Benutze signed / temp S3 URLs für private S3 content. Wann immer der Kunde ein bestimmtes Video abspielen möchte, sendet er eine Anfrage an mein API. Wenn der Benutzer die richtigen Berechtigungen hat, wird das API generiert eine signierte URL und gibt sie an den Client zurück, der sie an den Spieler weiterleitet.

Das Problem, das ich hier sehe, ist, dass echter Videoinhalt in Dutzenden von Segmentdateien in @ gespeichert isMedien- -Verzeichnisse und ich verstehe nicht wirklich, wie ich sie alle schützen kann - müsste ich jede Segmentdatei-URL separat signieren?

2) S3 content ist privat. Video-Stream-Anfragen von Spielern werden über mein @ gesende API oder getrennt reverse-proxy. Also, wenn der Kunde sich entscheidet, ein bestimmtes Video abzuspielen, API / reverse-proxy erhält die Anforderung, führt die Authentifizierung und Autorisierung durch und gibt den richtigen Inhalt weiter (Master-Playlist-Dateien und -Segmente).

In diesem Fall muss ich noch @ mach S3 content privat und nur für meine @ zugängli API / reverse-proxy. Was sollte hier der empfohlene Weg sein? S3 Restauthentifizierung über Token?

3) Verschlüsselung mit geschütztem Schlüssel verwenden. In diesem Fall sind alle Videosegmente verschlüsselt und öffentlich verfügbar. Der Schlüssel ist auch in @ gespeiche S3 ist aber nicht öffentlich verfügbar. Jede Schlüsselanfrage des Spielers wird von my @ authentifiziert und autorisier API / reverse-proxy.

Dies sind 3 Lösungen, die ich gerade im Kopf habe. Nicht bei allen überzeugt. Ich suche etwas einfaches und kugelsicheres. Irgendwelche Empfehlungen / Vorschläge?

Verwendete Technologie:

ffmpeg für die Videokodierung mit verschiedenen Bitraten

bento4 für die Videosegmentierung

Antworten auf die Frage(2)

Ihre Antwort auf die Frage