# Cloudflare R2: Bucket, CORS und Auslieferung Erstellen Sie einen R2-Bucket, konfigurieren Sie CORS für Uploads und Wiedergabe, verbinden Sie eine eigene Domain oder eine r2.dev-Test-URL und prüfen Sie einen Upload mit DRM-X 6.0. Verschlüsselte Videos und DRM-Lizenzen werden getrennt übertragen Das CDN liefert verschlüsselte Videos. Ihr Backend prüft den Zugriff; der DRM-Lizenzdienst autorisiert die Entschlüsselung auf einem kompatiblen Gerät. - 01**Speicher / CDN** Liefert verschlüsselte Medien an den Player. - 02**Ihr Backend** Prüft die Zugriffsberechtigung des Zuschauers und fordert bei DRM-X die Wiedergabeautorisierung an. - 03**DRM-X** Validiert die Wiedergabeautorisierung und verarbeitet die DRM-Lizenzanfrage. - 04**Player + Gerät** Verwendet das DRM-System des Geräts, um eine Lizenz zu erhalten und die verschlüsselten Medien abzuspielen. Ihr Backend entscheidet über den Zugriff; DRM-X erzwingt die unterschriebene Richtlinie. Verschlüsselte Medien und DRM Lizenzen folgen getrennten Lieferwegen. **Vom neuen Bucket zum erfolgreichen Upload** Erstellen Sie einen R2-Bucket, konfigurieren Sie Browser-CORS, wählen Sie eine öffentliche HTTPS-Auslieferungs-URL und verbinden Sie DRM-X. Laden Sie ein Testobjekt hoch und rufen Sie es ab. Bewahren Sie Originalvideos und private Dokumente außerhalb dieses Auslieferungs-Buckets auf. Veröffentlichen Sie nur verschlüsselte Medien und Dateien, die bewusst öffentlich sein sollen. Bei öffentlicher Auslieferung sind die Objektdaten per URL erreichbar; DRM kontrolliert die Entschlüsselung korrekt verpackter Medien. CORS regelt den Browserzugriff und ersetzt keine Autorisierung. Die echten Console-Screenshots enthalten weder Kontokopfzeilen noch persönliche Kennungen. Die Menübezeichnungen können sich ändern. ## 1. Erstellen Sie Ihren R2 Bucket[#](#create-bucket) - Melden Sie sich bei Cloudflare an und wählen Sie das Konto aus, dem der Bucket gehören soll. - Öffnen Sie **Storage & databases → R2 Object Storage → Overview → Create bucket**. - Geben Sie einen eindeutigen Bucket-Namen ein, z. B. `customer-drm-media-example`. Wählen Sie einen geeigneten Ort oder eine geeignete Gerichtsbarkeit aus. Verwenden Sie für diese exemplarische Vorgehensweise den Speicher **Standard** und erstellen Sie dann den Bucket. - Öffnen Sie im Bucket **Settings**. Notieren Sie den Bucket-Namen, die Cloudflare account ID und den Endpunkt unter **General → S3 API**. Für die Standardgerichtsbarkeit ist der API-Endpunkt `https://.r2.cloudflarestorage.com`. Wenn Cloudflare einen gebietsspezifischen Hostnamen anzeigt, verwenden Sie genau diesen Hostnamen. Entfernen Sie ein nachgestelltes `/bucket-name`, wenn Sie den Endpunkt in DRM-X eingeben. Der Bucket-Name hat ein eigenes Feld. Dieser API Endpunkt ist keine öffentliche Wiedergabe URL. ## 2. Zugangsdaten erstellen und auf diesen Bucket beschränken[#](#create-credentials) - Kehren Sie zu R2 Overview zurück und öffnen Sie **Manage API tokens**. Wählen Sie ein R2-Konto-Token oder ein Benutzer-Token, falls dies für Ihre Organisation erforderlich ist. - Wählen Sie **Create API token**, geben Sie ihm einen erkennbaren Namen und wählen Sie **Object Read & Write**. - Wählen Sie **Apply to specific buckets only** und wählen Sie diesen Bucket aus. Konfigurieren Sie den Ablauf entsprechend Ihrer Richtlinie. Lassen Sie für diese exemplarische Vorgehensweise die optionale Filterung IP deaktiviert. Wenn Ihre Sicherheitsrichtlinie dies erfordert, validieren Sie sowohl den DRM-X-Serverzugriff als auch direkte Uploads aus Kunden-Browsernetzwerken. - Erstellen Sie das Token und zeichnen Sie die **Access Key ID** und **Secret Access Key** für DRM-X sicher auf. **Verwenden Sie das Anmeldeinformationspaar S3** Das separate Cloudflare Token value ist nicht das S3 Secret Access Key. DRM-X benötigt kein kontoweites Verwaltungstoken. Verwalten Sie CORS und Domains selbst in Cloudflare. ## 3. Eine öffentliche Auslieferungs-URL wählen[#](#public-delivery) ![R2 Settings: Unter Custom Domains hinzufügen oder unter Public Development URL aktivieren.](https://docs.drm-x.com/assets/storage/r2-delivery.png)12**1 – Produktion:** Fügen Sie eine benutzerdefinierte Domäne hinzu. **2 – Testen:** Aktivieren Sie die öffentliche Entwicklung URL. ### Option A: Verbinden Sie Ihre Domäne für die Produktion - Eine Domain mit abgeschlossener DNS-Einrichtung im selben Cloudflare-Konto haben. Wählen Sie eine Subdomain wie `media.example.com`. - Öffnen Sie im Bucket **Settings → Custom Domains → Hinzufügen**. Geben Sie die Subdomain ein, überprüfen Sie die DNS-Änderung und verbinden Sie sie mit diesem R2-Workflow. - Warten Sie, bis die Domäne und das HTTPS-Zertifikat aktiv werden. Ihr Lieferursprung ist `https://media.example.com`. Erstellen Sie kein CNAME, das auf eine r2.dev-Adresse zeigt. Verwenden Sie den Custom Domains-Workflow von R2. Die Entwicklung URL kann deaktiviert bleiben, wenn eine benutzerdefinierte Domäne verbunden ist. ### Option B: Cloudflares URL zum Testen aktivieren - Öffnen Sie **Settings → Public Development URL → Aktivieren**. - Überprüfen Sie den Hinweis zur öffentlichen Zugänglichkeit, geben Sie bei Aufforderung `allow` ein und bestätigen Sie. - Kopieren Sie die tatsächliche `https://pub-….r2.dev` URL, die von Cloudflare angezeigt wird. Erstellen Sie es nicht aus Ihrem Konto ID oder Ihrem Bucket-Namen. Der r2.dev-Endpunkt ist ratenbegrenzt und für die Entwicklung vorgesehen. Verwenden Sie eine benutzerdefinierte Domäne für Produktions-, Caching- und Cloudflare Sicherheitsfunktionen. ## 4. CORS für Uploads und Wiedergabe im Browser konfigurieren[#](#configure-cors) ![R2 CORS Policy Panel mit Bearbeiten, erlaubten Ursprüngen, Methoden und Headern.](https://docs.drm-x.com/assets/storage/r2-cors.png)12**1:** Wählen Sie Add CORS policy für einen neuen Bucket oder Bearbeiten. **2:** Bestätigen Sie den gespeicherten Ursprung, die Methoden und die Header. Dieser Screenshot zeigt eine Nur-Console-Diagnoseregel; Verwenden Sie das vollständige Beispiel mit zwei Regeln unten für Ihre Player-Websites. - Öffnen Sie **Settings → CORS Policy → Add CORS policy** (oder **Bearbeiten**). - Fügen Sie das JSON unten in den Editor ein. Ersetzen Sie `https://www.example.com` durch den Ursprung der Website, auf der Ihr Player eingebettet ist. Ein Ursprung umfasst HTTPS und den Hostnamen, aber keinen Seitenpfad wie /watch. - Behalten Sie andere erforderliche Regeln bei, wenn der Bucket bereits über eine Richtlinie verfügt, und wählen Sie dann **Speichern** aus. - Warten Sie etwas Zeit für die Weitergabe und wiederholen Sie dann den Upload. Wenn in benutzerdefinierten Domänenobjekten alte CORS-Header zwischengespeichert sind, löschen Sie die betroffenen Pfade und testen Sie erneut. ``` [ { "AllowedOrigins": [ "https://6.drm-x.com" ], "AllowedMethods": [ "PUT" ], "AllowedHeaders": [ "Content-Type", "x-amz-meta-drmx-sha256" ], "ExposeHeaders": [ "ETag" ], "MaxAgeSeconds": 3600 }, { "AllowedOrigins": [ "https://6.drm-x.com", "https://multi-drm.drm-x.com", "https://www.example.com" ], "AllowedMethods": [ "GET", "HEAD" ], "AllowedHeaders": [ "Range" ], "ExposeHeaders": [ "ETag", "Content-Length", "Content-Range", "Accept-Ranges" ], "MaxAgeSeconds": 3600 } ] ``` Die erste Regel erlaubt signierte PUT-Uploads von DRM-X Console. Die zweite ermöglicht GET/HEAD von Ihrer Player-Website und DRM-X Testseiten. R2 benutzerdefinierte Domänen verwenden die CORS-Richtlinie des Buckets. CORS gewährt keinen anonymen Upload-Zugriff. ### Generieren Sie Ihre CORS- und passenden URL-Felder Dieses Tool läuft in Ihrem Browser. Geben Sie nur öffentliche Ursprünge ein. Es werden keine Zugangsschlüssel abgefragt. Origins der Player-WebsitesErsetzen Sie das Beispiel. Trennen Sie mehrere HTTPS-Ursprünge durch Leerzeichen oder Kommas. Nutzen Sie die Website, in die Sie Ihren Player einbetten, ohne einen Seitenpfad. DRM-X Console und Playback Lab werden automatisch berücksichtigt.Öffentlicher Auslieferungs-OriginGeben Sie Ihre verbundene eigene Domain, aktivierte r2.dev-URL oder den CloudFront-Origin ohne Ordnerpfad ein.Speicherordner (optional)Konfiguration generieren Kopieren CORS JSON ``` ``` Protected-content base path``Public URL prefix``Beispielobjektschlüssel``Beispiel einer vollständigen URL`` ## 5. R2 in DRM-X 6.0 verbinden[#](#connect-drmx) Öffnen Sie [Cloud Storage → Connect storage](https://6.drm-x.com/console/cloud-storage) und wählen Sie **Cloudflare R2**. | Feld | Was einzugeben ist | | --- | --- | | Display name | Eine freundliche Bezeichnung, z. B. Produktion R2. | | Bucket name | Der genaue Bucket-Name, ohne URL oder Ordner. | | Cloudflare account ID | Der ID des Kontos, dem dieser Bucket gehört. | | S3 API endpoint | Lassen Sie das Feld für die Standard-Gerichtsbarkeit leer oder geben Sie den Konto-/Gerichtsbarkeitsendpunkt ohne den Bucket-Pfad ein. | | Protected-content base path | `protected` oder leer für Bucket-Root-Uploads. | | Public URL prefix | `https://media.example.com/protected` oder Ihr aktiviertes `https://pub-….r2.dev/protected` URL. | | Access key ID / Secret access key | Das Anmeldeinformationspaar S3 aus Schritt 2. | Die Beispiele verwenden einen Ordner namens `protected`. Der Bucket-Name ist nicht automatisch ein Ordner. Mit der hier verwendeten direkten Domänen-zu-Bucket-Zuordnung fügen Sie denselben Speicherordner genau einmal in das öffentliche Präfix URL ein. ``` Bucket: customer-drm-media-example Protected-content base path: protected Public URL prefix: https://media.example.com/protected File selected for upload: sample.encrypted.bin Object key in the bucket: protected/sample.encrypted.bin Preview URL: https://media.example.com/protected/sample.encrypted.bin ``` Um den Bucket-Stamm zu verwenden, lassen Sie den Basispfad leer und geben Sie nur den Lieferursprung als öffentliches Präfix ein. Hängen Sie keinen Bucket-Namen an, es sei denn, Sie verwenden ihn absichtlich als Ordner. Lassen Sie CloudFront Origin path für diese Zuordnung leer. Wählen Sie bei Bedarf **Als Standard verwenden CLI Upload-Ziel**. Wählen Sie **Save and verify**. Anmeldeinformationen werden im Ruhezustand verschlüsselt und nach dem Speichern nicht zurückgegeben. Fahren Sie mit dem eigentlichen Upload-Test fort, auch wenn die Überprüfung erfolgreich ist. ## 6. Laden Sie eine Datei hoch und überprüfen Sie, ob sie funktioniert[#](#test-upload) - Öffnen Sie [Cloud Storage](https://6.drm-x.com/console/cloud-storage), wählen Sie dieses Ziel und anschließend **Verify location**. Ein Erfolg bestätigt nur, dass der DRM-X-Server den Bucket auflisten kann. Schreibrechte, Browser-CORS und öffentliche Auslieferung werden damit nicht bestätigt. - Wählen Sie **Upload encrypted files** und wählen Sie ein kleines verschlüsseltes Segment aus einem vorhandenen DRM-X-Paket. Wenn Sie kein Paket haben, verwenden Sie die unten stehende verschlüsselte Einwegdiagnose. Laden Sie kein Originalvideo oder persönliches Dokument hoch. - Warten Sie auf die Erfolgsmeldung. Überprüfen Sie, ob der Dateiname und die Größe in Cloud Storage angezeigt werden. Finden Sie dasselbe Objekt unter `protected/` in Ihrer Provider-Konsole. - Klicken Sie auf **Preview URL** und testen Sie dasselbe Objekt in einem privaten Browserfenster. Es sollte HTTP 200 herunterladen oder zurückgeben, ohne dass ein AWS- oder Cloudflare-Login erforderlich ist. Testen Sie ein tatsächliches Objekt: Der Stamm einer Domäne kann 403/404 zurückgeben, selbst wenn die Objektzustellung funktioniert. - Überprüfen Sie die Cross-Origin-Zustellung auf Ihrer Player-Website. Im Netzwerkfenster des Browsers sollte `Access-Control-Allow-Origin` entsprechend dem Ursprung der Player-Seite angezeigt werden. Ein direkter Download der Adressleiste testet CORS nicht. Das folgende Terminalbeispiel überprüft auch die Header. - Entfernen Sie anschließend nur Ihr Einweg-Diagnoseobjekt. Folgen Sie dann der [Desktop Packager-Anleitung](https://docs.drm-x.com/de/packaging/desktop), wählen Sie dieses Speicherziel in Package content aus und laden Sie das vollständige verschlüsselte Paket hoch. Beim manuellen Hochladen einer Datei wird kein Published Content ID registriert. - Testen Sie die resultierende Published-Datei in [Universal Playback Lab](https://multi-drm.drm-x.com/de/player) und Ihrer eigenen Player-Website. Überprüfen Sie Video, Audio, Suche und Ihre erforderlichen Geräte. Ein erfolgreicher Binär-Download ist kein Beweis für die DRM-Wiedergabe. Kein verschlüsseltes Beispiel? Erstellen Sie am Windows eine Einweg-Testdatei Führen Sie dies in Windows PowerShell in einem temporären Ordner aus, den Sie kontrollieren. Es verschlüsselt eine kurze, nicht persönliche Nachricht mit einem einmaligen AES-Schlüssel, der nur im Speicher gespeichert wird. Die Ausgabe ist eine Speicherdiagnose, kein abspielbares Medium; es enthält keinen DRM Inhaltsschlüssel oder Kundendaten. ``` $samplePath = Join-Path (Get-Location) 'drmx-storage-check.encrypted.bin' if (Test-Path -LiteralPath $samplePath) { throw 'Choose a new folder; this test file already exists.' } $aes = [System.Security.Cryptography.Aes]::Create() try { $aes.GenerateKey() $aes.GenerateIV() $encryptor = $aes.CreateEncryptor() try { $bytes = [Text.Encoding]::UTF8.GetBytes('DRM-X disposable storage check') $encrypted = $encryptor.TransformFinalBlock($bytes, 0, $bytes.Length) [IO.File]::WriteAllBytes($samplePath, $encrypted) } finally { $encryptor.Dispose() } } finally { $aes.Dispose() } Get-Item -LiteralPath $samplePath | Select-Object Name, Length ``` Laden Sie `drmx-storage-check.encrypted.bin` hoch, überprüfen Sie seine Größe und Preview URL und entfernen Sie es dann aus dem Bucket. ``` curl.exe -I -H "Origin: https://www.example.com" "https://media.example.com/protected/sample.encrypted.bin" ``` Ersetzen Sie beide URLs. Erwarten Sie HTTP 200 und einen zulässigen Ursprung, der Ihrer Player-Website entspricht. Für die Bereichszustellung sollte eine GET-Anfrage mit `Range: bytes=0-15` HTTP 206 und einen gültigen Content-Range-Header zurückgeben. Medientypen MIME beibehalten: DASH Manifeste verwenden application/dash+xml, HLS Wiedergabelisten verwenden application/vnd.apple.mpegurl und Mediendateien müssen ihren entsprechenden Medientyp verwenden. ## 7. Beheben Sie Fehler bei Ihrem Ergebnis[#](#troubleshooting) | Result | Aktion | | --- | --- | | Verify location ist erfolgreich, aber der Upload schlägt fehl | Überprüfen Sie den Browser Console und die Netzwerkfenster. Erlauben Sie PUT CORS vom genauen Console-Ursprung und Content-Type. Überprüfen Sie außerdem die Konnektivität und versuchen Sie es erneut, um ein neues vorsigniertes URL zu erhalten. | | Upload gibt 403 zurück | Überprüfen Sie die Objektschreibberechtigung, den Bucket-/Ordnerbereich, den Endpunkt, die Region, den Anforderungsablauf und die Uhr. Geben Sie keine signierten Upload-URLs weiter. | | Upload erfolgreich; public URL gibt 403 zurück | Überprüfen Sie, ob die öffentliche Bereitstellung aktiviert ist und die Bereitstellung der Domäne/Distribution abgeschlossen ist. | | Öffentlich URL gibt 404 zurück | Vergleichen Sie den vollständigen URL mit dem genauen Objektschlüssel. Überprüfen Sie fehlende oder doppelte Ordner und die Groß-/Kleinschreibung von Dateinamen. | | URL öffnet direkt; Der Abruf des Players schlägt fehl | Den Ursprung der Player-Seite zu GET/HEAD CORS hinzufügen. Überprüfen Sie die Antwortheader CDN und machen Sie betroffene veraltete zwischengespeicherte Antworten ungültig. | | Download erfolgreich; Die Wiedergabe schlägt fehl | Überprüfen Sie die Paketveröffentlichung, Manifestpfade, MIME-Typen und DRM-Lizenzautorisierung. Siehe [Fehlerbehebung bei der Wiedergabe](https://docs.drm-x.com/de/troubleshooting/playback). | ## Offizielle Referenzen[#](#references) - [Erstellen Sie einen R2 Bucket](https://developers.cloudflare.com/r2/buckets/create-buckets/) - [R2 Anmeldeinformationen und Berechtigungen](https://developers.cloudflare.com/r2/api/tokens/) - [Benutzerdefinierte Domänen und r2.dev](https://developers.cloudflare.com/r2/buckets/public-buckets/) - [R2 CORS und Cache-Verhalten](https://developers.cloudflare.com/r2/buckets/cors/) AWS verwenden? Folgen Sie [Amazon S3 und CloudFront Setup](https://docs.drm-x.com/de/storage/amazon-s3).