이중 토큰 인증 사용

뷰어가 스트리밍 리소스에 액세스할 때 이중 토큰 인증을 적용하려면 별도의 경로를 구성합니다. 경로는 Media CDN에 대한 요청과 일치하고 HTTP 트래픽을 원본으로 전달하는 구성입니다. Media CDN은 HTTP 라이브 스트리밍(HLS) 또는 HTTP 동적 적응형 스트리밍(DASH) 리소스의 경로를 지원합니다. Media CDN의 경로에 대한 자세한 내용은 서비스 경로 구성을 참조하세요.

HLS 스트림의 경우 Media CDN은 쿠키 및 URL 쿼리 매개변수(쿠키 없음)를 통해 이중 토큰 인증을 지원합니다. DASH 스트림의 경우 Media CDN은 쿠키 기반 이중 토큰 인증만 지원합니다.

이 페이지에서는 이중 토큰 인증을 사용하여 콘텐츠를 보호하도록 Media CDN 경로를 구성하는 방법을 설명합니다.

시작하기 전에

다음 단계를 따르세요.

  1. 단기 토큰의 경우 다음 서명 알고리즘 중 하나를 선택합니다.

    • Ed25519 서명
    • 대칭 키 해시 기반 메시지 인증 코드(HMAC)

    새 장기 토큰을 생성하도록 구성된 경로에만 대칭 HMAC 서명 알고리즘을 사용 설정할 수 있습니다. 최적의 성능 및 보안과 다른 CDN과의 호환성을 위해 필요한 경우에만 대칭 키 HMAC를 위해 Ed25519 서명을 사용하는 것이 좋습니다.

  2. EdgeCacheKeyset 리소스에 필수 키를 포함합니다.

    토큰은 EdgeCacheKeyset 리소스의 키로 서명하거나 확인해야 합니다. 키 세트에는 선택한 서명 알고리즘의 올바른 키가 포함되어야 합니다. 다음 표에서는 각 서명 알고리즘과 필수 키를 설명합니다.

    서명 알고리즘 키 세트에 필요한 키
    Ed25519 공개 키
    HMAC-SHA1 검증 공유 키
    HMAC-SHA256 검증 공유 키

    별도의 키 세트 두 개를 만드는 것이 좋습니다. 하나는 단기 토큰용이고 다른 하나는 장기 토큰용입니다.

    그러나 DASH 및 동적 미디어 프레젠테이션 설명(MPD) 파일을 사용하는 경우 장기 토큰과 단기 토큰 모두에 동일한 키 세트를 사용해야 합니다.

  3. 장기 토큰의 경우 다음 토큰 형식 중 하나를 선택합니다.

    • 쿠키
    • 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. Google Cloud 콘솔에서 Media CDN 페이지로 이동합니다.

      Media CDN으로 이동

    2. 키 세트 탭을 클릭합니다.

    3. 키 세트 만들기를 클릭합니다.

    4. 이름에 고유한 키 세트 이름을 입력합니다.

    5. 선택사항: 설명에 키 세트에 대한 설명을 입력합니다.

    6. 선택사항: 라벨 추가를 클릭한 후 키 세트에 하나 이상의 키-값 쌍을 입력합니다.

    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. Media CDN 서비스 계정에 Secret Manager 액세스 역할(roles/secretmanager.secretAccessor)을 부여합니다.

    콘솔

    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 보안 비밀 접근자를 선택합니다.

    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. 키 세트 탭을 클릭합니다.

    3. 키 세트 만들기를 클릭합니다.

    4. 이름에 고유한 키 세트 이름을 입력합니다.

    5. 선택사항: 설명에 키 세트에 대한 설명을 입력합니다.

    6. 선택사항: 라벨 추가를 클릭한 후 키 세트에 하나 이상의 키-값 쌍을 입력합니다.

    7. 검증 공유 키를 지정하려면 검증 공유 키 추가를 클릭한 후 다음을 수행합니다.

      1. 보안 비밀에 대해 목록에서 보안 비밀을 선택하거나, 리소스 ID를 지정하여 보안 비밀을 수동으로 입력하거나, 새 보안 비밀을 만들어 선택합니다.

      2. 보안 비밀 버전의 경우 목록에서 버전을 선택하거나 새 보안 비밀 버전을 만들고 선택합니다.

    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 관리 키는 키 세트로 범위가 지정됩니다. 즉, 두 개의 서로 다른 키 세트에 서로 다른 Google 관리 키가 있습니다. Google 관리 키는 정기적으로 순환됩니다.

