Utilizzare gli URL firmati

Questa pagina fornisce una panoramica degli URL firmati e le istruzioni per utilizzarli con Cloud CDN. Gli URL firmati forniscono l'accesso alle risorse a tempo limitato a chiunque sia in possesso dell'URL, indipendentemente dal fatto che l'utente abbia un Account Google.

Un URL firmato è un URL che fornisce autorizzazioni e tempo limitati per effettuare una richiesta. Gli URL con firma contengono informazioni di autenticazione nelle rispettive stringhe di query, consentendo così agli utenti senza credenziali di eseguire azioni specifiche su una risorsa. Quando generi un URL firmato, specifichi un account utente o di servizio che deve avere l'autorizzazione sufficiente per effettuare la richiesta associata all'URL.

Dopo aver generato un URL firmato, chiunque lo possieda può utilizzarlo per eseguire azioni specifiche (ad esempio la lettura di un oggetto) entro un determinato periodo di tempo.

Gli URL firmati supportano anche un parametro URLPrefix facoltativo, che consente di fornire accesso a più URL in base a un prefisso comune.

Se vuoi limitare l'accesso a un prefisso URL specifico, ti consigliamo di utilizzare i cookie firmati.

Prima di iniziare

Prima di utilizzare gli URL firmati, segui questi passaggi:

  • Assicurati che Cloud CDN sia abilitato. Per istruzioni, consulta Utilizzo di Cloud CDN. Puoi configurare gli URL firmati su un backend prima di attivare Cloud CDN, ma non avranno alcun effetto finché Cloud CDN non sarà attivato.

  • Se necessario, esegui l'aggiornamento alla versione più recente di Google Cloud CLI:

    gcloud components update
    

Per una panoramica, consulta URL e cookie firmati.

Configura le chiavi per le richieste firmate

La creazione di chiavi per gli URL o i cookie firmati richiede diversi passaggi, descritti nelle sezioni seguenti.

Considerazioni sulla sicurezza

Cloud CDN non convalida le richieste nelle seguenti circostanze:

  • La richiesta non è firmata.
  • Il servizio di backend o il bucket di backend per la richiesta non ha attivato Cloud CDN.

Le richieste firmate devono sempre essere convalidate all'origine prima di inviare la risposta. Questo perché le origini possono essere utilizzate per pubblicare una combinazione di contenuti firmati e non firmati e perché un client potrebbe accedere direttamente all'origine.

  • Cloud CDN non blocca le richieste senza un parametro di query Signature o un cookie HTTP Cloud-CDN-Cookie. Rifiuta le richieste con parametri non validi (o con formato non valido).
  • Quando l'applicazione rileva una firma non valida, assicurati che risponda con un codice di risposta HTTP 403 (Unauthorized). I codici di risposta HTTP 403 non sono memorizzabili nella cache.
  • Le risposte alle richieste firmate e non firmate vengono memorizzate nella cache separatamente, pertanto una risposta positiva a una richiesta firmata valida non viene mai utilizzata per soddisfare una richiesta non firmata.
  • Se la tua applicazione invia un codice di risposta memorizzabile in cache a una richiesta non valida, le richieste future valide potrebbero essere rifiutate erroneamente.

Per i backend Cloud Storage, assicurati di rimuovere l'accesso pubblico, in modo che Cloud Storage possa rifiutare le richieste per le quali manca una firma valida.

La seguente tabella riassume il comportamento.

La richiesta ha la firma Hit della cache Comportamento
No No Inoltra all'origine di backend.
No Pubblicazione dalla cache.
No Convalida la firma. Se valido, inoltra all'origine del backend.
Convalida la firma. Se valido, pubblica dalla cache.

Creare chiavi per richieste firmate

Per attivare il supporto degli URL e dei cookie firmati di Cloud CDN, crea una o più chiavi su un servizio di backend, un bucket di backend o entrambi abilitati per Cloud CDN.

Per ogni servizio di backend o bucket di backend, puoi creare ed eliminare le chiavi in base alle tue esigenze di sicurezza. Ogni backend può avere fino a tre chiavi configurate contemporaneamente. Ti consigliamo di ruotare periodicamente le chiavi eliminando la più vecchia, aggiungendo una nuova chiave e utilizzandola per firmare gli URL o i cookie.

