使用雙重權杖驗證

如要讓觀眾在存取串流資源時強制執行雙權杖驗證,您必須設定不同的路徑。路由是一種設定,可比對 Media CDN 要求,並將 HTTP 流量導向來源。Media CDN 支援 HTTP 即時串流 (HLS) 或基於 HTTP 的動態自動調整串流 (DASH) 資源的路徑。如要進一步瞭解 Media CDN 中的路徑,請參閱「設定服務路徑」。

針對 HTTP 即時串流,Media CDN 支援透過 Cookie 和網址查詢參數 (無 Cookie) 進行雙權杖驗證。針對 DASH 串流,Media CDN 僅支援以 Cookie 為基礎的雙權杖驗證。

本頁面說明如何設定 Media CDN 路徑,以便透過雙權杖驗證機制保護內容。

事前準備

請執行下列步驟:

  1. 針對短時間權杖,請選擇下列其中一種簽名演算法:

    • Ed25519 簽章
    • 對稱金鑰雜湊架構訊息驗證碼 (HMAC)

    您只能為設定為產生新長效權杖的路徑啟用對稱式 HMAC 簽署演算法。為達到最佳效能與安全防護效果,建議您使用 Ed25519 簽章,並且只在必要時使用對稱金鑰 HMAC,以便與其他 CDN 相容。

  2. EdgeCacheKeyset 資源中加入必要的鍵。

    權杖必須使用 EdgeCacheKeyset 資源中的金鑰簽署或驗證。鍵組必須包含所選簽名演算法的正確金鑰。下表說明每個簽章演算法及其必要鍵。

    簽名演算法 鍵組中的必要鍵
    Ed25519 公開金鑰
    HMAC-SHA1 驗證共用金鑰
    HMAC-SHA256 驗證共用金鑰

    最佳做法是建立兩個獨立的鍵組,一個用於短時間代碼,另一個用於長時間代碼。

    不過,如果您使用 DASH 和動態媒體顯示說明 (MPD) 檔案,則必須為長時間長度和短時間長度符記使用相同的鍵組。

  3. 針對長時間代碼,請選擇下列任一代碼格式:

    • Cookie
    • 網址查詢參數

設定短時間權杖

視要使用的簽名演算法而定,使用下列任一選項設定短時間效期的權杖。

Ed25519 簽章

  1. 產生私密金鑰:

    openssl genpkey -algorithm ed25519 -outform PEM -out SSL_KEY_NAME.private.key
    

    SSL_KEY_NAME 替換為鍵名稱。

  2. 從私密金鑰產生公開金鑰:

    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])"
    
  3. 使用單一公開金鑰建立新的金鑰組:

    主控台

    1. 前往 Google Cloud 控制台的「Media CDN」頁面。

      前往 Media CDN

    2. 按一下「Keyset」分頁標籤。

    3. 按一下「 建立鍵組」

    4. 在「Name」 中輸入不重複的鍵組名稱。

    5. 選用:在「說明」中輸入鍵組的說明。

    6. 選用:按一下「Add label」(新增標籤),然後為鍵組輸入一或多個鍵/值組合。

    7. 按一下「新增公開金鑰」,然後執行下列操作:

      1. 在「ID」中輸入英數字元 ID。
      2. 選取「輸入值」,然後指定 Ed25519 公開金鑰的 Base64 編碼值。
    8. 按一下「建立金鑰組」

    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

    resource "google_network_services_edge_cache_keyset" "default" {
      name        = "prod-vod-keyset"
      description = "Keyset for prod.example.com"
      public_key {
        id    = "key-20200918"
        value = "FHsTyFHNmvNpw4o7-rp-M1yqMyBF8vXSBRkZtkQ0RKY" # Update Ed25519 public key
      }
      public_key {
        id    = "key-20200808"
        value = "Lw7LDSaDUrbDdqpPA6JEmMF5BA5GPtd7sAjvsnh7uDA=" # Update Ed25519 public key
      }
    }

