# Cloudflare R2:バケット、CORS、配信 R2 バケットを作成し、アップロードと再生用の CORS を設定します。独自ドメインまたはテスト用の r2.dev URL を接続し、DRM-X 6.0 からのアップロードを確認します。 暗号化された動画と DRM ライセンスは別の経路で配信されます CDN は暗号化された動画を配信します。バックエンドが視聴権限を確認し、DRM ライセンスサービスが対応デバイスでの復号を許可します。 - 01**ストレージ / CDN** 暗号化されたメディアをプレーヤーに配信します。 - 02**お客様のバックエンド** 視聴権限を確認し、DRM-X に再生の認可をリクエストします。 - 03**DRM-X** 再生の認可情報を検証し、DRM ライセンスリクエストを処理します。 - 04**プレーヤー + デバイス** デバイスの DRM システムを使ってライセンスを取得し、暗号化されたメディアを再生します。 バックエンドはアクセスを決定します。DRM-Xは署名されたポリシーを強制します。暗号化されたメディアとDRMのライセンスは、別の配送パスに従います。 **新しいバケットから作業用アップロードへ** R2 バケットを作成し、ブラウザ CORS を設定し、パブリック HTTPS 配信 URL を選択し、接続 DRM-X して、テスト オブジェクトをアップロードして取得します。オリジナルのビデオとプライベート ドキュメントは、この配信バケットの外に保管してください。暗号化されたメディアと意図された公開資産のみを公開してください。 公開配信では URL からオブジェクトのバイト列を取得できます。正しくパッケージ化されたメディアの復号は DRM が制御します。CORS はブラウザの互換性ルールであり、認可ではありません。実際の管理画面のスクリーンショットからは、アカウントのヘッダーや個人識別情報を除いてあります。メニュー名は変更される場合があります。 ## 1. R2 バケットを作成します[#](#create-bucket) - Cloudflare にサインインし、バケットを所有するアカウントを選択します。 - **Storage & databases→R2 Object Storage→Overview→Create bucket** を開きます。 - `customer-drm-media-example` などの一意のバケット名を入力します。適切な場所または管轄区域を選択します。このチュートリアルでは **Standard** ストレージを使用して、バケットを作成します。 - バケットの **Settings** を開き、バケット名、Cloudflare account ID、**General → S3 API** のエンドポイントを記録します。 デフォルトの管轄区域では、API エンドポイントは `https://.r2.cloudflarestorage.com` です。 Cloudflare に管轄区域固有のホスト名が表示される場合は、その正確なホスト名を使用します。 DRM-X にエンドポイントを入力する場合は、末尾の `/bucket-name` を削除します。バケット名には独自のフィールドがあります。この API エンドポイントはパブリック再生 URL ではありません。 ## 2. このバケットだけにアクセスできる認証情報を作成する[#](#create-credentials) - R2 Overview に戻り、**Manage API tokens** を開きます。 R2 アカウント トークンを選択するか、組織で必要な場合はユーザー トークンを選択します。 - **Create API token** を選択し、わかりやすい名前を付けて、**Object Read & Write** を選択します。 - **Apply to specific buckets only** を選択し、このバケットを選択します。ポリシーに従って有効期限を構成します。このチュートリアルでは、オプションの IP フィルタリングを未設定のままにしておきます。セキュリティ ポリシーで必要な場合は、DRM-X サーバー アクセスと顧客のブラウザ ネットワークからの直接アップロードの両方を検証します。 - トークンを作成し、DRM-X の **Access Key ID** と **Secret Access Key** を安全に記録します。 **S3 資格情報ペア** を使用します。別の Cloudflare Token value は、S3 Secret Access Key ではありません。 DRM-X にはアカウント全体の管理トークンは必要ありません。 Cloudflare では、CORS とドメインを自分で管理します。 ## 3. 公開配信用の URL を選ぶ[#](#public-delivery) ![R2 Settings: Custom Domains で追加するか、Public Development URL で有効化します。](https://docs.drm-x.com/assets/storage/r2-delivery.png)12**1 — 実稼働:** カスタム ドメインを追加します。 **2 — テスト:** 公開開発URL を有効にします。 ### オプション A: 実稼働用にドメインを接続する - 同じ Cloudflare アカウントで DNS セットアップが完了したドメインを所有します。 `media.example.com` などのサブドメインを選択します。 - バケットで **Settings → Custom Domains → Add** を開きます。サブドメインを入力し、DNS の変更内容を確認して、この R2 の手順で接続してください。 - ドメインと HTTPS 証明書がアクティブになるまで待ちます。あなたの配信元は`https://media.example.com`です。 r2.dev アドレスを指す CNAME を作成しないでください。 R2 の Custom Domains ワークフローを使用します。カスタム ドメインが接続されている場合、開発 URL は無効のままになることがあります。 ### オプション B: Cloudflare の URL をテスト用に有効にする - **Settings → Public Development URL → Enable** を開きます。 - パブリックアクセス通知を確認し、要求されたら「`allow`」と入力して確認します。 - Cloudflareで表示されている実際の`https://pub-….r2.dev`URLをコピーします。アカウント ID またはバケット名から構築しないでください。 r2.dev エンドポイントはレート制限があり、開発を目的としています。運用、キャッシュ、および Cloudflare セキュリティ機能にはカスタム ドメインを使用します。 ## 4. ブラウザからのアップロードと再生に必要な CORS を設定する[#](#configure-cors) ![R2 CORS Policy 編集、許可されたオリジン、メソッド、ヘッダーを含むパネル。](https://docs.drm-x.com/assets/storage/r2-cors.png)12**1:** 新しいバケットに Add CORS policy を選択するか、編集します。 **2:** 保存されたオリジン、メソッド、ヘッダーを確認します。このスクリーンショットは、Console のみの診断ルールを示しています。以下の 2 つのルールの完全な例をプレーヤー Web サイトに使用してください。 - **Settings → CORS Policy → Add CORS policy**(または **Edit**)を開きます。 - 以下のJSONをエディタに貼り付けます。 `https://www.example.com` を、プレーヤーが埋め込まれている Web サイトのオリジンに置き換えます。オリジンには HTTPS とホスト名が含まれますが、/watch などのページ パスは含まれません。 - バケットに既存のポリシーがある場合は、必要な他のルールを維持し、**Save** を選びます。 - 伝播する時間を待ってから、アップロードを再試行してください。カスタム ドメイン オブジェクトに古い CORS ヘッダーがキャッシュされている場合は、影響を受けるパスをパージして、再度テストします。 ``` [ { "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 } ] ``` 最初のルールは、DRM-X Console からの署名付き PUT アップロードを許可します。 2 つ目では、プレーヤーの Web サイトからの GET/HEAD とテスト ページの DRM-X が許可されます。 R2 カスタム ドメインはバケットの CORS ポリシーを使用します。 CORS は匿名アップロード アクセスを許可しません。 ### CORS および一致する URL フィールドを生成します このツールはブラウザで実行されます。公開元のみを入力してください。アクセスキーは要求されません。 プレーヤーを設置する Web サイトの Origin例を置き換えます。複数の HTTPS Originはスペースまたはカンマで区切ります。ページ パスを使用せずに、プレーヤーを埋め込んだ Web サイトを使用します。 DRM-X Console と Playback Lab は自動的に含まれます。公開配信の Origin接続されたカスタム ドメイン、有効な r2.dev URL または CloudFront のオリジンを入力してください。ここではフォルダーを省略します。保管フォルダ(オプション)構成の生成 CORS JSON をコピー ``` ``` Protected-content base path``Public URL prefix``オブジェクトキーの例``完全な URL の例`` ## 5. DRM-X 6.0にR2を接続します[#](#connect-drmx) [Cloud Storage → Connect storage](https://6.drm-x.com/console/cloud-storage) を開き、**Cloudflare R2** を選択します。 | フィールド | 入力内容 | | --- | --- | | Display name | Production R2 など、識別しやすい名前。 | | Bucket name | URL やフォルダーを除いた正確なバケット名。 | | Cloudflare account ID | このバケットを所有するアカウントの ID。 | | S3 API endpoint | デフォルトの管轄区域の場合は空白のままにするか、バケット パスなしでアカウント/管轄区域エンドポイントを入力します。 | | Protected-content base path | `protected`、またはバケットルートアップロードの場合は空白。 | | Public URL prefix | `https://media.example.com/protected` または有効な `https://pub-….r2.dev/protected` URL。 | | Access key ID / Secret access key | ステップ 2 の S3 資格情報ペア。 | 例では、`protected` というフォルダーを使用しています。バケット名は自動的にはフォルダーになりません。ここで使用されているドメインからバケットへの直接マッピングでは、パブリック URL プレフィックスに同じストレージ フォルダーを 1 回だけ含めます。 ``` 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 ``` バケット ルートを使用するには、ベース パスを空白のままにし、パブリック プレフィックスとして配信元のみを入力します。意図的にフォルダーとして使用する場合を除き、バケット名を追加しないでください。このマッピングでは、CloudFront Origin path を空のままにしておきます。 必要に応じて、**デフォルトとして使用CLIアップロード先**を選択します。 **Save and verify** を選択します。資格情報は保存時に暗号化され、保存後に返されません。検証が成功した場合でも、実際のアップロード テストに進みます。 ## 6. ファイルをアップロードし、動作することを確認します。[#](#test-upload) - [Cloud Storage](https://6.drm-x.com/console/cloud-storage) を開き、この宛先を選択して、**Verify location** を選択します。成功とは、DRM-X サーバーがバケットをリストできることを意味します。書き込み権限、ブラウザ CORS または公開配信は確立されません。 - **Upload encrypted files** を選択し、既存の DRM-X パッケージから小さな暗号化セグメントを 1 つ選択します。パッケージをお持ちでない場合は、以下の使い捨ての暗号化診断を使用してください。オリジナルのビデオや個人的な文書をアップロードしないでください。 - 成功メッセージを待ちます。 Cloud Storageにファイル名とサイズが表示されていることを確認します。プロバイダー コンソールの `protected/` で同じオブジェクトを見つけます。 - **Preview URL** をクリックし、同じオブジェクトをプライベート ブラウザ ウィンドウでテストします。 AWS または Cloudflare ログインせずにダウンロードするか、HTTP 200 を返す必要があります。実際のオブジェクトをテストします。オブジェクトの配信が機能している場合でも、ドメインのルートは 403/404 を返すことがあります。 - プレーヤーの Web サイトからクロスオリジン配信を確認します。ブラウザの [ネットワーク] パネルには、プレーヤー ページのオリジンと一致する `Access-Control-Allow-Origin` が表示されるはずです。アドレスバーからの直接ダウンロードでは、CORS はテストされません。以下の端末の例ではヘッダーもチェックします。 - 完了したら、使い捨ての診断オブジェクトのみを削除してください。次に、[デスクトップパッケージャーガイド](https://docs.drm-x.com/ja/packaging/desktop)に従い、Package contentでこの保存先を選択し、完全な暗号化パッケージをアップロードします。ファイルを手動でアップロードしても、Published Content ID は登録されません。 - 結果の Published ファイルを [Universal Playback Lab](https://multi-drm.drm-x.com/ja/player) と独自のプレーヤー Web サイトでテストします。ビデオ、オーディオ、シーク、および必要なデバイスを確認します。バイナリのダウンロードが成功しても、DRM の再生が証明されるわけではありません。 暗号化されたサンプルはありませんか? Windows に使い捨てテスト ファイルを作成します これを、管理する一時フォルダー内のWindows PowerShell で実行します。メモリ内にのみ保持される 1 回限りの AES キーを使用して、個人的なものではない短いメッセージを暗号化します。出力はストレージ診断であり、再生可能なメディアではありません。 DRM コンテンツ キーや顧客データは含まれません。 ``` $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 ``` `drmx-storage-check.encrypted.bin` をアップロードし、そのサイズと Preview URL を確認してから、バケットから削除します。 ``` curl.exe -I -H "Origin: https://www.example.com" "https://media.example.com/protected/sample.encrypted.bin" ``` 両方の URL を置き換えます。 HTTP 200 と、プレイヤーの Web サイトに一致する許可されたオリジンが期待されます。範囲配信の場合、`Range: bytes=0-15` を含む GET リクエストは HTTP 206 と有効な Content-Range ヘッダーを返す必要があります。メディアの保存 MIME タイプ: DASH マニフェストは application/dash+xml を使用し、HLS プレイリストは application/vnd.apple.mpegurl を使用し、メディア ファイルは適切なメディア タイプを使用する必要があります。 ## 7. 結果のトラブルシューティングを行う[#](#troubleshooting) | 結果 | アクション | | --- | --- | | Verify location は成功するが、ブラウザからのアップロードは失敗する | ブラウザ Console とネットワーク パネルを検査します。正確な Console Originからの PUT CORS と Content-Type を許可します。また、接続を確認し、新しい署名付き URL を再試行してください。 | | アップロードすると 403 が返されます | オブジェクトの書き込み権限、バケット/フォルダーのスコープ、エンドポイント、リージョン、リクエストの有効期限、クロックを確認してください。署名されたアップロード URL を共有しないでください。 | | アップロードは成功しました。パブリック URL は 403 を返します | パブリック配信が有効になっていて、ドメイン/ディストリビューションのデプロイが完了しているかどうかを確認してください。 | | パブリック URL は 404 を返します | 完全な URL を正確なオブジェクト キーと比較します。フォルダーの欠落または重複、およびファイル名の大文字と小文字を確認します。 | | URL は直接開きます。プレーヤーのフェッチが失敗する | プレーヤーページの Origin を GET/HEAD の CORS 設定に追加します。CDN の応答ヘッダーを確認し、該当パスに残る古いキャッシュ応答を無効化してください。 | | ダウンロードは成功しました。再生に失敗する | パッケージの公開、マニフェスト パス、MIME タイプ、および DRM ライセンス認証を確認してください。 [再生のトラブルシューティング](https://docs.drm-x.com/ja/troubleshooting/playback)を参照してください。 | ## 公式リファレンス[#](#references) - [R2バケット](https://developers.cloudflare.com/r2/buckets/create-buckets/)を作成します - [R2 資格情報と権限](https://developers.cloudflare.com/r2/api/tokens/) - [カスタム ドメインと r2.dev](https://developers.cloudflare.com/r2/buckets/public-buckets/) - [R2 CORS とキャッシュ動作](https://developers.cloudflare.com/r2/buckets/cors/) AWS を使用していますか? [Amazon S3 および CloudFront セットアップ](https://docs.drm-x.com/ja/storage/amazon-s3) に従ってください。