URL firmati

Questa pagina fornisce una panoramica degli URL firmati, che forniscono accesso a tempo limitato a una risorsa Cloud Storage specifica. Chiunque sia in possesso dell'URL firmato può utilizzarlo finché è attivo, indipendentemente dal fatto che abbia un Account Google. Per scoprire come creare un URL firmato, consulta Procedura di firma V4 con gli strumenti di Cloud Storage e Procedura di firma V4 con il tuo programma. Per scoprire altri modi per controllare l'accesso a bucket e oggetti, consulta la Panoramica del controllo dell'accesso.

Panoramica

Un URL firmato è un URL che fornisce un'autorizzazione e un tempo limitati per effettuare una richiesta. Gli URL con firma contengono informazioni di autenticazione nella rispettiva stringa di query, consentendo così agli utenti senza credenziali di eseguire azioni specifiche su una risorsa.

  • Quando generi un URL firmato, devi specificare un account che abbia autorizzazioni sufficienti per effettuare la richiesta che verrà effettuata dall'URL firmato.

    • Nella maggior parte dei casi, l'account è un account di servizio.

    • Se crei un tuo programma per generare URL firmati, è possibile utilizzare un account utente se è associata una chiave HMAC.

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

Quando è consigliabile utilizzare un URL firmato?

In alcuni scenari, potresti non voler richiedere agli utenti di avere un account Google per accedere a Cloud Storage, ma comunque voler controllare l'accesso utilizzando la logica specifica dell'applicazione. Il modo tipico per gestire questo caso d'uso è fornire a un utente un URL firmato, che gli consenta di leggere, scrivere o eliminare la risorsa per un periodo di tempo limitato. Devi specificare un termine di scadenza quando crei l'URL firmato. Chiunque conosca l'URL può accedere alla risorsa fino al raggiungimento della data e dell'ora di scadenza dell'URL o alla rotazione della chiave utilizzata per firmare l'URL.

Gli utilizzi più comuni degli URL firmati sono i caricamenti e i download, perché in queste richieste i dati degli oggetti passano tra i richiedenti e Cloud Storage. Nella maggior parte degli altri casi, ad esempio per copiare, comporre, eliminare oggetti o modificare i metadati, creare un URL firmato e darlo a un utente da utilizzare è un passaggio aggiuntivo non necessario. Ti consigliamo invece di adottare un design in cui l'entità responsabile della creazione dell'URL firmato effettui direttamente la richiesta a Cloud Storage.

Opzioni per generare un URL firmato

Cloud Storage supporta diversi metodi per generare un URL firmato:

  • Firma V4 con autenticazione dell'account di servizio: questo meccanismo di firma è descritto di seguito.

  • Firma con autenticazione HMAC: se sei un utente di Amazon Simple Storage Service (Amazon S3), puoi utilizzare i tuoi flussi di lavoro esistenti per generare URL firmati per Cloud Storage. Basta specificare le risorse Cloud Storage, fare riferimento all'hoststorage.googleapis.com e utilizzare le credenziali HMAC di Cloud Storage nel processo di generazione dell'URL firmato.

Esempio di URL firmato

Di seguito è riportato un esempio di URL firmato creato seguendo la procedura di firma V4 con l'autenticazione del account di servizio:

https://storage.googleapis.com/example-bucket/cat.jpeg?X-Goog-Algorithm=
GOOG4-RSA-SHA256&X-Goog-Credential=example%40example-project.iam.gserviceaccount.com
%2F20181026%2Fus-central1%2Fstorage%2Fgoog4_request&X-Goog-Date=20181026T18
1309Z&X-Goog-Expires=900&X-Goog-SignedHeaders=host&X-Goog-Signature=247a2aa45f16
9edf4d187d54e7cc46e4731b1e6273242c4f4c39a1d2507a0e58706e25e3a85a7dbb891d62afa849
6def8e260c1db863d9ace85ff0a184b894b117fe46d1225c82f2aa19efd52cf21d3e2022b3b868dc
c1aca2741951ed5bf3bb25a34f5e9316a2841e8ff4c530b22ceaa1c5ce09c7cbb5732631510c2058
0e61723f5594de3aea497f195456a2ff2bdd0d13bad47289d8611b6f9cfeef0c46c91a455b94e90a
66924f722292d21e24d31dcfb38ce0c0f353ffa5a9756fc2a9f2b40bc2113206a81e324fc4fd6823
a29163fa845c8ae7eca1fcf6e5bb48b3200983c56c5ca81fffb151cca7402beddfc4a76b13344703
2ea7abedc098d2eb14a7