對稱金鑰 HMAC

  1. 如果您之前未使用過 Secret Manager,請設定 Secret Manager

  2. 建立密鑰

  3. 以二進位格式新增密鑰版本

  4. Secret Manager 存取權角色 (roles/secretmanager.secretAccessor) 授予 Media CDN 服務帳戶:

    主控台

    1. 前往 Google Cloud 控制台的「Secret Manager」頁面。

      前往 Secret Manager

    2. 勾選機密名稱旁的核取方塊。

    3. 按一下「顯示資訊面板」

    4. 在資訊面板中,按一下「新增主體」

    5. 在「新增主體」中,輸入 Media CDN 服務帳戶的格式如下:

      service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com
      

      PROJECT_NUMBER 替換為您的專案編號。

    6. 在「請選取角色」中,依序選取「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
  5. 存取密鑰版本,並複製密鑰路徑 (包括版本編號)。

  6. 在驗證共用金鑰中使用共用密鑰建立新的金鑰組:

    主控台

    1. 前往 Google Cloud 控制台的「Media CDN」頁面。

      前往 Media CDN

    2. 按一下「Keyset」分頁標籤。

    3. 按一下「 建立鍵組」

    4. 在「Name」 中輸入不重複的鍵組名稱。

    5. 選用:在「說明」中輸入鍵組的說明。

    6. 選用:按一下「Add label」(新增標籤),然後為鍵組輸入一或多個鍵/值組合。

    7. 如要指定驗證共用金鑰,請按一下「新增驗證共用金鑰」,然後執行下列操作:

      1. 如要設定「密鑰」,請從清單中選取密鑰、指定資源 ID 手動輸入密鑰,或是建立新的密鑰,然後選取密鑰。

      2. 針對「Secret version」,請從清單中選取版本,或建立新的密鑰版本,然後選取該版本。

    8. 按一下「建立金鑰組」

    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:您的專案 ID
    • SECRET_ID:密鑰的資源 ID
    • KEY_VERSION:您要使用的密鑰版本

設定長期權杖

Google-owned and managed keys 的範圍由 keyset 決定。也就是說,兩個不同的鍵組會有不同的Google-owned and managed keys。Google-owned and managed keys 會定期輪替。

請使用下列任一選項設定長時間憑證:

主控台

  1. 建立或修改鍵組

  2. 在「Keys」部分中,選取「UseGoogle-owned and managed key for dual-token authentication」

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

  • 修改現有鍵組:

    1. 將鍵組匯出為 YAML 檔案。使用 gcloud edge-cache keysets export 指令

      gcloud edge-cache keysets export LONG_KEYSET_NAME \
         --destination=prod-vod-keyset-long.yaml
      
    2. 在文字編輯器或設定管理工具中,編輯鍵集設定,使其看起來類似下列內容:

      name: projects/my-project/locations/global/edgeCacheKeysets/LONG_KEYSET_NAME
      publicKeys:
      - id: some-key
        value: MC4CAQAwBQYDK2VwBCIEINV2iYugIWBuvGBJUQ_Ab69E4v4zcVqvgYHw-iZxGzcd
      - id: google-managed-key
        managed: true
      
    3. 匯入已編輯的鍵組。使用 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,要求在主要資訊清單路徑中使用短效權杖。

控制台

