如要在檢視者存取串流資源時強制執行雙重權杖驗證,請設定個別路徑。路徑是一種設定,可比對 Media CDN 的要求,並將 HTTP 流量導向來源。Media CDN 支援 HTTP 即時串流 (HLS) 或基於 HTTP 的動態自動調整串流 (DASH) 資源的路徑。如要進一步瞭解 Media CDN 中的路徑,請參閱「設定服務路徑」。
對於 HTTP 即時串流,Media CDN 支援透過 Cookie 和網址查詢參數 (無 Cookie) 進行雙權杖驗證。對於 DASH 串流,Media CDN 僅支援以 Cookie 為基礎的雙權杖驗證。
本頁說明如何設定 Media CDN 路徑,透過雙重權杖驗證保護內容。
事前準備
請執行下列步驟:
如為效期較短的權杖,請選擇下列其中一種簽章演算法:
- Ed25519 簽章
- 對稱金鑰雜湊式訊息驗證碼 (HMAC)
您只能為設定產生新長期效期權杖的路徑啟用對稱式 HMAC 簽署演算法。為達到最佳效能與安全防護效果,建議使用 Ed25519 簽章。只有在需要與其他 CDN 相容時,才使用對稱金鑰 HMAC。
在
EdgeCacheKeyset
資源中加入必要金鑰。權杖必須使用
EdgeCacheKeyset
資源中的金鑰簽署或驗證。金鑰集必須包含所選簽章演算法的正確金鑰。下表說明各個簽章演算法及其必要金鑰。簽名演算法 金鑰組中的必要金鑰 Ed25519 公開金鑰 HMAC-SHA1 驗證共用金鑰 HMAC-SHA256 驗證共用金鑰 最佳做法是建立兩組不同的金鑰,分別用於短期和長期權杖。
不過,如果您使用 DASH 和動態媒體顯示說明 (MPD) 檔案,則長效和短效權杖都必須使用相同的金鑰集。
如要使用效期較長的權杖,請選擇下列其中一種權杖格式:
- Cookie
- 網址查詢參數
設定短期權杖
請根據要使用的簽名演算法,透過下列任一選項設定短期效期權杖。
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」頁面。
按一下「Keysets」(金鑰集) 分頁標籤。
按一下「建立金鑰集」
。在「Name」部分輸入專屬金鑰集名稱。
選用:在「Description」(說明) 中輸入金鑰集的說明。
選用:按一下「新增標籤」,然後輸入金鑰集的鍵值組。
按一下「新增公開金鑰」,然後執行下列操作:
- 在「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 Secret Accessor」。
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」頁面。
按一下「Keysets」(金鑰集) 分頁標籤。
按一下「建立金鑰集」
。在「Name」部分輸入專屬金鑰集名稱。
選用:在「Description」(說明) 中輸入金鑰集的說明。
選用:按一下「新增標籤」,然後輸入金鑰集的鍵值組。
如要指定驗證共用金鑰,請按一下「新增驗證共用金鑰」,然後執行下列步驟:
按一下「建立金鑰集」。
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-owned and managed keys 的範圍由金鑰集決定。也就是說,兩個不同的金鑰集具有不同的Google-owned and managed keys。Google-owned and managed keys 會定期輪替。
請使用下列任一方式設定長期效期權杖:
主控台
在「金鑰」部分,選取「使用 Google-owned and managed key 進行雙重權杖驗證」。
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
您可以在長期效期權杖金鑰集中加入其他公開金鑰。金鑰組最多可有三個公開金鑰。在實務上,這表示金鑰集可以有兩把使用者代管的金鑰和一把Google-owned and managed key。
Media CDN 一律會使用 Google-owned and managed key產生權杖。使用者管理的金鑰只能用於驗證。
加入其他公開金鑰,有助於讓播放器應用程式使用您私密金鑰產生的簽署要求,存取媒體播放清單和媒體片段。
設定權杖交換
本節說明如何建立多個路徑來設定權杖交換。您可以根據內容類型、用戶端屬性和新鮮度需求,透過路徑最佳化行為。在下列範例中,我們使用路徑為媒體要求的每個部分設定權杖交換。
設定主要資訊清單路徑,要求使用效期較短的權杖
設定 Media CDN,在主要資訊清單路徑上要求使用短效期權杖。
控制台
在主要資訊清單路徑上啟用短時間權杖驗證:
前往 Google Cloud 控制台的「Media CDN」頁面。
如要開啟服務的「詳細資料」頁面,請按一下服務名稱。
如要切換至編輯模式,請按一下「編輯」按鈕。
如要前往「Routing」(路徑) 部分,請按一下「Next」(下一步)。
展開要新增主要資訊清單路徑規則的主機規則。
按一下「Add route rule」(新增轉送規則)。
如要編輯路徑規則,請按一下相應資料列中的「編輯」
。在「編輯路徑規則」窗格中,為「優先順序」設定值,例如
1
。在「說明」中,提供簡短說明,方便在規則清單中找出規則。
在「比對」部分中,按一下「新增比對條件」。接著,請按照下列步驟操作:
- 在「比對類型」部分,選取「路徑範本比對」。
- 在「路徑相符」部分,指定 HLS 主要播放清單 (M3U8) 或 DASH 資訊清單 (MPD) 檔案的名稱或路徑範本。詳情請參閱路徑比對。
按一下 [Advanced configurations] (進階設定)。
在「Route action」(轉送動作) 部分,按一下「Add an item」(新增項目)。
在「Type」(類型) 部分,選取「CDN policy」(CDN 政策)。
在「已簽署的要求」部分中,選取「已簽署的要求模式」的「需要權杖」。
在「已簽署的要求金鑰集」部分,執行下列操作:
如要指定短期權杖的鍵集,請按一下「選取鍵集」,然後選取短期權杖鍵集。
如要建立含有所需金鑰的新金鑰集,請按一下「建立新的金鑰集」。然後選取該項目。
在「簽章演算法」部分,選取「使用公開金鑰的 Ed25519」。
在「權杖查詢參數」中保留預設值
edge-cache-token
。或者,如果您打算使用 HTTP 即時串流資訊清單網址查詢參數 (而非 Cookie) 進行驗證,請指定要儲存要求權杖的參數。
在「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
:HTTP 即時串流主要播放清單 (M3U8) 或 DASH 資訊清單 (MPD) 檔案的名稱。詳情請參閱路徑比對。SHORT_KEYSET_NAME
:用於短期權杖的金鑰集名稱SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME
: 已簽署要求的到期時間,例如600s
。詳情請參閱signedRequestMaximumExpirationTtl
。- 選用:
SHORT_TOKEN_NAME
:要尋找短符記的查詢參數。預設值為edge-cache-token
。詳情請參閱SignedTokenOptions
。
使用對稱金鑰 HMAC 時,請在
signedTokenOptions
區段中,將allowedSignatureAlgorithms
附加至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 或網址查詢參數產生這些權杖。
控制台
修改主要資訊清單路徑規則,讓 Media CDN 可以在路徑上產生長期效期權杖:
- 在「編輯路徑規則」頁面中,按一下「進階設定」。
- 在「Type」(類型) 部分,選取「CDN policy」(CDN 政策)。
- 展開「雙重權杖驗證」。
- 在「簽章動作」部分,選取「產生新的長期權杖」。
在「簽章類型」部分,選取下列任一選項:
- 使用 Cookie (適用於 HTTP 即時串流和 DASH 串流):設定 Media CDN,傳回含有主要資訊清單回應的
Edge-Cache-Cookie
。 - 使用 HTTP 即時串流資訊清單網址查詢參數 (沒有 Cookie):設定 Media CDN,在每個網址附加長期權杖,藉此操控 HTTP 即時串流主要資訊清單。
- 使用 Cookie (適用於 HTTP 即時串流和 DASH 串流):設定 Media CDN,傳回含有主要資訊清單回應的
在「產生新的長期權杖」部分,完成下列操作:
如要為長期效期權杖指定金鑰集,請按一下「選取金鑰集」,然後選取長期效期權杖金鑰集。
或者,按一下「建立新的金鑰集」,建立含有所需金鑰的新金鑰集。然後選取該項目。
在「權杖存留時間」欄位中,以秒為單位指定長期權杖的生命週期上限。
在「簽章類型」中,如果您選取「透過 Cookie」選項,請在「複製的參數」部分選取要讓 Media CDN 從短期權杖複製到長期權杖的參數。如要使用雙權杖驗證,您必須選取
PathGlobs
(或其任一別名,例如acl
或paths
) 或URLPrefix
。如果選取「透過 HTTP 即時串流資訊清單網址查詢參數」選項,請保留「權杖查詢參數」的預設值
edge-cache-token
。
如要儲存「路線動作」部分的變更,請按一下「完成」。
如要儲存路徑規則的變更,請按一下「儲存」。
系統會顯示訊息,詢問您要自動或手動建立媒體播放清單和片段的路徑。如果選取自動選項,系統會為 Cookie 簽章建立一個新路徑,並為無 Cookie 簽章建立兩個路徑。如果選取手動選項,請前往下一個部分。
gcloud 和 YAML
修改主要資訊清單路徑規則的 addSignatures
區段,讓 Media CDN 可以在路徑上產生長期效期權杖:
Cookie
addSignatures:
actions:
- GENERATE_COOKIE
keyset: LONG_KEYSET_NAME
tokenTtl: TOKEN_EXPIRATION_TIME
copiedParameters:
- PathGlobs
- SessionID
更改下列內容:
LONG_KEYSET_NAME
:長期權杖金鑰組的名稱TOKEN_EXPIRATION_TIME
:長期權杖的到期時間,例如長度為一天的到期時間為86400s
這個程式碼範例會實作下列變更:
addSignatures.actions: GENERATE_COOKIE
:設定 Media CDN,傳回含有主要資訊清單回應的Edge-Cache-Cookie
copiedParameters.PathGlobs
:設定 Media CDN,將短期權杖中的PathGlobs
複製到長期權杖。如要使用雙重權杖驗證,必須使用copiedParameters.PathGlobs
或copiedParameters.URLPrefix
。詳情請參閱copiedParameters
。選用:
copiedParameters.SessionID
:設定 Media CDN,將SessionID
從短期權杖複製到長期權杖
套用 GENERATE_COOKIE
動作後,Media CDN 會在主要資訊清單回應中傳回類似下列內容的 Set-Cookie
標頭:
Set-Cookie: Edge-Cache-Cookie=PathGlobs=PATHS~SessionID=SESSION_ID~Expires=EXPIRATION~_GO=Generated~Signature=SIGNATURE
網址查詢參數
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
:長期權杖的到期時間,例如長度為一天的到期時間為86400s
這個程式碼範例會實作下列變更:
addSignatures.actions: GENERATE_TOKEN_HLS_COOKIELESS
: 設定 Media CDN,在每個 URI 後方附加長期權杖,藉此操控 HLS 主要資訊清單。copiedParameters.PathGlobs
:設定 Media CDN,將短期權杖中的PathGlobs
複製到長期權杖。如要使用雙重權杖驗證,必須使用copiedParameters.PathGlobs
或copiedParameters.URLPrefix
。詳情請參閱copiedParameters
。選用:
copiedParameters.SessionID
:設定 Media CDN,將SessionID
從短期權杖複製到長期權杖。選用:
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
查詢參數中產生並儲存長期權杖。
設定媒體播放清單和媒體內容片段路徑,要求使用效期較長的權杖
設定媒體播放清單和媒體內容片段路徑,要求使用效期較長的權杖。
控制台
Cookie
為媒體播放清單和媒體內容片段路徑建立路徑規則:
- 在「Edit Edge Cache service」(編輯 Edge Cache 服務) 頁面的「Routing」(轉送) 部分,按一下具有主要資訊清單路徑的主機規則。
- 按一下「Add route rule」(新增轉送規則)。
- 在「編輯路徑規則」窗格中,將「優先順序」設為大於主要資訊清單路徑的值,例如
2
。值越大,表示優先順序越低。 - 在「說明」中,提供簡短說明,方便在規則清單中找出規則。
按照建議設定下列欄位:
- 選取來源:與主要資訊清單路徑規則相同
- 新增比對條件:與主要資訊清單路徑規則相同
- 類型:CDN 政策
- 已簽署的要求模式:需要權杖
- 選取金鑰組:與長期效期權杖相同
- 簽章演算法:與主要資訊清單路徑規則相同
展開「雙重權杖驗證」。
保留「簽章動作」的預設值「無」。
依序按一下 [完成] 及 [儲存]。
網址查詢參數
為媒體播放清單建立路徑規則。
- 在「Edit Edge Cache service」(編輯 Edge Cache 服務) 頁面的「Routing」(轉送) 部分,按一下具有主要資訊清單路徑的主機規則。
- 按一下「Add route rule」(新增轉送規則)。
- 在「編輯路徑規則」窗格中,將「優先順序」設為大於主要資訊清單路徑的值,例如
2
。值越大,表示優先順序越低。 - 在「說明」中,提供簡短說明,方便在規則清單中找出規則。
按照建議設定下列欄位:
- 選取來源:與主要資訊清單路徑規則相同
- 新增比對條件:與主要資訊清單路徑規則相同
- 類型:CDN 政策
- 已簽署的要求模式:需要權杖
- 選取金鑰組:與長期效期權杖相同
- 簽章演算法:與主要資訊清單路徑規則相同
- 權杖查詢參數:與長期權杖相同
展開「雙重權杖驗證」。
在「簽章動作」中,選取「套用現有的長期權杖」。
只有在 Media CDN 驗證長期權杖是使用透過 HTTP 即時串流資訊清單網址查詢參數 (沒有 Cookie) 簽章類型產生後,才會啟用這個選項。
在「權杖查詢參數」中保留預設值
edge-cache-token
。依序按一下 [完成] 及 [儲存]。
為媒體片段建立路徑規則。
這條路徑與媒體播放清單的路徑類似,但有下列主要差異:
- 在「Priority」(優先順序) 中,設定大於媒體播放清單路徑規則的值,例如
3
。 - 在「說明」中,提供簡短說明,方便在規則清單中找出規則。
- 在「雙重權杖驗證」部分,保留「簽章動作」的預設值「無」。
- 在「Priority」(優先順序) 中,設定大於媒體播放清單路徑規則的值,例如
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
:強制執行媒體播放清單和媒體片段的權杖。如果您使用靜態媒體呈現說明 (MPD) 檔案,長短金鑰集可能會有所不同。如果您使用動態 MPD 檔案,長短金鑰集必須相同。signedRequestKeyset: LONG_KEYSET_NAME
: Media CDN 會使用長期金鑰組,驗證使用者代理程式為媒體播放清單和媒體區段要求提供的長期 Cookie。
網址查詢參數
新增兩項路徑設定:
設定 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
:強制執行媒體播放清單和媒體片段的權杖。如果您使用靜態媒體呈現說明 (MPD) 檔案,長和短金鑰集可能不同。如果您使用動態 MPD 檔案,長金鑰集和短金鑰集必須相同。signedRequestKeyset: LONG_KEYSET_NAME
: Media CDN 會使用長期金鑰組,驗證使用者代理程式為媒體播放清單和媒體區段要求提供的長期 Cookie。addSignatures.actions: PROPAGATE_TOKEN_HLS_COOKIELESS
:設定 Media CDN,將長期效期權杖複製到媒體播放清單中的媒體片段 URI。
設定區隔路徑,要求使用長效權杖:
- 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
網址查詢參數
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 值區使用身分與存取權管理權限。
如果是與 AWS 相容的儲存空間供應商,請使用 AWS 第 4 版簽署程序。 使用來源驗證可封鎖嘗試規避 Media CDN 並直接存取來源的要求。