Questo URL firmato ha fornito l'accesso in lettura all'oggetto cat.jpeg nel bucket example-bucket. I parametri di ricerca che rendono questo URL firmato sono:

  • X-Goog-Algorithm: l'algoritmo utilizzato per firmare l'URL.

  • X-Goog-Credential: informazioni sulle credenziali utilizzate per creare l'URL firmato.

  • X-Goog-Date: la data e l'ora in cui l'URL firmato è diventato utilizzabile, nel formato di base YYYYMMDD'T'HHMMSS'Z'ISO 8601.

  • X-Goog-Expires: il periodo di tempo durante il quale l'URL firmato è rimasto valido, misurato in secondi dal valore in X-Goog-Date. In questo esempio, l'URL firmato scade tra 15 minuti. Il valore di scadenza più lungo è 604800 secondi (7 giorni).

  • X-Goog-SignedHeaders: intestazioni che dovevano essere incluse in qualsiasi richiesta che utilizzava l'URL firmato.

  • X-Goog-Signature: la stringa di autenticazione che consentiva alle richieste che utilizzano questo URL firmato di accedere a cat.jpeg.

Utilizzo degli URL firmati con i caricamenti ripetibili

In genere, non è necessario creare URL firmati per i caricamenti riavviabili, perché dopo la richiesta di avvio del caricamento, le richieste PUT successive per caricare i dati dell'oggetto utilizzano un URI sessione, che funge da token di autenticazione. Ciò significa che le richieste di PUT non utilizzano URL firmati.

Sebbene tu possa creare e utilizzare un URL firmato per la richiesta POST iniziale per avviare il caricamento, nella maggior parte dei casi il server può avviare il caricamento ripristinabile. Il server invia quindi l'URI della sessione al client per eseguire il caricamento. In questo modo, si evita la complessità di dover creare un URL firmato sul server, nonché la complessità di dover gestire l'URL firmato e avviare il caricamento ripristinabile sul client.

Come gli URL firmati, un URI sessione può essere utilizzato da chiunque ne sia in possesso per caricare i dati. Assicurati di trasmettere l'URI sessione tramite HTTPS quando lo fornisci a un client.

Considerazioni sugli URL firmati

Quando utilizzi gli URL firmati, tieni presente quanto segue:

  • Gli URL firmati possono essere utilizzati solo per accedere alle risorse di Cloud Storage tramite endpoint dell'API XML.

  • In genere, gli URL firmati possono essere generati per qualsiasi richiesta all'API XML. Tuttavia, esistono due eccezioni:

    • Gli URL firmati che utilizzano le firme V4 non possono essere utilizzati nelle richieste il cui corpo utilizza la codifica a blocchi.

    • Al momento, le librerie client Node.js di Cloud Storage possono creare solo URL firmati per singoli oggetti. Ad esempio, non può essere utilizzato per creare URL firmati per la pubblicazione di oggetti in un bucket.

  • Quando specifichi le credenziali, ti consigliamo di identificare il tuo account di servizio utilizzando il relativo indirizzo email. Tuttavia, è supportato anche l'utilizzo dell'ID account di servizio.

  • Assicurati di omettere l'intestazione di autorizzazione da tutte le richieste che utilizzano un URL firmato. Se vengono utilizzati entrambi, Cloud Storage potrebbe autenticarsi in base alle credenziali fornite nell'intestazione anziché all'URL firmato. In questo modo potresti consentire un accesso alle risorse maggiore del previsto.

Richieste canoniche

Gli URL firmati utilizzano le richieste canoniche come parte delle informazioni codificate nel parametro della stringa di query X-Goog-Signature. Quando crei un URL firmato con gli strumenti di Cloud Storage, la richiesta canonical obbligatoria viene creata e incorporata automaticamente. Tuttavia, quando crei un URL firmato con il tuo programma, devi definire autonomamente la richiesta canonical e utilizzarla per creare una firma.

Ambito delle credenziali

L'ambito delle credenziali viene visualizzato sia nella stringa da firmare sia nel parametro della stringa di query X-Goog-Credential.

Passaggi successivi