다음 옵션 중 하나를 사용하여 장기 토큰을 설정합니다.

콘솔

  1. 키 세트를 만들거나 수정합니다.

  2. 섹션에서 이중 토큰 인증에 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)으로 바꿉니다.

  • 기존 키 세트를 수정합니다.

    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
      

장기 토큰 키 세트에 추가 공개 키를 포함할 수 있습니다. 키 세트에는 공개 키가 최대 3개까지 포함될 수 있습니다. 실제로 키 세트에 사용자 관리 키 2개와 Google 관리 키 1개가 있을 수 있습니다.

Media CDN은 항상 Google 관리 키를 사용하여 토큰을 생성합니다. 사용자 관리 키는 인증에만 사용할 수 있습니다.

추가 공개 키를 포함하면 플레이어 애플리케이션이 자체 비공개 키로 생성된 서명된 요청을 사용하여 미디어 재생목록과 미디어 세그먼트에 액세스할 수 있습니다.

토큰 교환 구성

이 섹션에서는 여러 경로를 만들어 토큰 교환을 구성하는 방법을 보여줍니다. 경로를 사용하면 콘텐츠 유형, 클라이언트 속성, 최신 상태 요구사항에 따라 동작을 최적화할 수 있습니다. 다음 예시에서는 경로를 사용하여 미디어 요청의 각 부분에 대한 토큰 교환을 구성합니다.

단기 토큰을 요구하도록 기본 매니페스트 경로 구성

기본 매니페스트 경로에 단기 토큰을 요구하도록 미디어 CDN을 구성합니다.

콘솔

기본 매니페스트 경로에서 단기 토큰 인증을 사용 설정합니다.

  1. Google Cloud 콘솔에서 Media CDN 페이지로 이동합니다.

    Media CDN으로 이동

  2. 서비스의 세부정보 페이지를 열려면 서비스 이름을 클릭합니다.

  3. 수정 모드로 전환하려면 수정 버튼을 클릭합니다.

  4. 라우팅 섹션으로 이동하려면 다음을 클릭합니다.

  5. 기본 매니페스트 라우팅 규칙을 추가할 호스트 규칙을 펼칩니다.

  6. 라우팅 규칙 추가를 클릭합니다.

    또는 라우팅 규칙을 수정하려면 각 행에서 수정을 클릭합니다.

  7. 라우팅 규칙 수정 창에서 우선순위에 값을 설정합니다(예: 1).

  8. 설명에는 규칙 목록에서 규칙을 식별하는 데 도움이 되는 간략한 설명을 입력합니다.

  9. 일치 섹션에서 일치 조건 추가를 클릭합니다. 그런 후 다음 작업을 수행합니다.

    1. 일치 유형에서 경로 템플릿 일치를 선택합니다.
    2. 경로 일치의 경우 HLS 기본 재생목록(M3U8) 또는 DASH 매니페스트(MPD) 파일의 이름 또는 경로 템플릿을 지정합니다. 자세한 내용은 경로 일치를 참조하세요.
  10. 고급 구성을 클릭합니다.

  11. 라우팅 작업 섹션에서 항목 추가를 클릭합니다.

  12. 유형에서 CDN 정책을 선택합니다.

  13. 서명된 요청 섹션의 서명된 요청 모드에서 토큰 필요를 선택합니다.

  14. 서명된 요청 키 세트 섹션에서 다음을 수행합니다.

    1. 단기 토큰의 키 세트를 지정하려면 키 세트 선택을 클릭하고 단기 토큰 키 세트를 선택합니다.

      또는 필요한 키가 있는 새 키 세트를 만들려면 새 키 세트 만들기를 클릭합니다. 그런 다음 선택합니다.

    2. 서명 알고리즘에서 공개 키를 사용하여 Ed25519를 선택합니다.

    3. 토큰 쿼리 매개변수에서 기본값 edge-cache-token을 그대로 둡니다.

      또는 인증에 쿠키 대신 HLS 매니페스트 URL 쿼리 매개변수를 사용하려면 요청 토큰을 저장할 매개변수를 지정합니다.

    4. 최대 TTL(수명)에서 수신 요청 토큰의 최대 수명을 초 단위로 지정합니다.

  15. 라우팅 작업 섹션의 변경사항을 저장하려면 완료를 클릭합니다.

  16. 라우팅 규칙의 변경사항을 저장하려면 저장을 클릭합니다.

