שימוש באימות באמצעות שני אסימונים

כדי לאכוף אימות באמצעות שני אסימונים כשצופים ניגשים למשאב סטרימינג, צריך להגדיר נתיבים נפרדים. מסלול הוא הגדרה שתואמת לבקשות ל-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 כדי להגן על התוכן באמצעות אימות דו-אסימוני.

לפני שמתחילים

צריך לבצע את הפעולות הבאות:

  1. עבור טוקנים לזמן קצר, בוחרים באחד מאלגוריתמי החתימה הבאים:

    • חתימות Ed25519
    • קודים של אימות הודעות (HMAC) מבוססי-גיבוב עם מפתח סימטרי

    אפשר להפעיל אלגוריתמים סימטריים של חתימת HMAC רק עבור מסלולים שהוגדרו ליצירת טוקנים חדשים לטווח ארוך. מומלץ להשתמש בחתימות Ed25519 כדי להשיג ביצועים ואבטחה אופטימליים, וב-HMAC עם מפתח סימטרי רק כשצריך לצורך תאימות ל-CDN אחרים.

  2. כוללים את המפתחות הנדרשים במשאב EdgeCacheKeyset.

    צריך לחתום על טוקנים או לאמת אותם באמצעות מפתחות במשאב EdgeCacheKeyset. ערכת המפתחות צריכה לכלול את המפתחות הנכונים לאלגוריתם החתימה שנבחר. בטבלה הבאה מתוארים כל אלגוריתמי החתימה והמפתחות הנדרשים שלהם.

    אלגוריתם חתימה המקשים הנדרשים בערכת המקשים
    Ed25519 מפתחות ציבוריים
    HMAC-SHA1 אימות מפתחות משותפים
    HMAC-SHA256 אימות מפתחות משותפים

    מומלץ ליצור שני מערכי מפתחות נפרדים, אחד לטוקנים לטווח קצר ואחד לטוקנים לטווח ארוך.

    עם זאת, אם אתם משתמשים ב-DASH ובקובצי תיאור דינמי של מצגת מדיה (MPD), אתם צריכים להשתמש באותו סט מפתחות גם לטוקנים ארוכי טווח וגם לטוקנים קצרי טווח.

  3. עבור אסימונים לטווח ארוך, בוחרים באחד מפורמטי האסימונים הבאים:

    • קובצי Cookie
    • פרמטרים של שאילתות בכתובות URL

הגדרת טוקנים לטווח קצר

בהתאם לאלגוריתם החתימה שבו רוצים להשתמש, מגדירים טוקנים לפרק זמן קצר באחת מהאפשרויות הבאות.