Puoi utilizzare lo stesso nome della chiave in più servizi e bucket di backend perché ogni insieme di chiavi è indipendente dagli altri. I nomi delle chiavi possono contenere fino a 63 caratteri. Per assegnare un nome alle chiavi, utilizza i caratteri A-Z, a-z, 0-9, _ (trattino basso) e - (trattino).

Quando crei le chiavi, assicurati di mantenerle al sicuro, perché chiunque abbia una delle tue chiavi può creare URL o cookie firmati accettati da Cloud CDN finché la chiave non viene eliminata da Cloud CDN. Le chiavi vengono archiviate sul computer su cui generi gli URL o i cookie firmati. Cloud CDN memorizza anche le chiavi per verificare le firme delle richieste.

Per mantenere le chiavi segrete, i valori delle chiavi non sono inclusi nelle risposte alle richieste dell'API. Se perdi una chiave, devi crearne una nuova.

Per creare una chiave di richiesta firmata:

Console

  1. Nella console Google Cloud, vai alla pagina Cloud CDN.

    Vai a Cloud CDN

  2. Fai clic sul nome dell'origine a cui vuoi aggiungere la chiave.
  3. Nella pagina Dettagli dell'origine, fai clic sul pulsante Modifica.
  4. Nella sezione Nozioni di base sulle origini, fai clic su Avanti per aprire la sezione Regole host e percorso.
  5. Nella sezione Regole host e percorso, fai clic su Avanti per aprire la sezione Rendimento della cache.
  6. Nella sezione Contenuti con limitazioni, seleziona Limita accesso con URL e cookie firmati.
  7. Fai clic su Aggiungi chiave di firma.

    1. Specifica un nome univoco per la nuova chiave di firma.
    2. Nella sezione Metodo di creazione della chiave, seleziona Genera automaticamente. In alternativa, fai clic su Fammi inserire, quindi specifica un valore della chiave di firma.

      Per la prima opzione, copia il valore della chiave di firma generata automaticamente in un file privato, che puoi utilizzare per creare URL firmati.

    3. Fai clic su Fine.

    4. Nella sezione Tempo massimo di una voce della cache, inserisci un valore e poi seleziona un'unità di tempo.

  8. Fai clic su Fine.

gcloud

Lo strumento a riga di comando gcloud legge le chiavi da un file locale specificato. Il file della chiave deve essere creato generando 128 bit fortemente casuali, codificandoli con base64 e sostituendo il carattere + con - e il carattere / con _. Per ulteriori informazioni, consulta RFC 4648. È fondamentale che la chiave sia fortemente casuale. Su un sistema UNIX-like, puoi generare una chiave fortemente casuale e memorizzarla nel file della chiave con il seguente comando:

head -c 16 /dev/urandom | base64 | tr +/ -_ > KEY_FILE_NAME

Per aggiungere la chiave a un servizio di backend:

gcloud compute backend-services \
   add-signed-url-key BACKEND_NAME \
   --key-name KEY_NAME \
   --key-file KEY_FILE_NAME

Per aggiungere la chiave a un bucket di backend:

gcloud compute backend-buckets \
   add-signed-url-key BACKEND_NAME \
   --key-name KEY_NAME \
   --key-file KEY_FILE_NAME

Configura le autorizzazioni Cloud Storage

Se utilizzi Cloud Storage e hai limitato chi può leggere gli oggetti, devi concedere a Cloud CDN l'autorizzazione a leggere gli oggetti aggiungendo l'account di servizio Cloud CDN ai criteri ACL di Cloud Storage.

Non è necessario creare l'account di servizio. L'account di servizio viene creato automaticamente la prima volta che aggiungi una chiave a un bucket di backend in un progetto.

Prima di eseguire il comando seguente, aggiungi almeno una chiave a un bucket di backend nel tuo progetto. In caso contrario, il comando non va a buon fine a causa di un errore perché l'account di servizio per il riempimento della cache Cloud CDN non viene creato finché non aggiungi una o più chiavi per il progetto.