在主要資訊清單路徑上啟用短時間權杖驗證:

  1. 前往 Google Cloud 控制台的「Media CDN」頁面。

    前往 Media CDN

  2. 如要開啟服務的「詳細資料」頁面,請按一下服務名稱。

  3. 如要切換至編輯模式,請按一下「編輯」按鈕。

  4. 如要前往「路由」部分,請按一下「下一步」

  5. 展開要新增主要資訊清單路由規則的主機規則。

  6. 按一下「Add route rule」(新增轉送規則)

    如要編輯路由規則,請按一下相應資料列中的 「編輯」

  7. 在「Edit route rule」窗格中,針對「Priority」設定值,例如 1

  8. 在「說明」中,提供簡短說明,方便在規則清單中識別規則。

  9. 在「比對」部分中,按一下「新增比對條件」。接著,請按照下列步驟操作:

    1. 在「比對類型」中,選取「路徑範本比對」
    2. 在「Path match」(路徑比對) 部分,指定 HLS 主要播放清單 (M3U8) 或 DASH 資訊清單 (MPD) 檔案的名稱或路徑範本。詳情請參閱「路徑比對」。
  10. 按一下 [Advanced configurations] (進階設定)

  11. 在「Route action」(轉送動作) 部分,按一下「Add an item」(新增項目)

  12. 在「Type」(類型) 部分,選取「CDN policy」(CDN 政策)

  13. 在「已簽署的要求」部分的「已簽署的要求模式」中,選取「需要權杖」

  14. 在「已簽署的要求金鑰組」部分中,執行下列操作:

    1. 如要指定短時間長度的符記的鍵組,請按一下「選取鍵組」,然後選取短時間長度的符記鍵組

      如要建立包含所需鍵的新鍵組,請按一下「Create new keyset」。然後選取該項目。

    2. 在「簽章演算法」部分,選取「使用公開金鑰的 Ed25519」

    3. 在「權杖查詢參數」中,保留預設值 edge-cache-token

      或者,如果您打算使用 HLS 資訊清單網址查詢參數,而非 Cookie 進行驗證,請指定要儲存要求權杖的參數。

    4. 針對「Max time to live」,請以秒為單位,指定傳入要求權杖的生命週期上限。

  15. 如要儲存「路由動作」部分的變更,請按一下「完成」

  16. 如要儲存路由規則中的變更,請按一下「儲存」

gcloud 和 YAML

  1. 將 Media CDN 設定匯出至 YAML 檔案。使用 gcloud edge-cache services export 指令

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    更改下列內容:

    • SERVICE_NAME:服務名稱
    • FILENAME:YAML 檔案名稱
  2. 如要在主要資訊清單路由規則中啟用短時間權杖驗證,請在 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 部分附加 allowedSignatureAlgorithms,其值為 HMAC_SHA_256

           allowedSignatureAlgorithms:
           - HMAC_SHA_256
    
  3. 如要更新服務,請從 YAML 檔案匯入 Media CDN 設定。使用 gcloud edge-cache services import 指令

    gcloud edge-cache services import SERVICE_NAME \
        --source=FILENAME.yaml
    

這樣就完成啟用單一權杖驗證的程序。

如要設定雙重權杖驗證,請繼續閱讀下列各節。

設定主要資訊清單路徑規則,產生長時間長度的符記

設定 Media CDN,在主要資訊清單路徑上產生長效權杖。請選擇要使用 Cookie 或網址查詢參數來產生這些權杖。

控制台

修改主要資訊清單路徑規則,讓 Media CDN 能夠在路徑上產生長時間代碼:

  1. 在「編輯路由規則」頁面中,按一下「進階設定」
  2. 在「Type」(類型) 部分,選取「CDN policy」(CDN 政策)
  3. 展開「雙重權杖驗證」
  4. 針對「Signature action」,選取「Generate new long-duration token」
  5. 在「Signature type」(簽名類型) 部分,選取下列任一選項:

    • 使用 Cookie (適用於 HLS 和 DASH 串流):設定 Media CDN 以傳回包含主要資訊清單回應的 Edge-Cache-Cookie
    • 透過 HLS 即時串流資訊清單 URI 查詢參數 (沒有 Cookie):設定 Media CDN,透過在每個網址後面附加長期權杖來操控 HLS 主要資訊清單。
  6. 在「Generate new long-duration token」部分,執行以下操作:

    1. 如要指定長時間長度的符記的鍵組,請按一下「選取鍵組」,然後選取長時間長度的符記鍵組

      或者,您也可以按一下「Create new keyset」,建立包含所需鍵的新鍵組。然後選取該項目。

    2. 針對「Token TTL」,以秒為單位指定長時間長度的權杖的最大生命週期。

    3. 針對「Signature type」(簽名類型),如果您選取「via cookies」(透過 Cookie) 選項,請在「Copied parameters」(複製的參數) 部分選取要讓 Media CDN 從短期權杖複製到長期權杖的參數。如要使用雙權杖驗證,您必須選取 PathGlobs (或其別名 aclpaths) 或 URLPrefix

      如果您選取「透過 HTTP 即時串流資訊清單 URI 查詢參數」選項,請保留「權杖查詢參數」的預設值 edge-cache-token

  7. 如要儲存「路由動作」部分的變更,請按一下「完成」

  8. 如要儲存路由規則中的變更,請按一下「儲存」

    系統會顯示訊息,詢問您要自動或手動建立媒體播放清單和片段的路徑。如果選取自動選項,系統會為 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.PathGlobscopiedParameters.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.PathGlobscopiedParameters.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

