閲覧者がストリーミング リソースにアクセスするときにデュアル トークン認証を適用するには、個別のルートを構成します。ルートは、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 署名を使用し、対称鍵 HMAC は、他の CDN との互換性のために必要な場合にのみ使用することをおすすめします。
必要な鍵を
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])"
単一の公開鍵を持つ新しい鍵セットを作成します。
コンソール
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 を構成します。
バイナリ形式のシークレット バージョンを追加します。
Secret Manager アクセスロール(
roles/secretmanager.secretAccessor
)を Media CDN サービス アカウントに付与します。コンソール
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 クエリ パラメータを使用する場合は、リクエスト トークンを保存するパラメータを指定します。
[最大有効期間] で、受信リクエスト トークンの最大存続期間を秒単位で指定します。
[ルート アクション] セクションで変更を保存するには、[完了] をクリックします。
ルートルールの変更を保存するには、[保存] をクリックします。
gcloud と YAML
YAML ファイルに Media CDN 構成をエクスポートします。
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 ポリシー
- 署名付きリクエスト モード: トークンを要求
- 鍵セットを選択: 長期トークンと同じ
- 署名アルゴリズム: プライマリ マニフェスト ルートルールと同じ
[デュアル トークン認証] を開きます。
[署名アクション] は、デフォルト値の [なし] のままにします。
[完了] をクリックし、[保存] をクリックします。
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 を回避して送信元に直接アクセスしようとするリクエストはブロックされます。