Panoramica degli URL e dei cookie firmati

Gli URL firmati da Cloud CDN e i cookie firmati consentono di fornire risposte dalle cache distribuite a livello globale di Google Cloud, anche quando è necessaria l'autorizzazione delle richieste.

Gli URL firmati e i cookie firmati da Cloud CDN raggiungono obiettivi simili: entrambi controllano l'accesso ai contenuti memorizzati nella cache. Se vuoi pubblicare contenuti provenienti dalle cache distribuite a livello globale di Google Cloud e stai decidendo tra URL o cookie firmati, prendi in considerazione il confronto tra i casi d'uso seguenti.

URL firmati

Un URL firmato è un URL che fornisce un'autorizzazione e un tempo limitati per effettuare una richiesta.

Casi d'uso

In alcuni casi, potresti non voler richiedere ai tuoi utenti di avere un Account Google per accedere ai contenuti di Cloud CDN, ma vuoi comunque controllare l'accesso utilizzando la logica specifica dell'applicazione.

In genere, questo caso d'uso consiste nel fornire un URL firmato a un utente, che concede all'utente l'accesso in lettura a tale risorsa per un periodo di tempo limitato. Devi specificare una scadenza quando crei l'URL firmato. Chiunque conosca l'URL può accedere alla risorsa fino al raggiungimento della data di scadenza o alla rotazione della chiave utilizzata per firmare l'URL.

Utilizza gli URL firmati nei seguenti casi:

  • Devi limitare l'accesso ai singoli file, ad esempio un download di installazione.

  • Gli utenti utilizzano applicazioni client che non supportano i cookie.

Come funzionano gli URL firmati

Gli URL firmati consentono a un client di accedere temporaneamente a una risorsa privata senza richiedere un'autorizzazione aggiuntiva. Per raggiungere questo obiettivo, gli elementi selezionati di una richiesta vengono sottoposti ad hashing e firmati in modo crittografico utilizzando una chiave fortemente casuale generata da te.

Quando una richiesta utilizza l'URL firmato che hai fornito, la richiesta viene considerata autorizzata a ricevere i contenuti richiesti. Quando Cloud CDN riceve una richiesta con una firma non valida per un servizio abilitato, la richiesta viene rifiutata e non viene mai inoltrata al tuo backend per la gestione.

In genere, un URL firmato può essere utilizzato da chiunque lo abbia. Tuttavia, un URL firmato di solito è destinato solo all'utilizzo da parte del client a cui è stato fornito. Per ridurre il rischio di utilizzo di URL da parte di client diversi, gli URL firmati scadono alla data che hai scelto. Per ridurre al minimo il rischio che un URL firmato venga condiviso, impostalo in modo che scada il prima possibile.

Modalità di firma degli URL

Prima di poter firmare gli URL, crea una o più chiavi di crittografia su un servizio di backend, un bucket di backend o entrambi. Successivamente potrai firmare e sottoporre ad hashing crittografico un URL utilizzando l'interfaccia a riga di comando di Google Cloud o il tuo codice.

Gestione degli URL firmati

Quando la gestione degli URL firmati è abilitata su un backend, Cloud CDN offre una gestione speciale alle richieste con URL firmati. In particolare, le richieste con un parametro di query Signature vengono considerate firmate. Quando tale richiesta viene ricevuta, Cloud CDN verifica quanto segue:

  1. Il metodo HTTP è GET, HEAD, OPTIONS o TRACE.
  2. Il parametro Expires è impostato su un'ora futura.
  3. La firma della richiesta corrisponde alla firma calcolata utilizzando la chiave denominata.

Se uno di questi controlli ha esito negativo, viene pubblicata una risposta 403 Forbidden. In caso contrario, la richiesta viene inviata al backend o pubblicata dalla cache. Le richieste OPTIONS e TRACE vengono sempre inviate direttamente tramite proxy al backend e non vengono gestite dalla cache. Tutte le richieste firmate valide per un particolare URL di base (la parte prima del parametro Expires) condividono la stessa voce della cache. Le risposte alle richieste firmate e non firmate non condividono le voci della cache. Le risposte vengono memorizzate nella cache e pubblicate fino alla scadenza che hai impostato.

I contenuti che richiedono richieste firmate sono spesso contrassegnati come non memorizzabili nella cache mediante l'intestazione Cache-Control. Per rendere tali oggetti compatibili con Cloud CDN senza richiedere modifiche al backend, Cloud CDN sostituisce l'intestazione Cache-Control quando risponde alle richieste con URL firmati validi. Cloud CDN considera i contenuti come memorizzabili nella cache e utilizza il parametro max-age impostato nella configurazione di Cloud CDN. La risposta pubblicata ha ancora le intestazioni Cache-Control che il backend ha generato.

L'URL restituito dall'interfaccia a riga di comando di Google Cloud o prodotto dal codice personalizzato può essere distribuito in base alle tue esigenze. Consigliamo di firmare solo gli URL HTTPS in quanto HTTPS fornisce un trasporto sicuro che impedisce l'intercettazione del componente firma dell'URL firmato. Analogamente, devi distribuire gli URL firmati tramite protocolli di trasporto sicuri come TLS/HTTPS.

