Chiavi di crittografia fornite dal cliente

Vai agli esempi

In questa pagina vengono illustrate le chiavi di crittografia fornite dal cliente. Per altre opzioni di crittografia, consulta le Opzioni di crittografia dei dati.

Panoramica

Come livello aggiuntivo oltre alle chiavi di crittografia gestite da Google, puoi scegliere di fornire la tua chiave AES-256, codificata in Base64 standard. Questa chiave è nota come chiave di crittografia fornita dal cliente. Se fornisci una chiave di crittografia fornita dal cliente, Cloud Storage non memorizza in modo permanente la tua chiave sui server di Google né gestisce la chiave in altro modo.

Devi invece fornire la chiave per ogni operazione di Cloud Storage e la chiave viene eliminata definitivamente dai server di Google una volta completata l'operazione. Cloud Storage archivia solo un hash crittografico della chiave in modo che le richieste future possano essere convalidate in base all'hash. La chiave non può essere recuperata da questo hash e non può essere utilizzata per decriptare i dati.

Ti consigliamo di fare il backup di ogni chiave in una posizione sicura e di adottare le precauzioni necessarie per assicurarti che le chiavi non siano condivise con soggetti non attendibili. Se un file o una macchina contenente una chiave di crittografia viene compromessa, devi immediatamente eseguire la rotazione della chiave per tutti gli oggetti criptati con la chiave compromessa.

Quando viene utilizzata la chiave?

Quando applichi una chiave di crittografia fornita dal cliente a un oggetto, Cloud Storage utilizza la chiave durante la crittografia:

  • I dati dell'oggetto.
  • Checksum CRC32C dell'oggetto.
  • L'hash MD5 dell'oggetto.

Cloud Storage utilizza le chiavi lato server standard per criptare i restanti metadati dell'oggetto, incluso il nome. In questo modo puoi leggere e aggiornare i metadati generali, oltre a elencare ed eliminare oggetti, senza bisogno della chiave di crittografia fornita dal cliente. Tuttavia, per eseguire una di queste azioni, devi disporre di autorizzazione sufficiente.

Ad esempio, se un oggetto è criptato con una chiave di crittografia fornita dal cliente, la chiave deve essere utilizzata per eseguire operazioni sull'oggetto, ad esempio scaricarlo o spostarlo. Se tenti di leggere i metadati dell'oggetto senza fornire la chiave, riceverai metadati come il nome dell'oggetto e Content-Type, ma non il checksum CRC32C dell'oggetto o l'hash MD5. Se fornisci la tua chiave con la richiesta dei metadati dell'oggetto, il checksum CRC32C dell'oggetto e l'hash MD5 vengono inclusi nei metadati.

Controllo HTTPS

Per proteggere i tuoi dati mentre viaggiano su Internet durante le operazioni di lettura e scrittura, utilizza Transport Layer Security, comunemente noto come TLS o HTTPS. TLS è obbligatorio quando fornisci una chiave di crittografia. Se utilizzi per errore la tua chiave di crittografia tramite una connessione non criptata (HTTP), è possibile che l'intercettatore intercetta la chiave. A causa di questa possibilità, l'API Cloud Storage restituisce un messaggio di errore che ti avvisa che la chiave potrebbe essere compromessa. In tal caso, devi immediatamente ruotare le chiavi.

Limitazioni

Quando utilizzi le chiavi di crittografia fornite dal cliente, si applicano le seguenti limitazioni:

  • Cloud Storage Transfer Service e Cloud Dataflow non supportano attualmente oggetti criptati con chiavi di crittografia fornite dal cliente.

  • Non puoi utilizzare Google Cloud Console per scaricare oggetti criptati con una chiave di crittografia fornita dal cliente. Allo stesso modo, quando utilizzi Google Cloud Console per caricare un oggetto, non puoi criptare l'oggetto con una chiave di crittografia fornito dal cliente.

  • Puoi impostare le chiavi di crittografia fornite dal cliente solo sui singoli oggetti. Non puoi impostare una chiave di crittografia predefinita fornita dal cliente per un bucket.

  • Se esegui un'operazione compose su oggetti criptati da chiavi di crittografia fornite dal cliente, gli oggetti del componente devono essere criptati dalla stessa chiave e devi fornire la chiave alla richiesta di scrittura. L'oggetto composito risultante è criptato dalla stessa chiave.

Chiavi di crittografia con API REST

Quando utilizzi una chiave di crittografia fornita dal cliente e lavori direttamente con l'API JSON o XML, devi fornire sia la chiave AES-256 sia un hash SHA256 della chiave. Dovresti archiviare sia la chiave AES-256 che l'hash SHA256 della chiave in modo sicuro. Google memorizza l'hash SHA256 della tua chiave nei metadati dell'oggetto, dove puoi recuperarlo in un secondo momento. Questo hash SHA256 non può essere utilizzato da Google (o da chiunque altro) per decriptare i tuoi dati. Viene archiviato per identificare in modo univoco la chiave AES-256 utilizzata per criptare un determinato oggetto.

Intestazioni delle richieste

Includi le seguenti intestazioni HTTP nella richiesta JSON o XML:

Nome intestazione Valore Descrizione
x-goog-encryption-algorithm string L'algoritmo di crittografia da utilizzare. Devi utilizzare il valore AES256.
x-goog-encryption-key string Una stringa con codifica Base64 RFC 4648 della chiave di crittografia AES-256.
x-goog-encryption-key-sha256 string Una stringa con codifica Base64 RFC 4648 dell'hash SHA256 della chiave di crittografia.

Se esegui un'operazione di riscrittura con l'API JSON, vengono usate le intestazioni elencate sopra per criptare l'oggetto di destinazione e per decriptare l'oggetto di origine vengono utilizzate le seguenti intestazioni:

