Usar autenticação de token duplo

Para aplicar a autenticação de token duplo quando os espectadores acessam um recurso de streaming, configure rotas separadas. Uma rota é uma configuração que corresponde às solicitações do Media CDN e direciona o tráfego HTTP para uma origem. O Media CDN é compatível com rotas para recursos de HTTP Live Streaming (HLS) ou Dynamic Adaptive Streaming over HTTP (DASH). Para mais informações sobre rotas no Media CDN, consulte Configurar rotas de serviço.

Para streams HLS, o Media CDN oferece suporte à autenticação de token duplo por meio de cookies e parâmetros de consulta de URL (sem cookies). Para streams DASH, o Media CDN oferece suporte apenas à autenticação de dois tokens baseada em cookies.

Nesta página, descrevemos como configurar rotas do Media CDN para ajudar a proteger conteúdo usando a autenticação de token duplo.

Antes de começar

Faça o seguinte:

  1. Para tokens de curta duração, escolha um dos seguintes algoritmos de assinatura:

    • Assinaturas Ed25519
    • Códigos de autenticação de mensagens baseados em hash de chave simétrica (HMACs)

    Só é possível ativar algoritmos de assinatura simétricos do HMAC para rotas configuradas para gerar novos tokens de longa duração. Recomendamos que você use assinaturas Ed25519 para ter o melhor desempenho e segurança e HMACs de chave simétrica somente quando necessário para compatibilidade com outras CDNs.

  2. Inclua as chaves necessárias em um recurso EdgeCacheKeyset.

    Os tokens precisam ser assinados ou verificados com chaves em um recurso EdgeCacheKeyset. O conjunto de chaves precisa incluir as chaves corretas do algoritmo de assinatura selecionado. A tabela a seguir descreve cada um dos algoritmos de assinatura e as chaves necessárias.

    Algoritmo de assinatura Chaves necessárias no conjunto de chaves
    Ed25519 Chaves públicas
    HMAC-SHA1 Chaves compartilhadas de validação
    HMAC-SHA256 Chaves compartilhadas de validação

    Como prática recomendada, faça dois conjuntos de chaves separados, um para tokens de curta duração e outro para tokens de longa duração.

    No entanto, se você estiver usando arquivos DASH e de descrição dinâmica de apresentação de mídia (MPD, na sigla em inglês), será necessário usar o mesmo conjunto de chaves para tokens de longa e curta duração.

  3. Para tokens de longa duração, escolha um dos seguintes formatos de token:

    • Cookies
    • Parâmetros de consulta do URL

Configurar tokens de curta duração

Dependendo do algoritmo de assinatura que você quer usar, configure tokens de curta duração usando uma das opções a seguir.

Assinatura Ed25519

  1. Gere uma chave privada:

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

    Substitua SSL_KEY_NAME por um nome de chave.

  2. Gere uma chave pública a partir da chave privada:

    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. Crie um novo conjunto de chaves com uma única chave pública:

    Console

    1. No console do Google Cloud, acesse a página Media CDN.

      Acesse Media CDN

    2. Clique na guia Conjuntos de chaves.

    3. Clique em Criar conjunto de chaves.

    4. Em Nome, insira um nome exclusivo de conjunto de chaves.

    5. Opcional: em Descrição, insira uma descrição para o conjunto de chaves.

    6. Opcional: clique em Adicionar rótulo e insira um ou mais pares de chave-valor para o conjunto de chaves.

    7. Clique em Adicionar chave pública e faça o seguinte:

      1. Em Código, insira um ID alfanumérico.
      2. Selecione Enter the value e especifique o valor codificado em base64 da sua chave pública Ed25519.
    8. Clique em Criar conjunto de chaves.

    gcloud

    Use o comando 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'
    

    Substitua:

    • SHORT_KEYSET_NAME: um nome de conjunto de chaves exclusivo, por exemplo, prod-vod-keyset.
    • SSL_PUBLIC_KEY_NAME: o nome da sua chave pública SSL
    • SSL_PUBLIC_KEY_VALUE: o valor da chave pública SSL.

    Para revisar as chaves associadas ao conjunto de chaves, use o comando gcloud edge-cache keysets describe.

    gcloud edge-cache keysets describe prod-vod-keyset
    

    O resultado será assim:

    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 de chave simétrica

  1. Se você nunca usou o Secret Manager, configure o Secret Manager.

  2. Crie um secret.

  3. Adicione uma versão do secret no formato binário.

  4. Conceda o papel de acesso do Secret Manager (roles/secretmanager.secretAccessor) à conta de serviço do Media CDN:

    Console

    1. No console do Google Cloud, acesse a página Secret Manager.

      Acessar o Secret Manager

    2. Marque a caixa de seleção ao lado do nome do secret.

    3. Clique em Mostrar painel de informações.

    4. No painel de informações, clique em Adicionar participante.

    5. Em Novos principais, insira a conta de serviço do Media CDN neste formato:

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

      Substitua PROJECT_NUMBER pelo número do projeto.

    6. Em Selecionar um papel, escolha Secret Manager e depois Acessador de secrets do Secret Manager.

    gcloud

    Use o comando 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"
    

    Substitua:

    • PROJECT_NUMBER: o ID do seu projeto
    • SECRET_ID: o ID do secret
  5. Acesse as versões do secret e copie os caminhos dele, incluindo os números de versão.

  6. Crie um novo conjunto de chaves com os secrets compartilhados em uma chave compartilhada de validação:

    Console

    1. No console do Google Cloud, acesse a página Media CDN.

      Acesse Media CDN

    2. Clique na guia Conjuntos de chaves.

    3. Clique em Criar conjunto de chaves.

    4. Em Nome, insira um nome exclusivo de conjunto de chaves.

    5. Opcional: em Descrição, insira uma descrição para o conjunto de chaves.

    6. Opcional: clique em Adicionar rótulo e insira um ou mais pares de chave-valor para o conjunto de chaves.

    7. Para especificar uma chave compartilhada de validação, clique em Adicionar chave compartilhada de validação e faça o seguinte:

      1. Em Secret, selecione um secret da lista, insira um secret manualmente especificando o ID do recurso ou crie um novo secret e selecione-o.

      2. Em Versão do secret, selecione uma versão da lista ou crie e selecione uma nova versão do secret.

    8. Clique em Criar conjunto de chaves.

    gcloud

    Use o comando 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'
    

    Substitua:

    • SHORT_KEYSET_NAME: um nome exclusivo para o conjunto de chaves, por exemplo, prod-vod-keyset.
    • PROJECT_NUMBER: ID do projeto
    • SECRET_ID: o ID do recurso do secret
    • KEY_VERSION: a versão do secret que você quer usar.

Configurar tokens de longa duração

As chaves gerenciadas pelo Google têm escopo por conjunto de chaves. Isso significa que dois conjuntos de chaves diferentes têm chaves diferentes gerenciadas pelo Google. As chaves gerenciadas pelo Google são trocadas regularmente.

Configure tokens de longa duração usando uma das seguintes opções:

Console

  1. Crie ou modifique um conjunto de chaves.

  2. Na seção Chaves, selecione Usar a chave gerenciada pelo Google para a autenticação de dois tokens.

gcloud e YAML

Use uma das seguintes opções:

  • Crie uma chave de assinatura gerenciada pelo Google:

    gcloud edge-cache keysets create LONG_KEYSET_NAME \
        --public-key='id=google-managed-key,managed=true'
    

    Substitua LONG_KEYSET_NAME por um nome de chave, por exemplo, prod-vod-keyset-long.

  • Modificar um conjunto de chaves:

    1. Exporte o conjunto de chaves para um arquivo YAML. Use o comando gcloud edge-cache keysets export.

      gcloud edge-cache keysets export LONG_KEYSET_NAME \
         --destination=prod-vod-keyset-long.yaml
      
    2. Em um editor de texto ou nas ferramentas de gerenciamento de configuração, edite a configuração do conjunto de chaves para que ela seja semelhante a esta:

      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. Importe o conjunto de chaves editado. Use o comando gcloud edge-cache keysets import (em inglês).

      gcloud edge-cache keysets import LONG_KEYSET_NAME \
          --source=prod-vod-keyset-long.yaml
      

É possível incluir chaves públicas adicionais no conjunto de chaves de token de longa duração. O conjunto de chaves pode ter no máximo três chaves públicas. Na prática, isso significa que o conjunto de chaves pode ter duas chaves gerenciadas pelo usuário e uma gerenciada pelo Google.

O Media CDN sempre usa a chave gerenciada pelo Google para gerar tokens. As chaves gerenciadas pelo usuário só podem ser usadas para verificação.

A inclusão de outras chaves públicas é útil para permitir que o aplicativo do player acesse playlists e segmentos de mídia usando solicitações assinadas geradas pelas suas chaves privadas.

Configurar a troca de tokens

Nesta seção, mostramos como configurar a troca de tokens criando várias rotas. Uma rota permite otimizar o comportamento com base no tipo de conteúdo, nos atributos do cliente e nos requisitos de atualização. Nos exemplos a seguir, usamos rotas para configurar a troca de tokens para cada parte de uma solicitação de mídia.

Configurar a rota do manifesto principal para exigir tokens de curta duração

Configure o Media CDN para exigir tokens de curta duração na rota principal do manifesto.

Console

Ative a autenticação de token de curta duração na rota de manifesto principal:

  1. No console do Google Cloud, acesse a página Media CDN.

    Acesse Media CDN

  2. Para abrir a página Detalhes de um serviço, clique no nome dele.

  3. Para mudar para o modo de edição, clique no botão Editar.

  4. Para navegar até a seção Roteamento, clique em Próxima.

  5. Expanda a regra de host em que você quer adicionar a regra de rota do manifesto principal.

  6. Clique em Adicionar regra de rota.

    Como alternativa, para editar uma regra de trajeto, clique em Editar na respectiva linha.

  7. No painel Editar regra de rota, em Prioridade, defina um valor, por exemplo, 1.

  8. Em Descrição, forneça uma breve descrição que ajude a identificar a regra na lista de regras.

  9. Na seção Correspondência, clique em Adicionar uma condição de correspondência. Em seguida, faça o seguinte:

    1. Em Tipo de correspondência, selecione Correspondência do modelo de caminho.
    2. Em Correspondência de caminho, especifique os nomes ou modelos de caminho da playlist principal de HLS (M3U8) ou do arquivo de manifesto DASH (MPD). Para mais informações, consulte Correspondência de caminho.
  10. Clique em Configurações avançadas.

  11. Na seção Ação de rota, clique em Adicionar um item.

  12. Em Tipo, selecione Política de CDN.

  13. Na seção Solicitação assinada, em Modo de solicitação assinada, selecione Exigir tokens.

  14. Na seção Conjunto de chaves de solicitação assinada, faça o seguinte:

    1. Para especificar o conjunto de chaves para tokens de curta duração, clique em Selecionar um conjunto de chaves e selecione o conjunto de chaves de token de curta duração.

      Como alternativa, para criar um novo conjunto de chaves que tenha as chaves necessárias, clique em Criar novo conjunto de chaves. Em seguida, selecione-o.

    2. Em Algoritmo de assinatura, selecione Ed25519 usando chaves públicas.

    3. Em Parâmetro de consulta do token, mantenha o valor padrão, edge-cache-token.

      Como alternativa, se você planeja usar parâmetros de consulta do URL do manifesto HLS em vez de cookies para autenticação, especifique o parâmetro em que os tokens de solicitação serão armazenados.

    4. Em Tempo máximo de vida, especifique, em segundos, a vida útil máxima dos tokens de solicitação recebidos.

  15. Para salvar as alterações na seção Ação de rota, clique em Concluído.

  16. Para salvar as alterações na regra de rota, clique em Salvar.

gcloud e YAML

  1. Exporte a configuração do Media CDN para um arquivo YAML. Use o comando gcloud edge-cache services export.

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

    Substitua:

    • SERVICE_NAME: o nome do serviço;
    • FILENAME : o nome do arquivo YAML
  2. Para ativar a autenticação de token de curta duração na regra de rota do manifesto principal, especifique uma configuração signedTokensOptions na seção cdnPolicy da rota do arquivo 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
    

    Substitua:

    • ROUTE_NAME: o nome da regra de rota.
    • ROUTE_DESCRIPTION: uma descrição da regra de rota.
    • ORIGIN_NAME: o nome da origem.
    • MANIFEST_OR_PLAYLIST: o nome da playlist principal de HLS (M3U8) ou do arquivo de manifesto DASH (MPD). Para mais informações, consulte Correspondência de caminho.
    • SHORT_KEYSET_NAME: o nome do conjunto de chaves a ser usado para tokens de curta duração.
    • SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME: o prazo de validade de solicitações assinadas, por exemplo, 600s. Para mais informações, consulte signedRequestMaximumExpirationTtl.
    • Opcional: SHORT_TOKEN_NAME: o parâmetro de consulta em que o token curto é encontrado. O valor padrão é edge-cache-token. Veja mais informações em SignedTokenOptions.

    Ao usar HMACs de chave simétrica, na seção signedTokenOptions, anexe allowedSignatureAlgorithms com o valor HMAC_SHA_256:

           allowedSignatureAlgorithms:
           - HMAC_SHA_256
    
  3. Para atualizar o serviço, importe a configuração do Media CDN do arquivo YAML. Use o comando gcloud edge-cache services import.

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

Isso conclui o processo de ativação da autenticação de token único.

Para configurar a autenticação de token duplo, prossiga para as seções a seguir.

Configurar a regra de rota do manifesto principal para gerar tokens de longa duração

Configure o Media CDN para gerar tokens de longa duração na rota principal do manifesto. Escolha cookies ou parâmetros de consulta do URL para gerar esses tokens.

Console

Modifique a regra de rota do manifesto principal para que o Media CDN possa gerar tokens de longa duração no trajeto:

  1. Na página Editar regra de rota, clique em Configurações avançadas.
  2. Em Tipo, selecione Política de CDN.
  3. Expanda Autenticação de token duplo.
  4. Em Ação de assinatura, selecione Gerar novo token de longa duração.
  5. Em Tipo de assinatura, selecione uma das seguintes opções:

    • via cookies (para streaming HLS e DASH): configura o CDN de mídia para retornar um Edge-Cache-Cookie com a resposta do manifesto principal.
    • via parâmetros de consulta do URL do manifesto de HLS (sem cookies): configura o Media CDN para manipular o manifesto principal de HLS anexando um token de longa duração a cada URL.
  6. Na seção Gerar novo token de longa duração, faça o seguinte:

    1. Para especificar um conjunto de chaves para tokens de longa duração, clique em Selecionar um conjunto de chaves e selecione o conjunto de chaves de token de longa duração.

      Como alternativa, clique em Criar novo conjunto de chaves para criar um novo conjunto com as chaves necessárias. Em seguida, selecione-o.

    2. Em TTL do token, especifique, em segundos, a vida útil máxima do token de longa duração.

    3. Em Tipo de assinatura, se você selecionou a opção via cookies, na seção Parâmetros copiados, selecione os parâmetros que você quer que o Media CDN copie do token de curta duração para o de longa duração. Para usar a autenticação de dois tokens, selecione PathGlobs (ou um dos aliases, acl ou paths) ou URLPrefix.

      Se você selecionou a opção via parâmetros de consulta do URL do manifesto HLS, no Parâmetro de consulta do token, mantenha o valor padrão, edge-cache-token.

  7. Para salvar as alterações na seção Ação de rota, clique em Concluído.

  8. Para salvar as alterações na regra de rota, clique em Salvar.

    Uma mensagem vai aparecer perguntando se você quer criar os trajetos para playlists de mídia e segmentos de forma automática ou manual. Se você selecionar a opção automática, uma nova rota será criada para a assinatura de cookies e duas para a assinatura sem cookies. Se você selecionar a opção manual, prossiga para a próxima seção.

gcloud e YAML

Modifique a seção addSignatures da regra de rota do manifesto principal para que o Media CDN possa gerar tokens de longa duração na rota:

Cookies

          addSignatures:
            actions:
              - GENERATE_COOKIE
            keyset: LONG_KEYSET_NAME
            tokenTtl: TOKEN_EXPIRATION_TIME
            copiedParameters:
              - PathGlobs
              - SessionID

Substitua:

  • LONG_KEYSET_NAME: o nome do conjunto de chaves de token de longa duração

  • TOKEN_EXPIRATION_TIME: o prazo de validade do token de longa duração. Por exemplo, 86400s para um prazo de validade de um dia.

Este exemplo de código implementa as seguintes mudanças:

  • addSignatures.actions: GENERATE_COOKIE: configura o Media CDN para retornar um Edge-Cache-Cookie com a resposta principal do manifesto.

  • copiedParameters.PathGlobs: configura o Media CDN para copiar o PathGlobs do token de curta duração para o de longa duração. Para usar a autenticação de dois tokens, use copiedParameters.PathGlobs ou copiedParameters.URLPrefix. Para mais informações, consulte copiedParameters.

  • Opcional: copiedParameters.SessionID: configura o CDN de mídia para copiar o SessionID do token de curta duração para o de longa duração.

Quando a ação GENERATE_COOKIE é aplicada, o Media CDN retorna um cabeçalho Set-Cookie semelhante ao seguinte com a resposta do manifesto principal:

Set-Cookie: Edge-Cache-Cookie=PathGlobs=PATHS~SessionID=SESSION_ID~Expires=EXPIRATION~_GO=Generated~Signature=SIGNATURE

Parâmetros de consulta do URL

          addSignatures:
            actions:
              - GENERATE_TOKEN_HLS_COOKIELESS
            keyset: LONG_KEYSET_NAME
            tokenTtl: TOKEN_EXPIRATION_TIME
            copiedParameters:
              - PathGlobs
              - SessionID
            tokenQueryParameter: LONG_TOKEN_NAME

Substitua:

  • LONG_KEYSET_NAME: o nome do conjunto de chaves de longa duração

  • TOKEN_EXPIRATION_TIME: o prazo de validade do token de longa duração. Por exemplo, 86400s para um prazo de validade de um dia.

Este exemplo de código implementa as seguintes mudanças:

  • addSignatures.actions: GENERATE_TOKEN_HLS_COOKIELESS: configura o Media CDN para manipular o manifesto principal de HLS anexando um token de longa duração a cada URI presente.

  • copiedParameters.PathGlobs: configura o Media CDN para copiar o PathGlobs do token de curta duração para o de longa duração. Para usar a autenticação de dois tokens, use copiedParameters.PathGlobs ou copiedParameters.URLPrefix. Para mais informações, consulte copiedParameters.

  • Opcional: copiedParameters.SessionID: configura o Media CDN para copiar o SessionID do token de curta duração para o de longa duração.

  • Opcional: LONG_TOKEN_NAME: o parâmetro de consulta em que o token longo gerado será colocado. O valor padrão é edge-cache-token. Veja mais informações em tokenQueryParameter.

O arquivo de manifesto abaixo mostra a ação GENERATE_TOKEN_HLS_COOKIELESS aplicada:

#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

O Media CDN verifica o token de curta duração e gera e armazena o token de longa duração no parâmetro de consulta LONG_TOKEN_NAME.

Configurar a playlist de mídia e as rotas de segmentos para exigir tokens de longa duração

Configure as rotas de playlist de mídia e segmentos para exigir tokens de longa duração.

Console

Cookies

Crie uma regra de rota para a playlist de mídia e a rota de segmentos:

  1. Na página Editar serviço de armazenamento em cache de borda, na seção Roteamento, clique na regra de host que tem a rota de manifesto principal.
  2. Clique em Adicionar regra de rota.
  3. No painel Editar regra de rota, em Prioridade, defina um valor maior que o da rota do manifesto principal, por exemplo, 2. Valores mais altos indicam prioridade mais baixa.
  4. Em Descrição, forneça uma breve descrição que ajude a identificar a regra na lista de regras.
  5. Defina os seguintes campos conforme sugerido:

    • Selecionar uma origem: igual à regra de rota do manifesto principal.
    • Adicionar uma condição de correspondência: igual à regra de rota do manifesto principal.
    • Tipo: política de CDN
    • Modo de solicitação assinada: Exigir tokens
    • Selecionar um conjunto de chaves: o mesmo que para tokens de longa duração.
    • Algoritmo de assinatura: igual à regra de rota do manifesto principal.
  6. Expanda Autenticação de token duplo.

  7. Em Ação de assinatura, retenha o valor padrão Nenhuma.

  8. Clique em Concluído e depois em Salvar.

Parâmetros de consulta do URL

  1. Crie uma regra de rota para a playlist de mídia.

    1. Na página Editar serviço de armazenamento em cache de borda, na seção Roteamento, clique na regra de host que tem a rota de manifesto principal.
    2. Clique em Adicionar regra de rota.
    3. No painel Editar regra de rota, em Prioridade, defina um valor maior que o da rota do manifesto principal, por exemplo, 2. Valores mais altos indicam prioridade mais baixa.
    4. Em Descrição, forneça uma breve descrição que ajude a identificar a regra na lista de regras.
    5. Defina os seguintes campos conforme sugerido:

      • Selecionar uma origem: o mesmo da regra de rota do manifesto principal.
      • Adicionar uma condição de correspondência: igual à regra de rota do manifesto principal.
      • Tipo: política de CDN
      • Modo de solicitação assinada: Exigir tokens
      • Selecionar um conjunto de chaves: o mesmo que para tokens de longa duração.
      • Algoritmo de assinatura: o mesmo da regra de rota do manifesto principal.
      • Parâmetro de consulta do token: igual aos tokens de longa duração.
    6. Expanda Autenticação de token duplo.

    7. Em Ação de assinatura, selecione Propagar token de longa duração.

      Essa opção será ativada somente depois que o Media CDN verificar se o token de longa duração foi gerado usando o tipo de assinatura via parâmetros de consulta de URL do manifesto HLS (sem cookies).

    8. Em Parâmetro de consulta do token, mantenha o valor padrão, edge-cache-token.

    9. Clique em Concluído e depois em Salvar.

  2. Crie uma regra de rota para segmentos de mídia.

    Esse é o trajeto das playlists de mídia, mas com as seguintes diferenças principais:

    • Em Prioridade, defina um valor maior que o da regra de rota da playlist de mídia, por exemplo, 3.
    • Em Descrição, forneça uma breve descrição que ajude a identificar a regra na lista de regras.
    • Na seção Autenticação de token duplo, para Ação de assinatura, retenha o valor padrão Nenhum.