為媒體播放清單和媒體內容片段路徑建立路徑規則:

  1. 在「Edit Edge Cache service」頁面的「Routing」部分中,按一下含有主要資訊清單路徑的主機規則。
  2. 按一下「Add route rule」(新增轉送規則)
  3. 在「Edit route rule」窗格中,針對「Priority」,設定大於主要資訊清單路徑的值,例如 2。值越高,表示優先順序越低。
  4. 在「說明」中,提供簡短說明,方便在規則清單中識別規則。
  5. 請按照建議設定下列欄位:

    • 選取來源:與主要資訊清單路徑規則相同
    • 新增比對條件:與主要資訊清單路徑規則相同
    • 類型CDN 政策
    • 已簽署的要求模式需要權杖
    • 選取金鑰組:與長時間戳記相同
    • 簽章演算法:與主要資訊清單路徑規則相同
  6. 展開「雙重權杖驗證」

  7. 針對「Signature action」(簽名動作),保留預設值「None」

  8. 依序按一下 [完成] 及 [儲存]

網址查詢參數

  1. 建立媒體播放清單的轉送規則。

    1. 在「Edit Edge Cache service」頁面的「Routing」部分中,按一下含有主要資訊清單路徑的主機規則。
    2. 按一下「Add route rule」(新增轉送規則)
    3. 在「編輯路徑規則」窗格中,針對「優先順序」,設定大於主要資訊清單路徑的值,例如 2。值越高,表示優先順序越低。
    4. 在「說明」中,提供簡短說明,方便在規則清單中識別規則。
    5. 請按照建議設定下列欄位:

      • 選取來源:與主要資訊清單路徑規則相同
      • 新增比對條件:與主要資訊清單路徑規則相同
      • 類型CDN 政策
      • 已簽署的要求模式需要權杖
      • 選取金鑰組:與長時間戳記相同
      • 簽章演算法:與主要資訊清單路徑規則相同
      • 權杖查詢參數:與長效權杖相同
    6. 展開「雙重權杖驗證」

    7. 針對「Signature action」,選取「Propagate existing long-duration token」

      只有在 Media CDN 確認使用透過 HTTP 即時串流資訊清單 URI 查詢參數 (沒有 Cookie) 簽章類型產生長期權杖後,才能啟用這個選項。

    8. 在「權杖查詢參數」中,保留預設值 edge-cache-token

    9. 依序按一下 [完成] 及 [儲存]

  2. 建立媒體區段的路由規則。

    這條路線與媒體播放清單的路線類似,但有以下幾項重要差異:

    • 在「優先順序」中,請設定大於媒體播放清單路徑規則的值,例如 3
    • 在「說明」中,提供簡短說明,方便在規則清單中識別規則。
    • 在「Dual-token authentication」部分,針對「Signature action」,保留預設值「None」

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。

網址查詢參數

新增兩個路徑設定:

  1. 設定 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。
  2. 設定區隔路徑,要求使用長效權杖:

       - 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

在應用程式伺服器上產生短期權杖

如要瞭解如何產生權杖,請參閱「產生權杖」。

套用縱深防禦內容保護措施

最佳做法是啟用原始來源驗證,步驟如下: