Questo argomento descrive come criptare i dati localmente e caricarli in Cloud Storage con Tink e Cloud Key Management Service (Cloud KMS). Tink è una libreria di crittografia open source scritta da crittografi e ingegneri della sicurezza di Google.
Panoramica
La crittografia lato client è qualsiasi crittografia eseguita prima dell'invio dei dati al cloud. Quando utilizzi la crittografia lato client, hai la responsabilità di creare e gestire le chiavi di crittografia e di criptare i dati prima di inviarli al cloud.
In questo argomento, implementerai la crittografia envelope lato client con Tink utilizzando una chiave di crittografia in Cloud KMS.
Puoi trovare una versione di questo tutorial basata su Terraform nel repository GitHub kms-solutions.
Prima di iniziare
- Crea una chiave di crittografia Cloud KMS simmetrica per la crittografia. Prendi nota dell'URI della chiave. Ti servirà in un secondo momento.
- Installa Tink per l'utilizzo con Cloud KMS.
- Crea un bucket in Cloud Storage per caricare i dati criptati.
Ruoli obbligatori
Per assicurarti che il tuo account di servizio disponga delle autorizzazioni necessarie per utilizzare le chiavi Cloud KMS con Tink, chiedi all'amministratore di concedere al tuo account di servizio il ruolo IAM Autore crittografia/decrittografia CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) sulla chiave.
L'amministratore potrebbe anche assegnare al tuo account di servizio le autorizzazioni richieste tramite ruoli personalizzati o altri ruoli predefiniti.
Crittografia envelope con Tink
Nella crittografia envelope, la chiave Cloud KMS funge da chiave di crittografia della chiave (KEK). Viene utilizzata per criptare le chiavi di crittografia dei dati (DEK), che a loro volta vengono utilizzate per criptare i dati effettivi.
Dopo aver creato una KEK in Cloud KMS, per criptare ogni messaggio devi:
- Generare una chiave di crittografia dei dati (DEK) localmente.
- Utilizzare la DEK localmente per criptare il messaggio.
- Utilizzare Cloud KMS per criptare (wrapping) la DEK con la KEK.
- Archiviare i dati criptati e la DEK con wrapping.
Quando utilizzi Tink, non devi implementare questo processo di crittografia envelope da zero.
Per utilizzare Tink per la crittografia envelope, fornisci a Tink un URI della chiave e le credenziali. L'URI della chiave rimanda alla KEK in Cloud KMS e le credenziali consentono a Tink di utilizzare la KEK. Tink genera la DEK, cripta i dati, esegue il wrapping della DEK e poi restituisce un singolo testo criptato con i dati criptati e la DEK con wrapping.
Tink supporta la crittografia envelope in Python, Java, C++ e Go utilizzando la primitiva di crittografia autenticata con dati associati (AEAD).
Connettere Tink e Cloud KMS
Per criptare le DEK generate da Tink con la KEK in Cloud KMS, devi recuperare l'URI della KEK. In Cloud KMS, l'URI della KEK ha il seguente formato:
gcp-kms://projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION
Per informazioni dettagliate su come ottenere il percorso della chiave, consulta Recuperare un ID risorsa di Cloud KMS.
Inizializzare Tink e criptare i dati
Tink utilizza le primitive, ovvero blocchi di creazione crittografici che gestiscono i dettagli degli algoritmi sottostanti, in modo da poter eseguire le attività in sicurezza. Ogni primitiva offre un'API che gestisce un'attività specifica. In questo caso, utilizziamo AEAD, quindi utilizziamo la primitiva AEAD di Tink.
Python
Python
Per scoprire come installare e utilizzare la libreria client per Cloud KMS, consulta Librerie client Cloud KMS.
Per eseguire l'autenticazione in Cloud KMS, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Java
Per scoprire come installare e utilizzare la libreria client per Cloud KMS, consulta Librerie client Cloud KMS.
Per eseguire l'autenticazione in Cloud KMS, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Per saperne di più sulle primitive e sulle interfacce supportate da Tink, consulta la pagina Inizia a utilizzare Tink.
Passaggi successivi
- Scopri di più su Tink.
- Scopri come utilizzare la crittografia lato client con Cloud SQL.