gcloud e YAML

Edite o arquivo YAML:

Cookies

Configure a playlist de mídia e os segmentos para exigir cookies de longa duração:

    - 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

Substitua SEGMENTS_ROUTE_DESCRIPTION por uma descrição da rota.

Este exemplo de código implementa as seguintes mudanças:

  • priority: 2: a prioridade da rota. Valores mais altos indicam menor prioridade. Como a rota das playlists de mídia e dos segmentos de mídia corresponde a qualquer nome de arquivo que termine em .m3u8, a prioridade da rota precisa ser menor que aquela que você criou anteriormente para o manifesto principal.
  • signedRequestMode: REQUIRE_TOKENS: aplica tokens a playlists de mídia e segmentos de mídia. Se você estiver usando arquivos estáticos de descrição de apresentação de mídia (MPD, na sigla em inglês), os conjuntos de chaves longos e curtos podem ser diferentes. Se você estiver usando arquivos MPD dinâmicos, os conjuntos de chaves longos e curtos precisarão ser os mesmos.
  • signedRequestKeyset: LONG_KEYSET_NAME: o Media CDN usa o conjunto de chaves de longa duração para validar o cookie de longa duração fornecido por um user agent para solicitações de segmentos de mídia e playlists de mídia.

Parâmetros de consulta do URL

Adicione duas configurações de rota:

  1. Configure as rotas do manifesto de mídia HLS para propagar tokens de longa duração:

       - 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
    

    Substitua PLAYLIST_ROUTE_DESCRIPTION por uma descrição da rota.

    Este exemplo de código implementa as seguintes mudanças:

    • priority: 2: a prioridade da rota. Valores mais altos indicam prioridade mais baixa. Como a rota das playlists de mídia corresponde a qualquer nome de arquivo que termine em .m3u8, a prioridade dela precisa ser menor que a rota criada anteriormente para o manifesto principal.
    • signedRequestMode: REQUIRE_TOKENS: aplica tokens a playlists de mídia e segmentos de mídia. Se você estiver usando arquivos estáticos de descrição de apresentação de mídia (MPD, na sigla em inglês), os conjuntos de chaves longos e curtos podem ser diferentes. Se você estiver usando arquivos MPD dinâmicos, os conjuntos de chaves longos e curtos precisarão ser os mesmos.
    • signedRequestKeyset: LONG_KEYSET_NAME: o Media CDN usa o conjunto de chaves de longa duração para validar o cookie de longa duração fornecido por um user agent para solicitações de segmentos de mídia e playlists de mídia.
    • addSignatures.actions: PROPAGATE_TOKEN_HLS_COOKIELESS: configura a CDN de mídia para copiar o token de longa duração para URIs do segmento de mídia nas playlists de mídia.
  2. Configure as rotas do segmento para exigir tokens de longa duração:

       - 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
    

    Substitua SEGMENTS_ROUTE_DESCRIPTION por uma descrição da rota.

    Este exemplo de código implementa as seguintes mudanças:

    • priority: 3: a prioridade da rota. Valores mais altos indicam prioridade mais baixa. A prioridade dessa rota precisa ser menor do que a criada anteriormente para as playlists de mídia.
    • signedRequestMode: REQUIRE_TOKENS: aplica tokens a playlists de mídia e segmentos de mídia.
    • signedRequestKeyset: LONG_KEYSET_NAME: o Media CDN usa o conjunto de chaves de longa duração para validar o token assinado de longa duração fornecido por um user agent para solicitações de segmento de mídia e playlist de mídia.

Exemplo: arquivo de configuração

O exemplo de código a seguir mostra um arquivo de configuração concluído:

Cookies

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

Parâmetros de consulta do 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

Gerar tokens de curta duração no servidor do aplicativo

Para informações sobre como gerar tokens, consulte Gerar tokens.

Aplicar proteções de conteúdo de defesa em profundidade

Como prática recomendada, ative a autenticação de origem da seguinte maneira: