Questo argomento descrive come criptare i dati localmente e caricarli su Cloud Storage con Tink e Cloud Key Management Service (Cloud KMS). Tink è una libreria di crittografia open source scritta da crittografi e ingegneri di sicurezza di Google.
Panoramica
La crittografia lato client è qualsiasi crittografia eseguita prima di inviare i dati al cloud. Quando utilizzi la crittografia lato client, sei responsabile della creazione e della gestione delle chiavi di crittografia e della crittografia dei dati prima di inviarli al cloud.
In questo argomento, implementi la crittografia envelope lato client con Tink utilizzando una chiave di crittografia in Cloud KMS.
Puoi trovare una versione del progetto 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 utilizzarlo 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
) per la chiave.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
L'amministratore potrebbe anche essere in grado di assegnare all'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). In altre parole, 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:
- Genera una chiave di crittografia dei dati (DEK) localmente.
- Utilizza il DEK localmente per criptare il messaggio.
- Utilizza Cloud KMS per criptare (con wrapping) la DEK con la KEK.
- Memorizza i dati criptati e la chiave DEK con wrapping.
Quando utilizzi Tink, non è necessario implementare questa procedura di crittografia dell'involucro da zero.
Per utilizzare Tink per la crittografia con envelope, fornisci a Tink un URI chiave e le credenziali. L'URI della chiave rimanda alla KEK in Cloud KMS e le credenziali consentono a Tink di utilizzarla. Tink genera la DEK, cripta i dati, esegue il wrapping della DEK e restituisce una singola crittografia con i dati criptati e la DEK con wrapping.
Tink supporta la crittografia dell'involucro in Python, Java, C++ e Go utilizzando la primitive AEAD (Authenticated Encryption with Associated Data).
Collega 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 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 Ottenere un ID risorsa Cloud KMS.
Inizializza Tink e cripta i dati
Tink utilizza primitive, ovvero componenti di base criptati che gestiscono i dettagli degli algoritmi sottostanti, per consentirti di eseguire le attività in sicurezza. Ogni primitivo offre un'API che gestisce un'attività specifica. Qui utilizziamo AEAD, quindi utilizziamo la primitiva Tink AEAD.
Python
Python
Per scoprire come installare e utilizzare la libreria client per Cloud KMS, consulta Librerie client Cloud KMS.
Per autenticarti a Cloud KMS, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare 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 autenticarti a Cloud KMS, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Per ulteriori informazioni sulle primitive e sulle interfacce supportate da Tink, consulta la pagina Inizia per Tink.
Passaggi successivi
- Scopri di più su Tink.
- Scopri come utilizzare la crittografia lato client con Cloud SQL.