Crittografia dei dati delle applicazioni

Questo argomento illustra un modo per utilizzare Cloud Key Management Service per criptare direttamente i dati dell'applicazione su un client, prima di trasmetterli attraverso una rete.

In questo esempio, i dati criptati vengono trasmessi a Google Cloud e archiviati in un bucket Cloud Storage. Cloud Storage supporta inoltre la crittografia automatica lato server con chiavi di crittografia gestite dal cliente, che automatizza l'intero processo. Per proteggere i dati dell'applicazione prima di trasmetterli a Google Cloud, ti consigliamo di utilizzare la libreria Tink.

La libreria Tink è una libreria multilingue multipiattaforma che fornisce API semplici e a prova di uso improprio per le attività crittografiche più comuni. Questo può essere utilizzato per criptare i dati prima che vengano inseriti nei datastore di Google Cloud e supporta Java, Python, C++, Go, Objective-C e altri linguaggi, nonché per l'archiviazione di oggetti e i servizi di database relazionale.

In questa procedura dettagliata, cripti un file utilizzando Cloud KMS prima di caricarlo in un bucket. Successivamente, scarica e decripta gli stessi dati in modo da poterli leggere sul client.

Se segui queste istruzioni, le tue chiavi e tutte le operazioni crittografiche rimangono in Google Cloud e devi utilizzare Cloud KMS per la decriptazione. La crittografia simmetrica non elaborata consente di criptare o decriptare i dati localmente on-premise o di spostare i dati criptati tra librerie e provider di servizi diversi senza doverli prima decriptare.

Prima di iniziare

All'interno della tua organizzazione Google Cloud, devi disporre dell'autorizzazione per creare nuovi progetti e abilitare la fatturazione, creare utenti e gestire le autorizzazioni all'interno di questi progetti. Il ruolo roles/resourcemanager.organizationAdmin concede questa autorizzazione.

Configurazione

Consigliamo di utilizzare due progetti e due utenti per garantire la separazione dei compiti. Se segui la procedura descritta in questo argomento, gli utenti e i servizi che gestiscono le chiavi di crittografia sono diversi dagli utenti e dai servizi che le utilizzano. Un progetto contiene e gestisce le chiavi, mentre l'altro archivia i dati criptati in un bucket Cloud Storage e li decripta secondo necessità.

Crea progetti

I progetti vengono creati nella console Google Cloud. Per istruzioni dettagliate, consulta la guida rapida di Identity and Access Management.

All'interno dell'organizzazione:

  1. Crea un progetto Google Cloud che contenga il bucket Cloud Storage utilizzato per archiviare i secret. I secret verranno archiviati come oggetti nel bucket. Nei passaggi seguenti, questo progetto è denominato my-storage-project.

  2. Facoltativamente, crea un secondo progetto Google Cloud per gestire le chiavi Cloud KMS utilizzate per criptare e decriptare il secret. Nei passaggi riportati di seguito, questo progetto si chiama my-kms-project.

    Puoi scegliere di utilizzare lo stesso progetto Google Cloud sia per my-storage-project sia per my-kms-project.

  3. Per ogni progetto, abilita l'API Cloud KMS e abilita la fatturazione, seguendo i passaggi nella sezione Prima di iniziare della guida rapida di Cloud KMS.

Crea utenti

Puoi creare gli utenti e concedere loro i ruoli nella console Google Cloud. Per istruzioni dettagliate, consulta la guida rapida di Identity and Access Management.

Questa procedura crea due utenti. key-admin gestisce le chiavi di crittografia e key-user può criptare e decriptare i dati utilizzando le chiavi.

Esegui questa procedura nel progetto my-kms-project.

  1. Crea l'utente key-admin. Per creare utenti, devi disporre del ruolo roles/resourcemanager.organizationAdmin per il progetto my-kms-project.

  2. Concedi a key-admin il ruolo di Identity and Access Management roles/cloudkms.admin. key-admin può creare e gestire le chiavi.

  3. Crea l'utente key-user.

  4. Concedi a key-user il ruolo IAM roles/cloudkms.cryptoKeyEncrypterDecrypter. key-user può usare chiavi per criptare e decriptare i dati.

Crea un bucket di archiviazione

