Crittografia dei dati delle applicazioni

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

In questo esempio, i dati criptati vengono trasmessi a Google Cloud e archiviati in un bucket Cloud Storage. Cloud Storage supporta anche la crittografia lato server automatica con chiavi di crittografia gestite dal cliente, che automatizza l'intera procedura. 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 e multipiattaforma che fornisce API semplici e al riparo da usi impropri per attività crittografiche comuni. Può essere utilizzato per criptare i dati prima che accedano ai data store di Google Cloud e supporta Java, Python, C++, Go, Objective-C e altri linguaggi, nonché servizi di archiviazione di oggetti e database relazionali.

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

Se segui queste istruzioni, le chiavi e tutte le operazioni di crittografia rimangono in Google Cloud e devi utilizzare Cloud KMS per la decrittografia. La crittografia simmetrica non elaborata ti consente di criptare o decriptare i dati localmente on-premise o di spostare i dati criptati tra librerie e fornitori 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, attivare la fatturazione, creare utenti e gestire le autorizzazioni all'interno di questi progetti. Il ruolo roles/resourcemanager.organizationAdmin concede questa autorizzazione.

Configurazione

Ti consigliamo di utilizzare due progetti e due utenti per garantire la separazione dei compiti. Se segui i passaggi descritti in questo argomento, gli utenti e i servizi che gestiscono le chiavi di crittografia sono distinti 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 in base alle esigenze.

Crea progetti

Puoi creare progetti 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 contenente il bucket Cloud Storage utilizzato per archiviare i secret. I secret verranno archiviati come oggetti nel bucket. Nei passaggi riportati di seguito, questo progetto è indicato come 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 è denominato 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 la fatturazione, seguendo i passaggi descritti nella sezione Prima di iniziare della guida rapida di Cloud KMS.

Crea utenti

Puoi creare utenti e conceder 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 avere il ruolo roles/resourcemanager.organizationAdmin per il progetto my-kms-project.

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

  3. Crea l'utente key-user.

  4. Concedi all'utente key-user il ruolo IAM roles/cloudkms.cryptoKeyEncrypterDecrypter. key-user può utilizzare le 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 una chiave automatizzata è 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. Crea una chiave denominata my-key nel keyring storage, per la crittografia. Il nome di una chiave è univoco per il keyring. Una chiave non può essere rinominata o eliminata, ma le relative versioni possono essere eliminate. Utilizza Google Cloud CLI per creare la chiave. Viene creata automaticamente una versione iniziale della chiave che diventa la versione principale.

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

Scopri di più sulla creazione di chiavi e chiavi automatizzate.

Crittografa il file che contiene il secret

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

  1. Sul computer locale, crea un file denominato my-secret.txt, che contiene il testo "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 scoprire di più sulla crittografia dei dati, segui la guida introduttiva alla crittografia dei dati.

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

  3. Carica il file my-secret.txt.encrypted criptato nel my-bucket bucket di archiviazione del progetto my-storage-project. Puoi utilizzare il seguente comando gcloud CLI:

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

    Scopri di più sul caricamento di oggetti in un bucket di archiviazione.

  4. [Facoltativo] Elimina il file my-secret.txt in testo non cifrato dalla macchina locale. Questa è una buona prassi per i file contenenti dati sensibili non criptati.

Il bucket di archiviazione my-storage-bucket ora contiene il file my-secret.txt.encrypted, che viene criptato utilizzando 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 my-bucket bucket di archiviazione. Puoi utilizzare il seguente comando gcloud CLI:

    gcloud storage 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 testo normale.

  3. Decripta my-secret.txt.encrypted e salva i dati decriptati in un nuovo file di testo normale denominato my-secret.txt.decrypted utilizzando la stessa chiave utilizzata 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 scoprire di più sulla decrittografia dei dati, segui la guida introduttiva alla crittografia dei dati.

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

  4. Leggi il file my-secret.txt.decrypted utilizzando il comando cat. I suoi contenuti sono identici a quelli 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 dal computer locale.

Pulizia

Per eseguire la pulizia, elimina tutti i file che hai creato sulla macchina locale, quindi elimina i progetti [MY_KMS_PROJECT] e [MY_STORAGE_PROJECT].

Passaggi successivi