gcloud 및 YAML

  1. YAML 파일로 Media CDN 구성을 내보냅니다. 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
    

이렇게 하면 단일 토큰 인증을 사용 설정하는 프로세스가 완료됩니다.

이중 토큰 인증을 구성하려면 다음 섹션을 진행합니다.

장기 토큰을 생성하도록 기본 매니페스트 라우팅 규칙 구성

기본 매니페스트 경로에서 장기 토큰을 생성하도록 미디어 CDN을 구성합니다. 이러한 토큰을 생성하려면 쿠키 또는 URL 쿼리 매개변수를 선택합니다.

콘솔

Media CDN이 경로에 장기 토큰을 생성할 수 있도록 기본 매니페스트 라우팅 규칙을 수정합니다.

  1. 라우팅 규칙 수정 페이지에서 고급 구성을 클릭합니다.
  2. 유형에서 CDN 정책을 선택합니다.
  3. 이중 토큰 인증을 펼칩니다.
  4. 서명 작업에서 새 장기 토큰 생성을 선택합니다.
  5. 서명 유형에서 다음 옵션 중 하나를 선택합니다.

    • 쿠키 사용(HLS 및 DASH 스트리밍의 경우): 기본 매니페스트 응답이 있는 Edge-Cache-Cookie를 반환하도록 Media CDN을 구성합니다.
    • HLS 매니페스트 URL 쿼리 매개변수 사용(쿠키 없음): 각 URL에 장기 토큰을 추가하여 HLS 기본 매니페스트를 조작하도록 미디어 CDN을 구성합니다.
  6. 새 장기 토큰 생성 섹션에서 다음을 수행합니다.

    1. 장기 토큰의 키 세트를 지정하려면 키 세트 선택을 클릭하고 장기 토큰 키 세트를 선택합니다.

      또는 새 키 세트 만들기를 클릭하여 필요한 키가 있는 새 키 세트를 만듭니다. 그런 다음 선택합니다.

    2. 토큰 TTL에서 장기 토큰의 최대 수명을 초 단위로 지정합니다.

    3. 서명 유형쿠키 사용 옵션을 선택한 경우 복사된 매개변수 섹션에서 Media CDN이 단기 토큰에서 장기 토큰으로 복사할 매개변수를 선택합니다. 이중 토큰 인증을 사용하려면 PathGlobs(또는 별칭, acl 또는 paths) 또는 URLPrefix를 선택해야 합니다.

      HLS 매니페스트 URL 쿼리 매개변수 사용 옵션을 선택한 경우 토큰 쿼리 매개변수에 대해 기본값 edge-cache-token을 유지합니다.

  7. 라우팅 작업 섹션의 변경사항을 저장하려면 완료를 클릭합니다.

  8. 라우팅 규칙의 변경사항을 저장하려면 저장을 클릭합니다.

    미디어 재생목록 및 세그먼트의 경로를 자동 또는 수동으로 만들지 묻는 메시지가 표시됩니다. 자동 옵션을 선택하면 쿠키 서명에 대한 새 경로 하나와 쿠키 없는 서명에 대한 2개 경로가 생성됩니다. 수동 옵션을 선택한 경우 다음 섹션으로 진행합니다.

gcloud 및 YAML

Media CDN이 경로에서 장기 토큰을 생성할 수 있도록 기본 매니페스트 라우팅 규칙의 addSignatures 섹션을 수정합니다.

쿠키

          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를 단기 토큰에서 장기 토큰으로 복사하도록 미디어 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를 단기 토큰에서 장기 토큰으로 복사하도록 미디어 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 쿼리 매개변수에 저장합니다.

장기 토큰을 요구하도록 미디어 재생목록 및 세그먼트 경로 구성

장기 토큰을 요구하도록 미디어 재생목록과 세그먼트 경로를 구성합니다.

콘솔

쿠키