Cookie firmati

Un cookie firmato è un cookie che fornisce autorizzazioni e tempo limitati per effettuare richieste di un insieme di file.

Casi d'uso

Utilizza i cookie firmati nei seguenti casi:

  • Devi fornire l'accesso a più file con restrizioni.

  • Ti consigliamo di evitare di modificare gli URL correnti.

  • Dovresti evitare di aggiornare gli URL ogni volta che aggiorni l'autorizzazione per accedere ai contenuti.

Streaming di contenuti multimediali con HLS e DASH

Se pubblichi contenuti video e audio utilizzando i protocolli HTTP Live Streaming (HLS) o Dynamic Adaptive Streaming over HTTP (DASH), di solito generi un file manifest che contiene un elenco di URL per i segmenti video e audio. Potresti avere più istanze di ogni segmento per fornire a un client diverse codifiche (codec, velocità in bit, risoluzione).

Anche se puoi utilizzare gli URL firmati da Cloud CDN per firmare e autorizzare l'accesso a ciascuno di questi URL, la generazione dinamica di tutte le possibili combinazioni per utente è onerosa e aumenta il carico di origine e la complessità dell'applicazione.

I cookie firmati sono progettati per risolvere questo problema. Puoi fornire all'utente un cookie firmato che lo autorizza ad accedere a qualsiasi contenuto che corrisponde a una norma (prefisso URL e data di scadenza) senza dover generare o firmare singolarmente i file manifest dei media. Puoi aggiornare l'accesso degli utenti periodicamente tramite l'API JavaScript fetch() durante la navigazione nelle pagine o in altri meccanismi di background nelle applicazioni native. La possibilità di aggiornare l'accesso degli utenti consente anche di utilizzare breve tempi di scadenza, rendendo più difficile la condivisione dei contenuti protetti.

Puoi inviare questi cookie agli utenti con più client browser e altri client di lingua HTTP, come ExoPlayer Google e iOSAV.

Download binari (giochi)

Analogamente allo streaming multimediale, se fornisci download di client di gioco, puoi suddividere grandi patch o dati di gioco multi-gigabyte in blocchi più piccoli per supportare la memorizzazione nella cache granulare e l'annullamento della convalida e la contemporaneità.

Tali blocchi sono in genere elencati in un file manifest. I cookie firmati consentono di autorizzare l'accesso a tali download agli utenti autenticati solo senza richiedere modifiche al file manifest e, come con gli URL firmati, senza rinunciare ai vantaggi della memorizzazione nella cache di Cloud CDN.

Come funzionano i cookie firmati

La configurazione e l'emissione di cookie firmati richiede tre passaggi:

  • Creazione di una chiave di firma per il servizio di backend specificato.
  • Creazione di un valore di cookie con il prefisso, la scadenza e il nome della chiave dell'URL consentiti e la firma crittografica.
  • Invio del cookie nel codice dell'applicazione.

Cloud CDN convalida questi cookie firmati quando sono inclusi con le richieste.

Puoi impedire agli utenti di eludere i controlli dei cookie firmati quando utilizzi un bucket Cloud Storage. Per farlo, limita l'accesso al bucket sottostante rimuovendo il ruolo allUsers e concedendo all'account di servizio Cloud CDN l'accesso in lettura al bucket.

Analogamente, le istanze delle macchine virtuali (VM) devono convalidare le firme in ogni richiesta firmata che pubblicano.

Avvertenze e limitazioni

  • Tu sei l'unico soggetto responsabile per qualsiasi consenso e conformità alla privacy richiesta per i cookie firmati. I cookie firmati vengono emessi e gestiti da te, non da Google.

  • Se utilizzi sia gli URL firmati che i cookie firmati per controllare l'accesso agli stessi file e un visualizzatore utilizza un URL firmato per richiedere un file, Cloud CDN determina se restituire il file al visualizzatore solo in base all'URL firmato. Cloud CDN considera i cookie firmati solo se l'URL non è firmato.

  • Se hai configurato il tuo servizio per le richieste firmate e l'URL include Signature come parametro di ricerca, Cloud CDN tenta di interpretare l'URL come URL firmato. Se Cloud CDN cerca di trattare il tuo URL come un URL firmato quando non lo intendi, probabilmente l'URL non è un URL firmato valido, quindi Cloud CDN lo rifiuta.

  • I browser e altri client in genere applicano limiti sulle dimensioni dei cookie (4 kB per cookie) e un conteggio totale di 50 per dominio, in base al documento RFC 6265. Considera il payload del cookie totale inviato dal suo dominio.

  • Vengono applicati limiti e restrizioni di Cloud CDN, tra cui un massimo di tre chiavi di richiesta firmate per backend.

  • Le richieste firmate non vengono addebitate in modo diverso rispetto a quelle Cloud CDN esistenti. Tuttavia, le richieste non riuscite (rifiutate), come quelle con firme scadute o non valide, comportano comunque costi per la ricerca nella cache.

Passaggi successivi