視聴者がストリーミング リソースにアクセスするときにデュアルトークン認証を適用するには、個別のルートを構成します。ルートは、Media CDN のリクエストと一致し、HTTP トラフィックを送信元に転送する構成です。Media CDN は、HTTP Live Streaming(HLS)リソースまたは Dynamic Adaptive Streaming over HTTP(DASH)リソースのルートをサポートしています。Media CDN のルートの詳細については、サービス ルートを構成するをご覧ください。
HLS ストリームの場合、Media CDN は Cookie と URL クエリ パラメータ(Cookie なし)によるデュアル トークン認証をサポートしています。DASH ストリームの場合、Media CDN は Cookie ベースのデュアル トークン認証のみをサポートします。
このページでは、デュアル トークン認証を使用してコンテンツを保護するために Media CDN ルートを構成する方法について説明します。
始める前に
手順は次のとおりです。
短期トークンの場合は、次のいずれかの署名アルゴリズムを選択します。
- Ed25519 署名
- 対称鍵ハッシュベースのメッセージ認証コード(HMAC)
対称 HMAC 署名アルゴリズムは、新しい長時間トークンを生成するように構成されたルートでのみ有効にできます。パフォーマンスとセキュリティを最適化するには Ed25519 署名を使用し、他の CDN との互換性が必要な場合にのみ対称鍵 HMAC を使用することをおすすめします。
必要なキーを
EdgeCacheKeyset
リソースに含めます。トークンは、
EdgeCacheKeyset
リソース内の鍵で署名または検証する必要があります。キーセットには、選択した署名アルゴリズムに適した鍵が含まれている必要があります。次の表に、各署名アルゴリズムと必要な鍵を示します。署名アルゴリズム 鍵セットに必要な鍵 Ed25519 公開鍵 HMAC-SHA1 共有検証鍵 HMAC-SHA256 共有検証鍵 ベスト プラクティスとして、短期トークン用と長期トークン用の 2 つの別々の鍵セットを作成します。
ただし、DASH と 動的 Media Presentation Description(MPD)ファイルを使用している場合は、長期トークンと短期トークンの両方に同じ鍵セットを使用する必要があります。
長期トークンの場合は、次のいずれかのトークン形式を選択します。
- Cookie
- URL クエリ パラメータ
短期トークンを設定する
使用する署名アルゴリズムに応じて、次のいずれかのオプションを使用して短時間のトークンを設定します。
Ed25519 署名
秘密鍵を生成します。
openssl genpkey -algorithm ed25519 -outform PEM -out SSL_KEY_NAME.private.key
SSL_KEY_NAME
は、鍵名に置き換えます。秘密鍵から公開鍵を生成します。
openssl pkey -outform DER -pubout -in SSL_KEY_NAME.private.key |\ tail -c +13 |\ python3 -c "import base64, sys; print(('%s' % base64.urlsafe_b64encode(sys.stdin.buffer.read()))[2:-1])"
1 つの公開鍵を持つ新しい Keyset を作成します。
コンソール
Google Cloud コンソールで、[Media CDN] ページに移動します。
[鍵セット] タブをクリックします。
[鍵セットを作成] をクリックします。
[名前] に、一意の鍵セット名を入力します。
省略可: [説明] に、鍵セットの説明を入力します。
省略可: [ラベルを追加] をクリックして、鍵セットの Key-Value ペアを 1 つ以上入力します。
[公開鍵を追加] をクリックして、次の操作を行います。
- [ID] に英数字の ID を入力します。
- [値を入力] を選択し、Ed25519 公開鍵の base64 でエンコードされた値を指定します。
[鍵セットを作成] をクリックします。
gcloud
gcloud edge-cache keysets create
コマンドを使用します。gcloud edge-cache keysets create SHORT_KEYSET_NAME \ --public-key='id=SSL_PUBLIC_KEY_NAME,value=SSL_PUBLIC_KEY_VALUE'
次のように置き換えます。
SHORT_KEYSET_NAME
: 一意の鍵セット名(例:prod-vod-keyset
)SSL_PUBLIC_KEY_NAME
: SSL 公開鍵の名前SSL_PUBLIC_KEY_VALUE
: SSL 公開鍵の値
鍵セットに関連付けられている鍵を確認するには、
gcloud edge-cache keysets describe
コマンドを使用します。gcloud edge-cache keysets describe prod-vod-keyset
出力は次のようになります。
name: prod-vod-keyset description: "Keyset for prod.example.com" publicKeys: - id: "key-20200918" value: "DThVLjhAKm3VYOvLBAwFZ5XbjVyF98Ias8NZU0WEM9w" - id: "key-20200808" value: "Lw7LDSaDUrbDdqpPA6JEmMF5BA5GPtd7sAjvsnh7uDA="
Terraform
対称鍵 HMAC
Secret Manager を初めて使用する場合は、Secret Manager を構成します。
バイナリ形式でシークレット バージョンを追加します。
Media CDN サービス アカウントに Secret Manager アクセス ロール(
roles/secretmanager.secretAccessor
)を付与します。コンソール
Google Cloud コンソールで、[Secret Manager] ページに移動します。
シークレットの名前の横にあるチェックボックスをオンにします。
[情報パネルを表示] をクリックします。
情報パネルで [プリンシパルを追加] をクリックします。
[新しいプリンシパル] に、次の形式で Media CDN サービス アカウントを入力します。
service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com
PROJECT_NUMBER
は、使用するプロジェクト番号に置き換えます。[ロールを選択] で [Secret Manager] を選択し、[Secret Manager のシークレット アクセサー] を選択します。
gcloud
gcloud secrets add-iam-policy-binding
コマンドを使用する。gcloud secrets add-iam-policy-binding projects/PROJECT_NUMBER/secrets/SECRET_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor"
次のように置き換えます。
PROJECT_NUMBER
: プロジェクトの番号SECRET_ID
: シークレットの ID
シークレット バージョンにアクセスし、バージョン番号を含むシークレット パスをコピーします。
検証共有鍵の共有シークレットを含む新しいキーセットを作成します。
コンソール
Google Cloud コンソールで、[Media CDN] ページに移動します。
[鍵セット] タブをクリックします。
[鍵セットを作成] をクリックします。
[名前] に、一意の鍵セット名を入力します。
省略可: [説明] に、鍵セットの説明を入力します。
省略可: [ラベルを追加] をクリックして、鍵セットの Key-Value ペアを 1 つ以上入力します。
検証共有鍵を指定するには、[検証共有鍵を追加] をクリックして、次の操作を行います。
[シークレット] で、リストからシークレットを選択し、リソース ID を指定して手動でシークレットを入力するか、新しいシークレットを作成して選択します。
[シークレットのバージョン] で、リストからシークレット バージョンを選択するか、新しいシークレット バージョンを作成して選択します。
[鍵セットを作成] をクリックします。
gcloud
gcloud edge-cache keysets create
コマンドを使用します。gcloud edge-cache keysets create SHORT_KEYSET_NAME \ --validation-shared-key='secret_version=projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/KEY_VERSION'
次のように置き換えます。
SHORT_KEYSET_NAME
: 鍵セットの一意の名前(例:prod-vod-keyset
)PROJECT_NUMBER
: プロジェクト IDSECRET_ID
: シークレットのリソース IDKEY_VERSION
: 使用するシークレット バージョン
有効期間の長いトークンを設定する
Google が管理する鍵は、キーセットによってスコープが決まります。つまり、2 つの異なるキーセットには異なる Google 管理キーが設定されます。Google が管理する鍵は定期的にローテーションされます。
次のいずれかのオプションを使用して、長時間のトークンを設定します。
コンソール
[鍵] セクションで、[デュアル トークン認証に Google が管理する鍵を使用する] を選択します。
gcloud と YAML
次のいずれかの方法を使用します。
Google が管理する署名鍵を作成します。
gcloud edge-cache keysets create LONG_KEYSET_NAME \ --public-key='id=google-managed-key,managed=true'
LONG_KEYSET_NAME
は、キー名に置き換えます(例:prod-vod-keyset-long
)。既存のキーセットを変更する:
鍵セットを YAML ファイルにエクスポートします。
gcloud edge-cache keysets export
コマンドを使用します。gcloud edge-cache keysets export LONG_KEYSET_NAME \ --destination=prod-vod-keyset-long.yaml
テキスト エディタまたは構成管理ツールで、鍵セットの構成を次のように編集します。
name: projects/my-project/locations/global/edgeCacheKeysets/LONG_KEYSET_NAME publicKeys: - id: some-key value: MC4CAQAwBQYDK2VwBCIEINV2iYugIWBuvGBJUQ_Ab69E4v4zcVqvgYHw-iZxGzcd - id: google-managed-key managed: true
編集したキーセットをインポートします。
gcloud edge-cache keysets import
コマンドを実行します。gcloud edge-cache keysets import LONG_KEYSET_NAME \ --source=prod-vod-keyset-long.yaml
長期トークン鍵セットには、追加の公開鍵を含めることができます。キーセットには最大 3 つの公開鍵を含めることができます。つまり、キーセットにはユーザーが管理する鍵を 2 つと Google が管理する鍵を 1 つ含めることができます。
Media CDN は、常に Google が管理する鍵を使用してトークンを生成します。 ユーザーが管理する鍵は検証にのみ使用できます。
追加の公開鍵を含めると、独自の秘密鍵で生成された署名付きリクエストを使用して、プレーヤー アプリケーションがメディア プレイリストとメディア セグメントにアクセスできるようになります。
トークン交換を構成する
このセクションでは、複数のルートを作成してトークン交換を構成する方法について説明します。 ルートを使用すると、コンテンツの種類、クライアント属性、更新頻度の要件に基づいて動作を最適化できます。次の例では、ルートを使用して、メディア リクエストの各部分のトークン交換を構成します。
短期トークンを要求するようにプライマリ マニフェスト ルートを構成する
プライマリ マニフェスト ルートで短期トークンを要求するように Media CDN を構成します。
Console
プライマリ マニフェスト ルートで短期トークン認証を有効にします。
Google Cloud コンソールで、[Media CDN] ページに移動します。
サービスの [詳細] ページを開くには、サービス名をクリックします。
編集モードに切り替えるには、[編集] ボタンをクリックします。
[ルーティング] セクションに移動するには、[次へ] をクリックします。
プライマリ マニフェスト ルートルールを追加するホストルールを開きます。
[ルートのルールを追加] をクリックします。
または、ルートルールを編集するには、それぞれの行で
[編集] をクリックします。[ルートルールを編集] ペインの [優先度] に、値(例:
1
)を設定します。[説明] に、ルールのリストでルールを識別できる簡単な説明を入力します。
[一致] セクションで、[一致条件を追加] をクリックします。次に、以下の操作を行います。
- [一致タイプ] で、[パス テンプレートの一致] を選択します。
- [パスの一致] では、HLS プライマリ再生リスト(M3U8)または DASH マニフェスト(MPD)ファイルの名前またはパス テンプレートを指定します。詳細については、パスマッチングをご覧ください。
[詳細構成] をクリックします。
[ルートのアクション] セクションで、[項目を追加] をクリックします。
[タイプ] で [CDN ポリシー] を選択します。
[署名付きリクエスト] セクションの [署名付きリクエスト モード] で、[トークンを要求] を選択します。
[署名付きリクエスト鍵セット] セクションで、次の操作を行います。
短期トークンの鍵セットを指定するには、[鍵セットを選択] をクリックして、短期トークン鍵セットを選択します。
または、必要な鍵を持つ新しい鍵セットを作成するには、[新しい鍵セットを作成] をクリックします。次にそれを選択します。
[署名アルゴリズム] で、[公開鍵を使用した Ed25519] を選択します。
[トークン クエリ パラメータ] は、デフォルト値の
edge-cache-token
のままにします。認証に Cookie ではなく HLS マニフェスト URL クエリ パラメータを使用する場合は、リクエスト トークンを保存するパラメータを指定します。
[Max time to live] で、受信リクエスト トークンの最大存続時間を秒単位で指定します。
[ルート アクション] セクションの変更を保存するには、[完了] をクリックします。
ルートルールの変更を保存するには、[保存] をクリックします。
gcloud と YAML
Media CDN 構成を YAML ファイルにエクスポートします。
gcloud edge-cache services export
コマンドを使用します。gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml
次のように置き換えます。
SERVICE_NAME
: サービスの名前FILENAME
: YAML ファイルの名前
プライマリ マニフェスト ルートルールで短期トークン認証を有効にするには、YAML ファイルのルートの
cdnPolicy
セクションでsignedTokensOptions
構成を指定します。pathMatchers: - name: "ROUTE_NAME" routeRules: - priority: 1 description: "ROUTE_DESCRIPTION" origin: "ORIGIN_NAME" matchRules: - pathTemplateMatch: "/MANIFEST_OR_PLAYLIST" routeAction: cdnPolicy: cacheMode: CACHE_ALL_STATIC signedRequestMode: REQUIRE_TOKENS signedRequestKeyset: SHORT_KEYSET_NAME signedRequestMaximumExpirationTtl: SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME signedTokenOptions: tokenQueryParameter: SHORT_TOKEN_NAME
次のように置き換えます。
ROUTE_NAME
: ルートルールの名前ROUTE_DESCRIPTION
: ルートルールの説明ORIGIN_NAME
: 送信元名MANIFEST_OR_PLAYLIST
: HLS プライマリ再生リスト(M3U8)または DASH マニフェスト(MPD)ファイルの名前。詳細については、パスマッチングをご覧ください。SHORT_KEYSET_NAME
: 短時間トークンに使用する鍵セット名SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME
: 署名付きリクエストの有効期限(例:600s
)。詳細については、signedRequestMaximumExpirationTtl
ご覧ください。- 省略可:
SHORT_TOKEN_NAME
: 短いトークンを検索するクエリ パラメータ。デフォルト値はedge-cache-token
です。詳細については、SignedTokenOptions
をご覧ください。
対称鍵 HMAC を使用する場合は、
signedTokenOptions
セクションで値をHMAC_SHA_256
としてallowedSignatureAlgorithms
を追加します。allowedSignatureAlgorithms: - HMAC_SHA_256
サービスを更新するには、YAML ファイルから Media CDN 構成をインポートします。
gcloud edge-cache services import
コマンドを使用します。gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
これで、シングル トークン認証を有効にするプロセスは完了です。
デュアルトークン認証を構成するには、次のセクションに進みます。
有効期間の長いトークンを生成するようにプライマリ マニフェスト ルート ルールを構成する
プライマリ マニフェスト ルートで長期トークンを生成するように Media CDN を構成します。これらのトークンを生成するには、Cookie または URL クエリ パラメータを選択します。
Console
Media CDN がルートで長期トークンを生成できるように、プライマリ マニフェスト ルートルールを変更します。
- [ルートルールを編集] ページで、[詳細構成] をクリックします。
- [タイプ] で [CDN ポリシー] を選択します。
- [デュアル トークン認証] を開きます。
- [署名アクション] で、[新しい長期トークンの生成] を選択します。
[署名の種類] で、次のいずれかのオプションを選択します。
- Cookie 経由(HLS と DASH ストリーミングの場合): プライマリ マニフェスト レスポンスで
Edge-Cache-Cookie
を返すように Media CDN を構成します。 - HLS マニフェスト URL クエリ パラメータ経由(Cookie なし): 各 URL に長期トークンを追加して、HLS プライマリ マニフェストを操作するように Media CDN を構成します。
- Cookie 経由(HLS と DASH ストリーミングの場合): プライマリ マニフェスト レスポンスで
[新しい長期トークンを生成する] セクションで、次の操作を行います。
長期トークンの鍵セットを指定するには、[鍵セットを選択] をクリックして、長期トークン鍵セットを選択します。
または、[新しい鍵セットを作成] をクリックして、必要な鍵を含む新しい鍵セットを作成します。次にそれを選択します。
[トークンの TTL] で、長時間トークンの最大存続時間を秒単位で指定します。
[署名タイプ] で、[Cookie 経由] オプションを選択した場合は、[コピーされたパラメータ] セクションで、Media CDN に短期トークンから長期トークンにコピーさせるパラメータを選択します。デュアル トークン認証を使用するには、
PathGlobs
(またはそのエイリアス、acl
またはpaths
のいずれか)またはURLPrefix
を選択する必要があります。[HLS マニフェスト URL クエリ パラメータ経由] オプションを選択した場合は、[トークン クエリ パラメータ] でデフォルト値
edge-cache-token
を保持します。
[ルート アクション] セクションの変更を保存するには、[完了] をクリックします。
ルートルールの変更を保存するには、[保存] をクリックします。
メディア再生リストとセグメントのルートを自動または手動で作成するかどうかを尋ねるメッセージが表示されます。自動オプションを選択すると、Cookie 署名用に 1 つの新しいルートと、Cookie を使用しない署名用に 2 つのルートが作成されます。手動オプションを選択した場合は、次のセクションに進みます。
gcloud と YAML
Media CDN がルートで長期トークンを生成できるように、プライマリ マニフェスト ルートルールの addSignatures
セクションを変更します。
Cookie
addSignatures:
actions:
- GENERATE_COOKIE
keyset: LONG_KEYSET_NAME
tokenTtl: TOKEN_EXPIRATION_TIME
copiedParameters:
- PathGlobs
- SessionID
次のように置き換えます。
LONG_KEYSET_NAME
: 長期トークン鍵セットの名前TOKEN_EXPIRATION_TIME
: 長期トークンの有効期限。たとえば、1 日の有効期限の場合は86400s
このコード例では、次の変更を実装しています。
addSignatures.actions: GENERATE_COOKIE
: プライマリ マニフェスト レスポンスでEdge-Cache-Cookie
を返すように Media CDN を構成します。copiedParameters.PathGlobs
: 短期トークンから長期トークンにPathGlobs
をコピーするように Media CDN を構成します。デュアル トークン認証を使用するには、copiedParameters.PathGlobs
またはcopiedParameters.URLPrefix
を使用する必要があります。詳細については、copiedParameters
をご覧ください。省略可:
copiedParameters.SessionID
: 短期トークンから長期トークンにSessionID
をコピーするように Media CDN を構成する
GENERATE_COOKIE
アクションが適用されると、Media CDN はプライマリ マニフェスト レスポンスとともに、次のような Set-Cookie
ヘッダーを返します。
Set-Cookie: Edge-Cache-Cookie=PathGlobs=PATHS~SessionID=SESSION_ID~Expires=EXPIRATION~_GO=Generated~Signature=SIGNATURE
URL クエリ パラメータ
addSignatures:
actions:
- GENERATE_TOKEN_HLS_COOKIELESS
keyset: LONG_KEYSET_NAME
tokenTtl: TOKEN_EXPIRATION_TIME
copiedParameters:
- PathGlobs
- SessionID
tokenQueryParameter: LONG_TOKEN_NAME
次のように置き換えます。
LONG_KEYSET_NAME
: 長期鍵セットの名前TOKEN_EXPIRATION_TIME
: 長期トークンの有効期限。たとえば、1 日の有効期限の場合は86400s
このコード例では、次の変更を実装しています。
addSignatures.actions: GENERATE_TOKEN_HLS_COOKIELESS
: 存在する各 URI に長期トークンを追加して、HLS プライマリ マニフェストを操作するように Media CDN を構成します。copiedParameters.PathGlobs
: 短期トークンから長期トークンにPathGlobs
をコピーするように Media CDN を構成します。デュアル トークン認証を使用するには、copiedParameters.PathGlobs
またはcopiedParameters.URLPrefix
のいずれかを使用する必要があります。詳細については、copiedParameters
をご覧ください。省略可:
copiedParameters.SessionID
: 短期トークンから長期トークンにSessionID
をコピーするように Media CDN を構成します。省略可:
LONG_TOKEN_NAME
: 生成された長期トークンを配置するクエリ パラメータ。デフォルト値はedge-cache-token
です。詳細については、tokenQueryParameter
をご覧ください。
次のマニフェスト ファイルは、適用される GENERATE_TOKEN_HLS_COOKIELESS
アクションを示しています。
#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000 http://example.com/HLS_PRIMARY_PLAYLIST.m3u8?LONG_TOKEN_NAME=PathGlobs=PATHS~SessionID=SESSION_ID~Expires=EXPIRATION~_GO=Generated~Signature=SIGNATURE
Media CDN は短期トークンを検証し、長期トークンを生成して LONG_TOKEN_NAME
クエリ パラメータに保存します。
長期トークンを要求するようにメディア再生リストとセグメント ルートを構成します。
長期トークンを要求するようにメディア再生リストとセグメント ルートを構成します。
Console
Cookie
メディアの再生リストとセグメント ルートのルートルールを作成します。
- [エッジキャッシュ サービスを編集] ページの [ルーティング] セクションで、プライマリ マニフェスト ルートを持つホストルールをクリックします。
- [ルートのルールを追加] をクリックします。
- [ルートルールを編集] ペインの [優先値] に、プライマリ マニフェスト ルートより大きい値(例:
2
)を設定します。 値が大きいほど優先度が低くなります。 - [説明] に、ルールのリストでルールを識別できる簡単な説明を入力します。
次のフィールドを推奨に従って設定します。
- 送信元を選択: プライマリ マニフェスト ルートルールと同じ
- 一致条件を追加: プライマリ マニフェスト ルートルールと同じ
- タイプ: CDN ポリシー
- 署名付きリクエスト モード: トークンを要求
- 鍵セットを選択: 長期トークンと同じ
- 署名アルゴリズム: プライマリ マニフェスト ルートルールと同じ
[デュアル トークン認証] を開きます。
[署名アクション] は、デフォルト値の [None] のままにします。
[完了] をクリックし、[保存] をクリックします。
URL クエリ パラメータ
メディア プレイリストのルートルールを作成します。
- [エッジキャッシュ サービスを編集] ページの [ルーティング] セクションで、プライマリ マニフェスト ルートを持つホストルールをクリックします。
- [ルートのルールを追加] をクリックします。
- [ルートルールを編集] ペインの [優先値] に、プライマリ マニフェスト ルートより大きい値(例:
2
)を設定します。値が大きいほど優先度が低くなります。 - [説明] に、ルールのリストでルールを識別できる簡単な説明を入力します。
次のフィールドを推奨に従って設定します。
- 送信元を選択: プライマリ マニフェスト ルートルールと同じ
- 一致条件を追加: プライマリ マニフェスト ルートルールと同じ
- タイプ: CDN ポリシー
- 署名付きリクエスト モード: トークンを要求
- 鍵セットを選択: 長期トークンと同じ
- 署名アルゴリズム: プライマリ マニフェスト ルートルールと同じ
- トークン クエリ パラメータ: 長期トークンと同じ
[デュアル トークン認証] を開きます。
[署名アクション] で [既存の長期トークンを伝播する] を選択します。
このオプションは、HLS マニフェスト URL クエリ パラメータ経由(Cookie なし)署名タイプを使用して長期トークンが生成されたことを Media CDN が確認した後にのみ有効になります。
[トークン クエリ パラメータ] は、デフォルト値の
edge-cache-token
のままにします。[完了] をクリックし、[保存] をクリックします。
メディア セグメントのルートルールを作成する。
このルートはメディア プレイリストのルートに似ていますが、次の点で大きく異なります。
- [優先度] には、メディア再生リストのルートルールよりも大きい値を設定します(例:
3
)。 - [説明] に、ルールのリストでルールを識別できる簡単な説明を入力します。
- [デュアルトークン認証] セクションの [署名アクション] は、デフォルト値の [なし] のままにします。
- [優先度] には、メディア再生リストのルートルールよりも大きい値を設定します(例:
gcloud と YAML
YAML ファイルを編集します。
Cookie
長期 Cookie を要求するようにメディア再生リストとセグメントを設定します。
- priority: 2
description: "SEGMENTS_ROUTE_DESCRIPTION"
origin: "ORIGIN_NAME"
matchRules:
- pathTemplateMatch: "/**.m3u8" # HLS media playlists
- pathTemplateMatch: "/**.ts" # HLS segments
- pathTemplateMatch: "/**.m4s" # DASH / CMAF segments
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: LONG_KEYSET_NAME
SEGMENTS_ROUTE_DESCRIPTION は、ルートの説明に置き換えます。
このコード例では、次の変更を実装しています。
priority: 2
: ルートの優先度。値が大きいほど優先度が低くなります。メディア プレイリストとメディア セグメントのルートは、.m3u8
で終わるファイル名と一致するため、ルートの優先度は、プライマリ マニフェスト用に以前に作成したルートよりも低くする必要があります。signedRequestMode: REQUIRE_TOKENS
: メディア再生リストとメディア セグメントにトークンを適用します。静的 Media Presentation Description(MPD)ファイルを使用している場合、長期と短期の鍵セットが異なる場合があります。動的 MPD ファイルを使用している場合は、長期と短期の鍵セットを同じにする必要があります。signedRequestKeyset: LONG_KEYSET_NAME
: Media CDN は、長期鍵セットを使用して、メディア再生リストとメディア セグメントのリクエストに対してユーザー エージェントが提供する長期 Cookie を検証します。
URL クエリ パラメータ
2 つのルート構成を追加します。
長期トークンを伝播するように HLS メディア マニフェスト ルートを構成します。
- priority: 2 description: "PLAYLIST_ROUTE_DESCRIPTION" origin: "ORIGIN_NAME" matchRules: - pathTemplateMatch: "/**.m3u8" # HLS media playlists routeAction: cdnPolicy: cacheMode: CACHE_ALL_STATIC signedRequestMode: REQUIRE_TOKENS signedRequestKeyset: LONG_KEYSET_NAME addSignatures: actions: - PROPAGATE_TOKEN_HLS_COOKIELESS
PLAYLIST_ROUTE_DESCRIPTION は、ルートの説明に置き換えます。
このコード例では、次の変更を実装しています。
priority: 2
: ルートの優先度。値が大きいほど優先度が低くなります。メディア再生リストのルートは、.m3u8
で終わるファイル名と一致するため、ルートはプライマリ マニフェスト用に作成したルートよりも優先度を低くする必要があります。signedRequestMode: REQUIRE_TOKENS
: メディア再生リストとメディア セグメントにトークンを適用します。静的 Media Presentation Description(MPD)ファイルを使用している場合、長期と短期の鍵セットが異なる場合があります。動的 MPD ファイルを使用している場合は、長期と短期の鍵セットを同じにする必要があります。signedRequestKeyset: LONG_KEYSET_NAME
: Media CDN は、長期鍵セットを使用して、メディア再生リストとメディア セグメントのリクエストに対してユーザー エージェントが提供する長期 Cookie を検証します。addSignatures.actions: PROPAGATE_TOKEN_HLS_COOKIELESS
: 長期トークンをメディア再生リストのメディア セグメント URI にコピーするように Media CDN を構成します。
長期トークンを要求するようにセグメント ルートを構成します。
- priority: 3 description: "SEGMENTS_ROUTE_DESCRIPTION" origin: "ORIGIN_NAME" matchRules: - pathTemplateMatch: "/**.ts" # HLS segments routeAction: cdnPolicy: cacheMode: CACHE_ALL_STATIC signedRequestMode: REQUIRE_TOKENS signedRequestKeyset: LONG_KEYSET_NAME
SEGMENTS_ROUTE_DESCRIPTION は、ルートの説明に置き換えます。
このコード例では、次の変更を実装しています。
priority: 3
: ルートの優先度。値が大きいほど優先度が低くなります。このルートの優先度は、メディア プレイリスト用に以前に作成したルートよりも低くする必要があります。signedRequestMode: REQUIRE_TOKENS
: メディア再生リストとメディア セグメントにトークンを適用します。signedRequestKeyset: LONG_KEYSET_NAME
: Media CDN は、長期鍵セットを使用して、メディア再生リストとメディア セグメントのリクエストに対してユーザー エージェントが提供する長期署名付きトークンを検証します。
例: 構成ファイル
次のコードサンプルは、完成した構成ファイルを示しています。
Cookie
name: SERVICE_NAME
routing:
hostRules:
- hosts:
- DOMAIN_NAME
pathMatcher: routes
pathMatchers:
- name: "ROUTE_NAME"
routeRules:
- priority: 1
description: "ROUTE_DESCRIPTION"
origin: "ORIGIN_NAME"
matchRules:
- pathTemplateMatch: "/HLS_MASTER_PLAYLIST.m3u8" # HLS primary playlists
- pathTemplateMatch: "/DASH_MANIFESTS.mpd" # DASH manifests
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: SHORT_KEYSET_NAME
signedRequestMaximumExpirationTtl: SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME
addSignatures:
actions:
- GENERATE_COOKIE
keyset: LONG_KEYSET_NAME
tokenTtl: TOKEN_EXPIRATION_TIME
copiedParameters:
- PathGlobs
- SessionID
- priority: 2
description: "SEGMENTS_ROUTE_DESCRIPTION"
origin: "ORIGN_NAME"
matchRules:
- pathTemplateMatch: "/**.m3u8" # HLS media playlists
- pathTemplateMatch: "/**.ts" # HLS segments
- pathTemplateMatch: "/**.m4s" # DASH / CMAF segments
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: LONG_KEYSET_NAME
URL クエリ パラメータ
name: SERVICE_NAME
routing:
hostRules:
- hosts:
- DOMAIN_NAME
pathMatcher: routes
pathMatchers:
- name: "ROUTE_NAME"
routeRules:
- priority: 1
description: "ROUTE_DESCRIPTION"
origin: "ORIGIN_NAME"
matchRules:
- pathTemplateMatch: "/HLS_PRIMARY_PLAYLIST.m3u8" # HLS primary playlists
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: SHORT_KEYSET_NAME
signedRequestMaximumExpirationTtl: SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME
signedTokenOptions:
tokenQueryParameter: SHORT_TOKEN_NAME
addSignatures:
actions:
- GENERATE_TOKEN_HLS_COOKIELESS
keyset: LONG_KEYSET_NAME
tokenTtl: TOKEN_EXPIRATION_TIME
tokenQueryParameter: LONG_TOKEN_NAME
copiedParameters:
- PathGlobs
- SessionID
- priority: 2
description: "PLAYLIST_ROUTE_DESCRIPTION"
origin: "ORIGIN_NAME"
matchRules:
- pathTemplateMatch: "/**.m3u8" # HLS media playlists
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: LONG_KEYSET_NAME
addSignatures:
actions:
- PROPAGATE_TOKEN_HLS_COOKIELESS
- priority: 3
description: "SEGMENTS_ROUTE_DESCRIPTION"
origin: "ORIGIN_NAME"
matchRules:
- pathTemplateMatch: "/**.ts" # HLS segments
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: LONG_KEYSET_NAME
アプリケーション サーバーで有効期間の短いトークンを生成する
トークンの生成については、トークンを生成するをご覧ください。
多層防御のコンテンツ保護を適用する
ベストプラクティスとして、送信元の認証は次のように有効にすることをおすすめします。
Cloud Storage の場合は、非公開の Cloud Storage バケットで Identity and Access Management 権限を使用する。
AWS 互換のストレージ プロバイダの場合は、AWS Signature バージョン 4 を使用します。 送信元の認証を使用すると、Media CDN を迂回して送信元に直接アクセスしようとするリクエストをブロックできます。