미디어 재생목록 및 세그먼트 경로에 대한 라우팅 규칙을 만듭니다.

  1. Edge 캐시 서비스 수정 페이지의 라우팅 섹션에서 기본 매니페스트 경로가 있는 호스트 규칙을 클릭합니다.
  2. 라우팅 규칙 추가를 클릭합니다.
  3. 라우팅 규칙 수정 창의 우선순위에서 기본 매니페스트 경로보다 큰 값을 설정합니다(예: 2). 값이 클수록 우선순위가 낮습니다.
  4. 설명에는 규칙 목록에서 규칙을 식별하는 데 도움이 되는 간략한 설명을 입력합니다.
  5. 제안된 대로 다음 필드를 설정합니다.

    • 원본 선택: 기본 매니페스트 라우팅 규칙과 동일
    • 일치 조건 추가: 기본 매니페스트 라우팅 규칙과 동일
    • 유형: CDN 정책
    • 서명된 요청 모드: 토큰 필요
    • 키 세트 선택: 장기 토큰과 동일
    • 서명 알고리즘: 기본 매니페스트 라우팅 규칙과 동일
  6. 이중 토큰 인증을 펼칩니다.

  7. 서명 작업에서 기본값 없음을 그대로 둡니다.

  8. 완료를 클릭한 다음 저장을 클릭합니다.

URL 쿼리 매개변수

  1. 미디어 재생목록의 라우팅 규칙을 만듭니다.

    1. Edge 캐시 서비스 수정 페이지의 라우팅 섹션에서 기본 매니페스트 경로가 있는 호스트 규칙을 클릭합니다.
    2. 라우팅 규칙 추가를 클릭합니다.
    3. 라우팅 규칙 수정 창의 우선순위에서 기본 매니페스트 경로보다 큰 값을 설정합니다(예: 2). 값이 클수록 우선순위가 낮습니다.
    4. 설명에는 규칙 목록에서 규칙을 식별하는 데 도움이 되는 간략한 설명을 입력합니다.
    5. 제안된 대로 다음 필드를 설정합니다.

      • 원본 선택: 기본 매니페스트 라우팅 규칙과 동일
      • 일치 조건 추가: 기본 매니페스트 라우팅 규칙과 동일
      • 유형: CDN 정책
      • 서명된 요청 모드: 토큰 필요
      • 키 세트 선택: 장기 토큰과 동일
      • 서명 알고리즘: 기본 매니페스트 라우팅 규칙과 동일
      • 토큰 쿼리 매개변수: 장기 토큰과 동일
    6. 이중 토큰 인증을 펼칩니다.

    7. 서명 작업에서 기존 장기 토큰 전파를 선택합니다.

      이 옵션은 Media CDN에서 HLS 매니페스트 URL 쿼리 매개변수(쿠키 없음) 사용 서명 유형을 사용하여 장기 토큰이 생성되었는지 확인한 후에만 사용 설정됩니다.

    8. 토큰 쿼리 매개변수에서 기본값 edge-cache-token을 그대로 둡니다.

    9. 완료를 클릭한 다음 저장을 클릭합니다.

  2. 미디어 세그먼트에 대한 라우팅 규칙을 만듭니다.

    이 경로는 미디어 재생목록의 경로와 비슷하지만 다음과 같은 주요 차이점이 있습니다.

    • 우선순위에 미디어 재생목록 라우팅 규칙보다 큰 값을 설정합니다(예: 3).
    • 설명에는 규칙 목록에서 규칙을 식별하는 데 도움이 되는 간략한 설명을 입력합니다.
    • 이중 토큰 인증 섹션의 서명 작업에서 기본값 없음을 유지합니다.

gcloud 및 YAML

YAML 파일을 편집합니다.

쿠키

장기간 쿠키를 요구하도록 미디어 재생목록 및 세그먼트를 구성하려면 다음 단계를 따르세요.

    - 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은 장기 키 세트를 사용하여 미디어 재생목록 및 미디어 세그먼트 요청에 사용자 에이전트가 제공한 장기 쿠키를 검증합니다.

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은 장기 키 세트를 사용하여 미디어 재생목록 및 미디어 세그먼트 요청에 사용자 에이전트가 제공한 장기 쿠키를 검증합니다.
    • addSignatures.actions: PROPAGATE_TOKEN_HLS_COOKIELESS: 장기 토큰을 미디어 재생목록의 미디어 세그먼트 URI에 복사하도록 Media CDN을 구성합니다.
  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은 장기 키 세트를 사용하여 미디어 재생목록 및 미디어 세그먼트 요청에 사용자 에이전트가 제공한 장기 서명 토큰을 검증합니다.

구성 파일 예시

다음 코드 샘플은 완료된 구성 파일을 보여줍니다.

쿠키

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

애플리케이션 서버에서 단기 토큰 생성

토큰 생성에 대한 자세한 내용은 토큰 생성을 참조하세요.

심층 방어 콘텐츠 보호 적용

다음과 같이 원본 인증을 사용 설정하는 것이 좋습니다.