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 crittografia lato server mediante chiavi di crittografia gestite dal cliente, che automatizza l'intero processo. Proteggere i dati dell'applicazione prima della trasmissione a Google Cloud, ti consigliamo di utilizzare Libreria Tink.

La libreria Tink è una libreria multipiattaforma e multilingue che offre funzionalità semplici a prova di uso improprio per attività crittografiche comuni. Può essere usato per criptare i dati prima che entra nei datastore Google Cloud e supporta Java, Python, C++, Go, Objective-C e altri linguaggi e servizi di archiviazione di oggetti e database relazionali.

In questa procedura dettagliata, cripti un file utilizzando Cloud KMS prima di e caricarli in un bucket. Successivamente, scarichi e decripta gli stessi dati in modo da possa leggerlo 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 decriptare.

Prima di iniziare

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

Configurazione

Consigliamo di utilizzare due progetti e due utenti per garantire la separazione dei doveri. Se segui i passaggi descritti in questo argomento, Le chiavi di crittografia gestite sono diverse dagli utenti e dai servizi che utilizzano che li rappresentano. 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

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

All'interno dell'organizzazione:

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

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

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

  3. Per ogni progetto, abilita l'API Cloud KMS e abilita la fatturazione. seguendo i passaggi nella sezione Sezione Prima di iniziare del 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, è necessario Ruolo roles/resourcemanager.organizationAdmin per progetto my-kms-project.

  2. Concedi a key-admin il ruolo Identity and Access Management di 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 di roles/cloudkms.cryptoKeyEncrypterDecrypter. key-user può usare le chiavi per criptare e decriptare i dati.

Crea un bucket di archiviazione

Esegui questa procedura nel my-storage-project progetto.

  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 al progetto. Non è possibile rinominare o eliminare un keyring. Utilizza la 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 lo scopo della crittografia. Il nome di una chiave è univoco per il keyring. Una chiave non possono essere rinominati o eliminati, ma le relative versioni della chiave possono essere eliminate. Utilizza Google Cloud CLI per creare la chiave. Una versione iniziale della chiave viene creato automaticamente e diventa la versione principale.

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

Scopri di più sulla creazione di keyring e chiavi.

Crittografa il file che contiene il secret

Esegui questa procedura come utente key-user, utilizzando entrambi in modo programmatico a gestire i progetti.

  1. Sul computer locale, crea un file denominato my-secret.txt, che contiene 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 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 su my-bucket bucket di archiviazione in my-storage-project progetto. 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 crittografato dalla richiesta locale in una macchina virtuale. 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 in modo programmatico a gestire i progetti.

  1. Scarica il file my-secret.txt.encrypted dal my-bucket bucket di archiviazione. Puoi utilizzare le seguenti opzioni 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. Avvisi 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 non crittografato denominato my-secret.txt.decrypted, utilizzando la stessa chiave che hai usato 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
    

    Puoi scoprire di più sulla decriptazione dei dati seguendo le guida rapida per la 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 my-secret.txt.encrypted e my-secret.txt.decrypted file dal computer locale.

esegui la pulizia

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

Passaggi successivi