Chiavi di crittografia fornite dal cliente

Configurazione

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

Panoramica

Come ulteriore livello oltre alla crittografia standard di Cloud Storage, puoi scegliere di fornire la tua chiave di crittografia 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 archivia definitivamente la chiave nei suoi server né la gestisce in altro modo.

Devi fornire la chiave per ogni operazione di Cloud Storage, la quale viene eliminata definitivamente dai server Cloud Storage al termine dell'operazione. Cloud Storage archivia solo un hash di crittografia 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 quest'ultimo non può essere utilizzato per decriptare i dati.

Ti consigliamo di eseguire il backup di ogni chiave in una posizione sicura e di prendere precauzioni per assicurarti che le chiavi non vengano condivise con parti non attendibili. Se un file o un computer contenente la tua chiave di crittografia è stato compromesso, devi eseguire immediatamente 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 la utilizza per criptare:

  • I dati dell'oggetto.
  • Il checksum CRC32C dell'oggetto.
  • L'hash MD5 dell'oggetto.

Cloud Storage utilizza la crittografia at-rest predefinita per criptare i metadati rimanenti dell'oggetto, incluso il nome. In questo modo puoi leggere e aggiornare i metadati generali, nonché elencare, sovrascrivere ed eliminare oggetti, senza bisogno della chiave di crittografia fornita dal cliente. Tuttavia, per eseguire una di queste azioni, devi disporre di un'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, come 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 o l'hash MD5 dell'oggetto. Se fornisci la chiave con la richiesta dei metadati dell'oggetto, il checksum CRC32C e l'hash MD5 dell'oggetto sono inclusi nei metadati.

Comportamento di riscrittura

Se riscrivi un oggetto criptato con una chiave di crittografia fornita dal cliente senza fornire una chiave per criptare l'oggetto riscritto, si verifica quanto segue:

Controllo HTTPS

Per proteggere i tuoi dati mentre vengono trasferiti su internet durante le operazioni di lettura e scrittura, utilizza Transport Layer Security, comunemente noto come TLS o HTTPS. Il protocollo TLS è obbligatorio quando fornisci una chiave di crittografia. Se usi accidentalmente la chiave di crittografia in una connessione non criptata (HTTP), è possibile che un malintenzionato intercetta la chiave. A causa di questa possibilità, l'API Cloud Storage restituisce un messaggio di errore che ti avvisa che la tua chiave potrebbe essere stata compromessa. In questo caso, devi ruotare le chiavi immediatamente.

Limitazioni

Quando si utilizzano chiavi di crittografia fornite dal cliente si applicano le seguenti restrizioni:

  • Non puoi utilizzare la console Google Cloud per scaricare oggetti criptati con una chiave di crittografia fornita dal cliente. Analogamente, quando utilizzi la console Google Cloud per caricare un oggetto, non puoi criptarlo con una chiave di crittografia fornita dal cliente.

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

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

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

  • Quando gestisce un oggetto criptato da una chiave di crittografia fornita dal cliente, Cloud Storage ignora i metadati Cache-Control associati all'oggetto e pubblica l'oggetto con Cache-Control impostato su private, max-age=0.

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. Devi archiviare sia la chiave AES-256 sia l'hash SHA256 della chiave in modo sicuro. Cloud Storage archivia l'hash SHA256 della chiave nei metadati dell'oggetto, dove puoi recuperarlo in un secondo momento. Questo hash SHA256 non può essere utilizzato da Cloud Storage (o da chiunque altro) per decriptare i tuoi dati. Viene archiviata 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, le intestazioni elencate sopra vengono utilizzate per criptare l'oggetto di destinazione, mentre le seguenti intestazioni vengono utilizzate per decriptare l'oggetto di origine:

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 archiviare 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 archiviare in modo sicuro.

Ricevi un errore HTTP 400 nei seguenti casi:

  • Carica un oggetto utilizzando una chiave di crittografia fornita dal cliente e tenti di eseguire un'altra operazione sull'oggetto (che non sia richiedere o aggiornare la maggior parte dei metadati o eliminare l'oggetto) senza fornire la chiave.
  • Carica un oggetto utilizzando una chiave di crittografia fornita dal cliente e tenti di eseguire un'altra operazione sull'oggetto con una chiave errata.
  • Carichi un oggetto senza fornire una chiave di crittografia fornita dal cliente e provi a eseguire un'altra operazione sull'oggetto con una chiave di crittografia fornita dal cliente.
  • Devi specificare un algoritmo di crittografia, una chiave o un hash SHA256 non valido.

Chiavi di crittografia con gcloud storage

Google Cloud CLI supporta l'utilizzo di chiavi di crittografia fornite dal cliente. Quando utilizzi gcloud CLI con chiavi di crittografia fornite dal cliente, tieni presente quanto segue:

  • La chiave specificata come chiave di crittografia viene utilizzata nei comandi sia come chiave di crittografia sia, se necessario, come chiave di decriptazione.

  • Facoltativamente, puoi specificare fino a 100 chiavi di decriptazione, utilizzate solo per decriptare gli oggetti.

  • Durante la decriptazione, viene calcolato l'hash SHA256 di qualsiasi chiave di crittografia e decriptazione fornita e la chiave corretta da utilizzare per un particolare oggetto viene selezionata abbinando l'hash SHA256 nei metadati dell'oggetto.

  • Quando si aggiunge o si ruota una chiave di crittografia fornita dal cliente per un oggetto esistente, l'oggetto viene riscritto come parte della richiesta. Ciò vale anche per il comando gcloud storage objects update.

  • I comandi elenco che possono restituire l'hash MD5 o CRC32C per gli oggetti criptati con una chiave fornita dal cliente eseguono una richiesta GET di metadati aggiuntivi per ciascun oggetto. Queste richieste aggiuntive possono rendere l'elenco dei dati notevolmente più lento rispetto a quello degli oggetti criptati con la crittografia standard di Cloud Storage.

  • Nei casi in cui la chiave di crittografia può o cambia durante un'operazione di scrittura o copia parzialmente completata, ad esempio quando si esegue nuovamente un caricamento di cp dopo l'uscita forzata o dopo un timeout di rete, l'operazione viene riavviata per garantire che l'oggetto di destinazione sia scritto con la nuova chiave.

Rotazione della chiave di crittografia

Se un oggetto è criptato con 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 alcuni esempi di rotazione della chiave, consulta Rotazione di una chiave di crittografia.

Passaggi successivi