חתימת 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. נכנסים לדף Media CDN במסוף Google Cloud .

      מעבר אל Media CDN

    2. לוחצים על הכרטיסייה Keysets (קבוצות מפתחות).

    3. לוחצים על Create keyset.

    4. בשדה Name, מזינים שם ייחודי לערכת המפתחות.

    5. אופציונלי: בשדה Description, מזינים תיאור לערכת המפתחות.

    6. אופציונלי: לוחצים על הוספת תווית, ואז מזינים זוג אחד או יותר של מפתח/ערך עבור קבוצת המפתחות.

    7. לוחצים על Add public key (הוספת מפתח ציבורי) ומבצעים את הפעולות הבאות:

      1. בשדה ID (מזהה), מזינים מזהה אלפאנומרי.
      2. בוחרים באפשרות Enter the value (הזנת הערך) ומציינים את הערך המקודד ב-base64 של המפתח הציבורי Ed25519.
    8. לוחצים על Create keyset.

    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. מקצים לחשבון השירות של Media CDN את התפקיד 'גישה ל-Secret Manager' (roles/secretmanager.secretAccessor):

    המסוף

    1. נכנסים לדף Secret Manager במסוף Google Cloud .

      מעבר אל Secret Manager

    2. מסמנים את התיבה לצד השם של הסוד.

    3. לוחצים על הצגת חלונית המידע.

    4. בחלונית המידע, לוחצים על Add principal.

    5. בשדה New principals (חשבונות משתמשים חדשים), מזינים את חשבון השירות של Media CDN בפורמט הבא:

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

      מחליפים את PROJECT_NUMBER במספר הפרויקט.

    6. בשדה Select a role (בחירת תפקיד), בוחרים באפשרות Secret Manager (ניהול סודות) ואז באפשרות Secret Manager Secret Accessor (גישה לסודות ב-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: מזהה הסוד
  5. ניגשים לגרסאות הסודיות ומעתיקים את הנתיבים הסודיים, כולל מספרי הגרסאות.

  6. יוצרים קבוצת מפתחות חדשה עם הסודות המשותפים במפתח משותף לאימות:

    המסוף

    1. נכנסים לדף Media CDN במסוף Google Cloud .

      מעבר אל Media CDN

    2. לוחצים על הכרטיסייה Keysets (קבוצות מפתחות).

    3. לוחצים על Create keyset.

    4. בשדה Name, מזינים שם ייחודי לערכת המפתחות.

    5. אופציונלי: בשדה Description, מזינים תיאור לערכת המפתחות.

    6. אופציונלי: לוחצים על הוספת תווית, ואז מזינים זוג אחד או יותר של מפתח/ערך עבור קבוצת המפתחות.

    7. כדי לציין מפתח משותף לאימות, לוחצים על הוספת מפתח משותף לאימות ואז מבצעים את הפעולות הבאות:

      1. בקטע Secret, בוחרים סוד מהרשימה, מזינים סוד באופן ידני על ידי ציון מזהה המשאב שלו, או יוצרים סוד חדש ואז בוחרים אותו.

      2. בקטע Secret version, בוחרים גרסה מהרשימה או יוצרים גרסה חדשה של הסוד ואז בוחרים אותה.

    8. לוחצים על Create keyset.

    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: שם ייחודי ל-keyset, לדוגמה prod-vod-keyset
    • PROJECT_NUMBER: מזהה הפרויקט
    • SECRET_ID: מזהה המשאב של הסוד
    • KEY_VERSION: גרסת הסוד שרוצים להשתמש בה

הגדרת טוקנים לטווח ארוך

Google-owned and managed keys מוגדרים לפי קבוצת מקשים. כלומר, לשני מערכי מפתחות שונים יש ערכיGoogle-owned and managed keysשונים. Google-owned and managed keys מתחלפים באופן קבוע.

כדי להגדיר טוקנים לטווח ארוך, אפשר להשתמש באחת מהאפשרויות הבאות:

המסוף

  1. איך יוצרים או משנים ערכת מקשים

  2. בקטע Keys, בוחרים באפשרות Use Google-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
      

אפשר לכלול עוד מפתחות ציבוריים בערכת המפתחות של טוקן עם משך שימוש ארוך. ה-keyset יכול להכיל עד שלושה מפתחות ציבוריים. בפועל, המשמעות היא שקבוצת המפתחות יכולה לכלול שני מפתחות בניהול המשתמשים ומפתח אחד מסוגGoogle-owned and managed key.

ב-Media CDN תמיד נעשה שימוש ב- Google-owned and managed keyכדי ליצור אסימונים. אפשר להשתמש במפתחות שמנוהלים על ידי המשתמש רק לצורך אימות.

הוספה של מפתחות ציבוריים נוספים שימושית כדי לאפשר לאפליקציית הנגן שלכם לגשת לפלייליסטים של מדיה ולפלחי מדיה באמצעות בקשות חתומות שנוצרות על ידי המפתחות הפרטיים שלכם.

הגדרת החלפת טוקנים

בקטע הזה מוסבר איך להגדיר החלפת טוקנים על ידי יצירת כמה מסלולים. מסלול מאפשר לכם לבצע אופטימיזציה של ההתנהגות על סמך סוג התוכן, מאפייני הלקוח ודרישות הרענון שלכם. בדוגמאות הבאות, אנחנו משתמשים בנתיבים כדי להגדיר החלפת טוקנים לכל חלק בבקשה למדיה.

הגדרת הנתיב הראשי של קובץ המניפסט כך שיידרשו אסימונים לפרק זמן קצר

מגדירים את Media CDN כך שיידרשו אסימונים לפרק זמן קצר במסלול המניפסט הראשי.

המסוף

מפעילים אימות באמצעות טוקן לזמן קצר בנתיב הראשי של המניפסט:

  1. נכנסים לדף Media CDN במסוף Google Cloud .

    מעבר אל Media CDN

  2. כדי לפתוח את הדף פרטים של שירות מסוים, לוחצים על שם השירות.

  3. כדי לעבור למצב עריכה, לוחצים על הלחצן עריכה.

  4. כדי לעבור לקטע ניתוב, לוחצים על הבא.

  5. מרחיבים את כלל המארח שאליו רוצים להוסיף את כלל המסלול של המניפסט הראשי.

  6. לוחצים על הוספת כלל ניתוב.

    לחלופין, כדי לערוך כלל ניתוב, לוחצים על עריכה בשורה הרלוונטית.

  7. בחלונית עריכת כלל ניתוב, בשדה עדיפות, מגדירים ערך – לדוגמה, 1.

  8. בקטע תיאור, מזינים תיאור קצר שיעזור לזהות את הכלל ברשימת הכללים.

  9. בקטע התאמה, לוחצים על הוספת תנאי התאמה. לאחר מכן, מבצעים את הפעולות הבאות:

    1. בקטע סוג התאמה, בוחרים באפשרות התאמה לתבנית נתיב.
    2. בקטע Path match (התאמת נתיב), מציינים את השמות או את תבניות הנתיבים של קובץ הפלייליסט הראשי של HLS ‏(M3U8) או של מניפסט DASH ‏(MPD). מידע נוסף זמין במאמר בנושא התאמת נתיבים.
  10. לוחצים על הגדרות מתקדמות.

  11. בקטע פעולת ניתוב, לוחצים על הוספת פריט.

  12. בשדה Type (סוג), בוחרים באפשרות CDN policy (מדיניות CDN).

  13. בקטע בקשה חתומה, באפשרות מצב בקשה חתומה, בוחרים באפשרות נדרשים טוקנים.

  14. בקטע Signed request keyset:

    1. כדי לציין את קבוצת המפתחות של טוקנים לפרק זמן קצר, לוחצים על בחירת קבוצת מפתחות ובוחרים את קבוצת המפתחות של טוקנים לפרק זמן קצר.

      לחלופין, כדי ליצור קבוצת מקשים חדשה עם המקשים שאתם צריכים, לוחצים על יצירת קבוצת מקשים חדשה. ואז בוחרים אותה.

    2. בקטע Signature algorithm (אלגוריתם חתימה), בוחרים באפשרות Ed25519 using public keys (שימוש ב-Ed25519 עם מפתחות ציבוריים).

    3. בקטע פרמטר שאילתה של טוקן, משאירים את ערך ברירת המחדל, edge-cache-token.

      לחלופין, אם אתם מתכננים להשתמש בפרמטרים של שאילתת כתובת URL של מניפסט 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. כדי להפעיל אימות באמצעות טוקן לזמן קצר בכלל הניתוב של המניפסט הראשי, מציינים הגדרה של signedTokensOptions בקטע cdnPolicy של הניתוב בקובץ ה-YAML.

      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: השם של רשימת ההשמעה הראשית (M3U8) בפורמט HLS או של קובץ המניפסט (MPD) בפורמט DASH. מידע נוסף זמין במאמר בנושא התאמת נתיבים.
    • 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. כדי לעדכן את השירות, מייבאים את ההגדרה של Media CDN מקובץ ה-YAML. משתמשים בפקודה gcloud edge-cache services import.

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

כך משלימים את תהליך ההפעלה של אימות באמצעות טוקן יחיד.

כדי להגדיר אימות באמצעות שני אסימונים, עוברים לקטעים הבאים.

הגדרת כלל הניתוב הראשי של קובץ המניפסט ליצירת טוקנים לטווח ארוך

מגדירים את Media CDN כך שיפיק טוקנים לפרקי זמן ארוכים בנתיב המניפסט הראשי. כדי ליצור את הטוקנים האלה, צריך לבחור אם להשתמש בקובצי Cookie או בפרמטרים של שאילתות בכתובות URL.

המסוף

משנים את כלל הנתיב הראשי במניפסט כך ש-Media CDN יוכל ליצור טוקנים ארוכי טווח בנתיב:

  1. בדף עריכת כלל ניתוב, לוחצים על הגדרות מתקדמות.
  2. בשדה Type (סוג), בוחרים באפשרות CDN policy (מדיניות CDN).
  3. מרחיבים את האפשרות אימות באמצעות שני טוקנים.
  4. בקטע Signature action (פעולת חתימה), בוחרים באפשרות Generate new long-duration token (יצירת טוקן חדש לטווח ארוך).
  5. בקטע סוג החתימה, בוחרים באחת מהאפשרויות הבאות:

    • באמצעות קובצי Cookie (לסטרימינג ב-HLS וב-DASH): מגדיר את Media CDN להחזרת Edge-Cache-Cookie עם תגובת המניפסט הראשית.
    • באמצעות פרמטרים של שאילתות בכתובת URL של מניפסט HLS (ללא קובצי Cookie): המערכת מגדירה את Media CDN כך שתבצע מניפולציה במניפסט הראשי של HLS על ידי הוספת טוקן ארוך טווח לכל כתובת URL.
  6. בקטע Generate new long-duration token (יצירת טוקן חדש לטווח ארוך):

    1. כדי לציין קבוצת מפתחות לטוקנים לטווח ארוך, לוחצים על Select a keyset (בחירת קבוצת מפתחות) ובוחרים את קבוצת המפתחות של הטוקנים לטווח ארוך.

      לחלופין, לוחצים על Create new keyset (יצירת ערכת מקשים חדשה) כדי ליצור ערכת מקשים חדשה עם המקשים שאתם צריכים. ואז בוחרים אותה.

    2. בקטע Token TTL (משך החיים של האסימון), מציינים בשניות את משך החיים המקסימלי של האסימון לטווח ארוך.

    3. בקטע Signature type, אם בחרתם באפשרות via cookies, בקטע Copied parameters בוחרים את הפרמטרים שרוצים ש-Media CDN יעתיק מהאסימון לטווח קצר לאסימון לטווח ארוך. כדי להשתמש באימות באמצעות שני אסימונים, צריך לבחור באפשרות PathGlobs (או באחד מהכינויים שלה, acl או paths) או באפשרות URLPrefix.

      אם בחרתם באפשרות via HLS manifest URL query parameters (באמצעות פרמטרים של שאילתות בכתובות URL של מניפסט HLS), בקטע Token query parameter (פרמטר של שאילתת טוקן), משאירים את ערך ברירת המחדל, 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.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

פרמטרים של שאילתות בכתובות 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: זמן התפוגה של האסימון לטווח ארוך, לדוגמה, 86400s לתקופת תפוגה של יום אחד.

בדוגמה הזו של הקוד מוטמעים השינויים הבאים:

  • addSignatures.actions: GENERATE_TOKEN_HLS_COOKIELESS: הגדרה של Media CDN כך שישנה את מניפסט ה-HLS הראשי על ידי הוספת טוקן עם משך ארוך לכל URI שמופיע בו.

  • 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

יוצרים כלל מסלול לפלייליסט של המדיה ולמסלול של הפלחים:

  1. בדף Edit Edge Cache service (עריכת שירות Edge Cache), בקטע Routing (ניתוב), לוחצים על כלל המארח שכולל את נתיב המניפסט הראשי.
  2. לוחצים על הוספת כלל ניתוב.
  3. בחלונית עריכת כלל ניתוב, בשדה עדיפות, מגדירים ערך שגדול מזה של מסלול המניפסט הראשי – לדוגמה, 2. ערכים גבוהים יותר מציינים עדיפות נמוכה יותר.
  4. בקטע תיאור, מזינים תיאור קצר שיעזור לזהות את הכלל ברשימת הכללים.
  5. מגדירים את השדות הבאים לפי ההצעה:

    • בחירת מקור: כמו בכלל הנתיב של המניפסט הראשי
    • הוספת תנאי התאמה: זהה לכלל של נתיב המניפסט הראשי
    • סוג: מדיניות CDN
    • מצב בקשה חתומה: נדרשים אסימונים
    • בחירת קבוצת מפתחות: זהה לטוקנים לטווח ארוך
    • אלגוריתם חתימה: זהה לזה של כלל הנתיב במניפסט הראשי
  6. מרחיבים את האפשרות אימות באמצעות שני טוקנים.

  7. בקטע פעולת חתימה, משאירים את ערך ברירת המחדל ללא.

  8. לוחצים על סיום ואז על שמירה.

פרמטרים של שאילתות בכתובות URL

  1. יוצרים כלל ניתוב לפלייליסט של המדיה.

    1. בדף Edit Edge Cache service (עריכת שירות Edge Cache), בקטע Routing (ניתוב), לוחצים על כלל המארח שכולל את נתיב המניפסט הראשי.
    2. לוחצים על הוספת כלל ניתוב.
    3. בחלונית עריכת כלל ניתוב, בשדה עדיפות, מגדירים ערך שגדול מהערך של מסלול המניפסט הראשי – לדוגמה, 2. ערכים גבוהים יותר מציינים עדיפות נמוכה יותר.
    4. בקטע תיאור, מוסיפים תיאור קצר שיעזור לזהות את הכלל ברשימת הכללים.
    5. מגדירים את השדות הבאים לפי ההצעה:

      • בחירת מקור: זהה לכלל של נתיב המניפסט הראשי
      • הוספת תנאי התאמה: זהה לכלל הניתוב של המניפסט הראשי
      • סוג: מדיניות CDN
      • מצב בקשה חתומה: נדרשים אסימונים
      • בחירת קבוצת מפתחות: זהה לטוקנים לטווח ארוך
      • אלגוריתם החתימה: זהה לזה של כלל הניתוב במניפסט הראשי
      • פרמטר של שאילתת טוקן: זהה לפרמטר של טוקנים לטווח ארוך
    6. מרחיבים את האפשרות אימות באמצעות שני טוקנים.

    7. בקטע פעולת חתימה, בוחרים באפשרות הפצת טוקן קיים עם משך זמן ארוך.

      האפשרות הזו מופעלת רק אחרי ש-Media CDN מאמת שהטוקן לטווח ארוך נוצר באמצעות סוג החתימה via HLS manifest URL query parameters (cookieless).

    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), יכול להיות שערכי ה-keysets הארוכים והקצרים יהיו שונים. אם אתם משתמשים בקובצי MPD דינמיים, קבוצות המפתחות הארוכות והקצרות צריכות להיות זהות.
  • signedRequestKeyset: LONG_KEYSET_NAME: ‫Media CDN משתמש במערך המפתחות לטווח ארוך כדי לאמת את קובץ ה-Cookie לטווח ארוך שסוכן משתמש מספק לבקשות של פלייליסטים של מדיה ושל פלחים של מדיה.

פרמטרים של שאילתות בכתובות URL

מוסיפים שתי הגדרות של מסלולים:

  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

פרמטרים של שאילתות בכתובות 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

יצירת טוקנים לטווח קצר בשרת האפליקציה

מידע על יצירת אסימונים זמין במאמר יצירת אסימונים.

החלת אמצעי הגנה מקיפים על התוכן

מומלץ להפעיל אימות מקור באופן הבא: