URL firmati

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

Panoramica

Un URL firmato è un URL che fornisce un'autorizzazione limitata e il tempo necessario per presentare una richiesta. Gli URL firmati contengono informazioni di autenticazione nella stringa di query, consentendo agli utenti senza credenziali di eseguire azioni specifiche su una risorsa. Quando generi un URL firmato, specifichi un utente o un account di servizio che deve disporre di autorizzazioni sufficienti per effettuare la richiesta che verrà effettuata dall'URL firmato. Dopo aver generato un URL firmato, chiunque lo possieda può utilizzarlo per eseguire azioni specificate, come la lettura di un oggetto, entro un determinato periodo di tempo.

Quando conviene utilizzare un URL firmato?

In alcuni scenari, potresti non voler richiedere agli utenti di avere un Account Google per accedere a Cloud Storage, ma vuoi comunque controllare l'accesso utilizzando la logica specifica dell'applicazione. Il modo tipico per risolvere questo caso d'uso è fornire un URL firmato a un utente, che concede all'utente l'accesso in lettura, scrittura o eliminazione alla risorsa per un periodo di tempo limitato. Devi specificare una data di scadenza quando crei l'URL firmato. Chiunque conosca l'URL può accedere alla risorsa fino al raggiungimento della scadenza dell'URL o fino 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 si spostano tra i richiedenti e Cloud Storage. Nella maggior parte degli altri casi, ad esempio copiando oggetti, componendo oggetti, eliminando oggetti o modificando i metadati, creare un URL firmato e fornirlo a qualcuno che lo utilizza è un passaggio aggiuntivo non necessario. Dovresti invece prendere in considerazione un design in cui l'entità responsabile della creazione dell'URL firmato invia direttamente la richiesta desiderata 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 Amazon Simple Storage Service (Amazon S3), puoi utilizzare i flussi di lavoro esistenti per generare URL firmati per Cloud Storage. È sufficiente specificare le risorse Cloud Storage, puntare all'host storage.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 dopo il processo di firma V4 con l'autenticazione dell'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 ISO 8601 YYYYMMDD'T'HHMMSS'Z'.

  • 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 della scadenza più lungo è 604.800 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 ha consentito l'accesso a cat.jpeg alle richieste utilizzando questo URL firmato.

Utilizzare URL firmati con caricamenti ripristinabili

Quando utilizzi i caricamenti ripristinabili, crei e utilizzi un URL firmato solo per la richiesta POST che avvia il caricamento. Questa richiesta iniziale restituisce un URI di sessione che utilizzi nelle richieste PUT successive per caricare i dati. Poiché l'URI di sessione funge da token di autenticazione, le richieste PUT non utilizzano alcun URL firmato.

Un vantaggio dei caricamenti ripristinabili è che consentono al server di effettuare la richiesta di avvio, evitando che i client debbano occuparsi di URL firmati. Tuttavia, ci sono alcune considerazioni da tenere a mente:

  • L'URI della sessione può essere utilizzato da chiunque sia in possesso per caricare dati. Assicurati di trasmettere l'URI della sessione tramite HTTPS quando lo fornisci a un client.

  • I caricamenti ripristinabili vengono bloccati nell'area geografica della richiesta iniziale. Per evitare caricamenti lenti, se il server e il client si trovano in luoghi geograficamente lontani, fai in modo che la richiesta POST iniziale venga creata e firmata dal server, quindi fornisci l'URL firmato al client in modo che il caricamento venga avviato dalla loro posizione.

Considerazioni sull'URL firmato

Quando lavori con gli URL firmati, tieni presente quanto segue:

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

  • In genere, gli URL firmati possono essere creati per qualsiasi richiesta dell'API XML, ma esistono due eccezioni:

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

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

  • Quando specifichi le credenziali, è consigliabile identificare l'account di servizio tramite l'indirizzo email; tuttavia, è supportato anche l'utilizzo dell'ID dell'account di servizio.

  • Assicurati di omettere l'intestazione di autorizzazione da tutte le richieste che utilizzano un URL firmato. Se vengono utilizzate entrambe, Cloud Storage potrebbe eseguire l'autenticazione in base alle credenziali fornite nell'intestazione anziché all'URL firmato. In questo modo potresti avere più accesso alle risorse del previsto.

Richieste canoniche

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

Ambito delle credenziali

L'ambito credenziali viene visualizzato sia nel parametro stringa-significativo che nel parametro della stringa di query X-Goog-Credential.

Passaggi successivi