Nome intestazione Valore Descrizione
x-goog-copy-source-encryption-algorithm string L'algoritmo di crittografia da utilizzare. Devi utilizzare il valore AES256.
x-goog-copy-source-encryption-key string Una stringa con codifica Base64 RFC 4648 della chiave di crittografia AES-256 dell'oggetto di origine.
x-goog-copy-source-encryption-key-sha256 string Una stringa con codifica Base64 RFC 4648 dell'hash SHA256 della chiave di crittografia dell'oggetto di origine.

Risposta

JSON

Quando utilizzi l'API JSON, i metadati per una chiave di crittografia fornita dal cliente vengono restituiti nel corpo della risposta, che include le seguenti proprietà:

Nome proprietà Valore Descrizione
customerEncryption oggetto Informazioni sulla crittografia utilizzata per la richiesta.
customerEncryption.encryptionAlgorithm string L'algoritmo di crittografia utilizzato. Contiene sempre il valore AES256.
customerEncryption.keySha256 string Una stringa con codifica Base64 RFC 4648 dell'hash SHA256 della chiave di crittografia. Puoi utilizzare questo hash SHA256 per identificare in modo univoco la chiave di crittografia AES-256 necessaria per decriptare l'oggetto, che devi memorizzare in modo sicuro.

XML

Quando utilizzi l'API XML, la risposta include le seguenti intestazioni:

Nome intestazione Valore Descrizione
x-goog-encryption-algorithm string L'algoritmo di crittografia utilizzato. Contiene sempre il valore AES256.
x-goog-encryption-key-sha256 string Una stringa con codifica Base64 RFC 4648 dell'hash SHA256 della chiave di crittografia. Puoi utilizzare questo hash SHA256 per identificare in modo univoco la chiave di crittografia AES-256 necessaria per decriptare l'oggetto, che devi memorizzare in modo sicuro.

Ricevi un errore HTTP 400 nei seguenti casi:

  • Devi caricare un oggetto utilizzando una chiave di crittografia fornita dal cliente e cercare di eseguire un'altra operazione sull'oggetto, ad eccezione della richiesta o dell'aggiornamento della maggior parte dei metadati o dell'eliminazione dell'oggetto, senza fornire la chiave.
  • Carichi un oggetto utilizzando una chiave di crittografia fornita dal cliente e tenti di eseguire un'altra operazione sull'oggetto con una chiave non corretta.
  • Devi caricare un oggetto senza fornire una chiave di crittografia fornita dal cliente e tentare di eseguire un'altra operazione sull'oggetto con una chiave di crittografia fornita dal cliente.
  • Specifica un algoritmo di crittografia, una chiave o un hash SHA256 non valido.

Chiavi di crittografia con gsutil

Per utilizzare una chiave di crittografia fornita dal cliente con gsutil, aggiungi la seguente opzione alla sezione [GSUtil] del file di configurazione Boto:

Nome opzione Valore Descrizione
encryption_key string Una stringa con codifica Base64 RFC 4648 della chiave di crittografia AES-256.

Facoltativamente, puoi specificare una o più chiavi di decriptazione, fino a 100. L'opzione encryption_key viene utilizzata da gsutil sia come chiave di crittografia e decriptazione, ma tutte le opzioni decryption_key specificate vengono utilizzate solo per decriptare gli oggetti. Nel file di configurazione del boto devono essere elencate più chiavi di decriptazione come segue:

decryption_key1 = ...
decryption_key2 = ...
decryption_key3 = ...

Se nel tuo file di configurazione boto sono presenti chiavi di crittografia o decriptazione, queste vengono utilizzate per tutti i comandi gsutil. Durante la decriptazione, gsutil calcola l'hash SHA256 delle chiavi di crittografia e decriptazione fornite e seleziona la chiave corretta da utilizzare per un determinato oggetto facendo corrispondere l'hash SHA256 nei metadati dell'oggetto.

Gli oggetti criptati con chiavi di crittografia fornite dal cliente richiedono la chiave di decriptazione corrispondente durante le seguenti operazioni:

  • Download o copie. Ad esempio, puoi utilizzare i comandi gsutil cat, cp, mv o rsync.

  • Visualizzazione degli hash CRC32C o MD5 degli oggetti criptati. ad esempio con i comandi ls -L o stat.

Se sovrascrivi o riscrivi un oggetto criptato con una chiave di crittografia fornita dal cliente o gestita dal cliente senza fornire il campo encryption_key, si verifica quanto segue:

  • Se includi una chiave di decriptazione appropriata nel comando, gsutil cripta l'oggetto utilizzando la chiave di crittografia predefinita del bucket o la crittografia gestita da Google in assenza di una chiave predefinita.

  • Per le riscritture, se non includi una chiave di decriptazione appropriata nel comando, verrà visualizzato un errore.

Nei casi in cui encryption_key potrebbe cambiare durante un'operazione di scrittura o copia parzialmente completata, ad esempio quando si esegue nuovamente un caricamento di un oggetto gsutil cp dopo aver forzato l'uscita o il raggiungimento di un timeout di rete, gsutil avvia l'operazione parzialmente completata per garantire che l'oggetto di destinazione sia scritto con la nuova chiave.

Rotazione delle chiavi di crittografia

Se un oggetto è criptato utilizzando una chiave di crittografia fornita dal cliente, puoi ruotare la chiave dell'oggetto riscrivendo l'oggetto. Le riscritture sono supportate tramite l'API JSON, ma non l'API XML. Per esempi di rotazione delle chiavi, vedi Rotazione di una chiave di crittografia.

Passaggi successivi