Usar solicitações assinadas

Para criar uma solicitação assinada, escreva uma string que inclua parâmetros que descrevam o conteúdo que você quer proteger e o prazo de validade do valor assinado. Depois, inclua a string composta na solicitação. Em seguida, o Media CDN verifica se a solicitação assinada é válida antes de agir.

Requisitos de solicitação assinados

As solicitações assinadas precisam atender aos seguintes requisitos:

  • Tenha um método HTTP GET, HEAD ou OPTIONS. Outros métodos não são compatíveis.

  • Defina um prazo de validade no futuro. Devido a possíveis diferenças na sincronização do relógio, bem como às condições da rede do cliente (por exemplo, desconexões e novas tentativas), recomendamos definir carimbos de data/hora no futuro para não menos que um minuto ou menos que a duração do stream de vídeo, o que for maior.

  • Ter uma assinatura que possa ser verificada por uma chave ou um secret em um EdgeCacheKeyset.

Não é possível assinar outros métodos HTTP, como solicitações POST, PUT ou DELETE. Se você precisar emitir URLs assinados para uploads voltados para o usuário, consulte a documentação do Cloud Storage para URLs assinados.

Considerações sobre segurança

O Media CDN valida todas as solicitações que correspondem a uma rota configurada com um cdnPolicy.signedRequestMode de REQUIRE_SIGNATURES ou REQUIRE_TOKENS.

A tabela a seguir explica os cenários em que o Media CDN valida uma solicitação:

A solicitação tem uma assinatura Assinatura válida? signedRequestMode Comportamento Código de resposta
No N/A REQUIRE_SIGNATURES ou REQUIRE_TOKENS Solicitações sem assinaturas ou tokens são tratadas como se a assinatura fosse inválida. HTTP 403
Sim No REQUIRE_SIGNATURES ou REQUIRE_TOKENS Uma assinatura ou um token será considerado inválido se tiver expirado ou tiver um URL incompatível ou uma chave incorreta. Assinaturas ou tokens inválidos são rejeitados na borda da CDN. HTTP 403
Sim Sim REQUIRE_SIGNATURES ou REQUIRE_TOKENS Valide uma assinatura ou um token e a resposta com conteúdo do cache ou uma busca da origem. HTTP 200
Sim Sim Nenhum ou DISABLED Nenhuma validação é realizada, e uma resposta é exibida diretamente ao usuário. HTTP 200
Sim No Nenhum ou DISABLED Nenhuma validação é realizada, e uma resposta é exibida diretamente ao usuário. HTTP 200

Quando o aplicativo detectar uma assinatura inválida, verifique se ele responde com um código de resposta HTTP 403 (Forbidden). Os códigos de resposta HTTP 403 não são armazenáveis em cache.

Configurar solicitações assinadas

As seções a seguir detalham como configurar, assinar e validar solicitações assinadas.

Geração de chaves

Crie as chaves que o Media CDN usa para assinar solicitações.

Criar um conjunto de chaves

Crie o conjunto de chaves que o Media CDN usa para solicitações assinadas.

Exigir solicitações assinadas

Para permitir que apenas solicitações assinadas acessem um recurso, anexe uma lista de chaves a uma rota e defina signedRequestMode como um dos seguintes:

  • REQUIRE_SIGNATURES para solicitações assinadas que não usam tokens.

  • REQUIRE_TOKENS para solicitações assinadas usando tokens.

A ativação de solicitações assinadas em uma rota garante que todas elas sejam assinadas ou apresentem um token. Solicitações sem uma assinatura válida (como nome de chave inválida, assinatura ou token expirado, assinatura incompatível etc.) falham.

Um EdgeCacheKeyset pode conter várias chaves para permitir a rotação de chaves. Solicitações válidas assinadas com qualquer chave listada são aceitas, e as chaves são testadas em ordem. Para mais informações sobre a rotação de chaves, consulte Alternar chaves secretas.

Quando signedRequestMode é definido como REQUIRE_SIGNATURES ou REQUIRE_TOKENS, o Media CDN valida as ocorrências e ausências do cache. Isso inclui todas as solicitações feitas à origem.

Veja a seguir um exemplo de configuração do Media CDN que aplica solicitações assinadas em um determinado PathMatcher (rota):

gcloud edge-cache services describe prod-media-service
Saída:
...
  routeAction:
    cdnPolicy:
      cacheMode: CACHE_ALL_STATIC
      signedRequestMode: REQUIRE_SIGNATURES
      signedRequestKeyset: prod-vod-keyset

Para informações sobre como criar tokens para solicitações assinadas, consulte Gerar tokens.

Para desativar a assinatura de solicitação, defina signedRequestMode como DISABLED e exclua a referência ao signedRequestKeyset.

Validar solicitações na origem

Quando uma rota é configurada com um modo de assinatura de REQUIRE_SIGNATURES, o Media CDN valida se cada solicitação correspondente tem uma assinatura válida. A falta de uma assinatura é tratada como uma assinatura inválida para essas rotas.

Para evitar casos em que a assinatura está configurada incorretamente e em que um usuário tenta acessar sua origem diretamente, recomendamos que você valide as solicitações assinadas na origem também. Uma abordagem de defesa profunda para proteção de conteúdo ajuda a evitar acesso e download não autorizados do seu conteúdo licenciado e pago.

Para métodos de assinatura com base em URL, em que a assinatura faz parte dos parâmetros de consulta ou é incorporada como um componente de caminho do URL, a assinatura e os parâmetros relacionados são removidos do URL antes que a solicitação seja enviada à origem. Isso evita que a assinatura cause problemas de roteamento quando a origem estiver processando a solicitação. Para validar essas solicitações, inspecione o cabeçalho da solicitação x-client-request-url, que inclui o URL original (assinado) da solicitação do cliente antes da remoção dos componentes assinados.

Para validar solicitações na origem, use o mesmo código de validação como parte dos endpoints de assinatura de solicitações, o que também ajuda a reduzir a incompatibilidade e os problemas causados pela rotação de chaves.

Alternar chaves

Como prática recomendada, alterne ou atualize os secrets usados pelo Media CDN com frequência. Recomendamos alternar as chaves a cada 30 a 60 dias, mas isso não é estritamente obrigatório.

A seguir