Esegui questa procedura nel progetto my-storage-project.

  1. Crea un bucket di archiviazione denominato my-bucket.
  2. Concedi a key-user il ruolo roles/storage.objectAdmin per il bucket di archiviazione my-bucket.

Crea una chiave di crittografia

Esegui questa procedura come utente key-admin nel progetto my-kms-project.

  1. Crea un keyring denominato storage. Il nome di un keyring è univoco per il progetto. Non è possibile rinominare o eliminare un keyring. Utilizza Google Cloud CLI per creare un keyring.

    gcloud kms keyrings create storage \
      --location global
    
  2. Creare una chiave denominata my-key nel keyring storage ai fini della crittografia. Il nome di una chiave è univoco per il keyring. Una chiave non può essere rinominata o eliminata, ma le sue versioni della chiave possono essere eliminate. Utilizza Google Cloud CLI per creare la chiave. La versione iniziale della chiave viene creata automaticamente e diventa la versione primaria.

    gcloud kms keys create my-key \
     --location global \
     --keyring storage \
     --purpose encryption
    

Scopri di più sulla creazione di keyring e chiavi.

Cripta il file che contiene il secret

Esegui questa procedura come utente key-user, utilizzando entrambi i progetti.

  1. Crea sulla tua macchina locale un file denominato my-secret.txt, contenente il testo "This is my secret" (Questo è il mio segreto).

    echo "This is my secret" > my-secret.txt
    
  2. Cripta my-secret.txt utilizzando la chiave my-key nel progetto my-kms-project. Scrivi il file criptato in mysecret.txt.encrypted.

    gcloud kms encrypt \
     --location global \
     --keyring storage \
     --key my-key \
     --plaintext-file my-secret.txt \
     --ciphertext-file my-secret.txt.encrypted
    

    Per ulteriori informazioni sulla crittografia dei dati, consulta la guida rapida alla crittografia dei dati.

    Utilizza raw-encrypt invece per la crittografia simmetrica non elaborata.

  3. Carica il file my-secret.txt.encrypted criptato nel bucket di archiviazione my-bucket nel progetto my-storage-project. Puoi utilizzare il comando gsutil.

    gsutil cp my-secret.txt.encrypted gs://my-storage-bucket
    

    Puoi scoprire di più sul caricamento di oggetti in un bucket di archiviazione.

  4. [Facoltativo] Elimina il file my-secret.txt in testo non crittografato dalla macchina locale. Si tratta di una buona pratica per i file contenenti dati sensibili non criptati.

Il bucket di archiviazione my-storage-bucket ora contiene il file my-secret.txt.encrypted, che è criptato con la chiave my-key,

Decripta il file che contiene il secret

Esegui questi passaggi come utente key-user, utilizzando entrambi i progetti.

  1. Scarica il file my-secret.txt.encrypted dal bucket di archiviazione my-bucket. Puoi utilizzare il comando gsutil.

    gsutil cp gs://my-storage-bucket/my-secret.txt.encrypted .
    

    Scopri di più sul download di oggetti da un bucket di archiviazione.

  2. Prova a leggere il file utilizzando un comando come less o un editor di testo. Tieni presente che non si tratta di un file di solo testo.

  3. Decripta il my-secret.txt.encrypted e salva i dati decriptati in un nuovo file di testo non crittografato chiamato my-secret.txt.decrypted, utilizzando la stessa chiave che hai utilizzato per criptare my-secret.txt.

    gcloud kms decrypt --location global \
     --keyring storage \
     --key my-key \
     --ciphertext-file my-secret.txt.encrypted \
     --plaintext-file my-secret.txt.decrypted
    

    Per ulteriori informazioni sulla decrittografia dei dati, consulta la guida rapida alla crittografia dei dati.

    Utilizza raw-decrypt invece per la crittografia simmetrica non elaborata.

  4. Leggi il file my-secret.txt.decrypted utilizzando il comando cat. I suoi contenuti sono identici ai contenuti originali di my-secret.txt.

    cat my-secret.txt.decrypted
    
    This is my secret.
  5. [Facoltativo] Elimina i file my-secret.txt.encrypted e my-secret.txt.decrypted dalla macchina locale.

Eseguire la pulizia

Per eseguire la pulizia, elimina tutti i file creati nella macchina locale, quindi elimina i progetti [MY_KMS_PROJECT] e [MY_STORAGE_PROJECT].

Passaggi successivi