Crittografia dei dati delle applicazioni

Questa pagina 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 memorizzati 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 per attività crittografiche comuni. Può essere utilizzato per criptare i dati prima che accedano ai Google Cloud data store e supporta Java, Python, C++, Go, Objective-C e altri linguaggi, nonché servizi di database relazionali e di archiviazione oggetti.

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 Google Cloud organizzazione, 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 questa guida, 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.

Crea i seguenti progetti all'interno della tua organizzazione:

  1. Crea un Google Cloud progetto contenente il bucket Cloud Storage utilizzato per archiviare i secret. I secret verranno archiviati come oggetti nel bucket. Questo progetto si chiama STORAGE_PROJECT_ID.

  2. Crea un secondo Google Cloud progetto per gestire le chiavi Cloud KMS utilizzate per criptare e decriptare il secret. Questo progetto si chiama KEY_PROJECT_ID.

  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. L'amministratore delle chiavi gestisce le chiavi di crittografia, mentre l'utente delle chiavi può criptare e decriptare i dati utilizzando le chiavi.

Esegui questa procedura nel progetto KEY_PROJECT_ID.

  1. Crea l'account amministratore principale.

  2. Concedi il ruolo Identity and Access Management roles/cloudkms.admin all'amministratore delle chiavi. Questo ruolo consente all'amministratore delle chiavi di creare e gestire le chiavi.

  3. Crea l'account utente principale.

  4. Concedi il ruolo IAM roles/cloudkms.cryptoKeyEncrypterDecrypter all'utente principale. Questo ruolo consente all'utente chiave di criptare e decriptare i dati.

Crea un bucket di archiviazione

Esegui questa procedura nel progetto STORAGE_PROJECT_ID.

  1. Crea un bucket di archiviazione denominato STORAGE_BUCKET.
  2. Concedi il ruolo roles/storage.objectAdmin al separato per oggetti STORAGE_BUCKET all'account utente della chiave.

Crea una chiave di crittografia

Esegui questa procedura come utente amministratore principale nel progettoKEY_PROJECT_ID.

  1. Crea una chiave automatizzata. Il nome di un mazzo di chiavi deve essere univoco all'interno del progetto. Non è possibile rinominare o eliminare un keyring. Utilizza Google Cloud CLI per creare un keyring.

    gcloud kms keyrings create KEY_RING \
      --location LOCATION
    

    Sostituisci quanto segue:

    • KEY_RING: il nome da utilizzare per il portachiavi con spazio di archiviazione, ad esempio storage.
    • LOCATION: la posizione in cui vuoi creare il portachiavi. Deve trovarsi geograficamente vicino alla posizione in cui vuoi creare il bucket Cloud Storage.
  2. Crea una chiave di crittografia nel keyring. Il nome della chiave deve essere univoco all'interno del portachiavi. Le chiavi non possono essere rinominate o eliminate, ma le relative versioni possono essere distrutte. 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 KEY_NAME \
      --location LOCATION \
      --keyring KEY_RING \
      --purpose encryption
    

    Sostituisci quanto segue:

    • LOCATION: la posizione in cui hai creato il mazzo di chiavi.
    • KEY_NAME: il nome da utilizzare per la chiave di archiviazione, ad esempio storage.
    • KEY_RING: il nome che hai utilizzato per il portachiavi dello spazio di archiviazione, ad esempio storage.

    Nota: per utilizzare le chiavi di crittografia simmetrica non elaborata, imposta il campo Scopo su raw-encryption.

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

Crittografa il file che contiene il secret

Esegui questa procedura come account utente principale, lavorando in entrambi i progetti.

  1. Salva il secret sulla tua macchina locale.

    echo "SECRET_TEXT" > PATH_TO_SECRET
    

    Sostituisci quanto segue:

    • SECRET_TEXT: il segreto che vuoi proteggere, in testo normale, ad esempio this is a secret.
    • PATH_TO_SECRET: il percorso in cui vuoi creare il segreto, ad esempio secret.txt.
  2. Crittografa il secret utilizzando Cloud KMS e la chiave di crittografia.

    gcloud kms encrypt \
      --location LOCATION \
      --keyring KEY_RING \
      --key KEY_NAME \
      --plaintext-file PATH_TO_SECRET \
      --ciphertext-file PATH_TO_ENCRYPTED_SECRET
    

    Sostituisci quanto segue:

    • LOCATION: la posizione in cui hai creato il mazzo di chiavi.
    • KEY_RING: il nome della chiave automatizzata.
    • KEY_NAME: il nome della chiave di crittografia.
    • PATH_TO_SECRET: il percorso in cui hai creato il segreto.
    • PATH_TO_ENCRYPTED_SECRET: il percorso in cui vuoi memorizzare il segreto criptato, ad esempio secret.txt.encrypted.

    Per scoprire di più sulla crittografia dei dati, segui la guida introduttiva alla crittografia dei dati.

    Per la crittografia simmetrica non elaborata, utilizza invece raw-encrypt.

  3. Carica il file segreto criptato nel bucket di archiviazione. Puoi utilizzare il seguente comando gcloud CLI:

    gcloud storage cp PATH_TO_ENCRYPTED_SECRET gs://STORAGE_BUCKET
    

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

  4. (Facoltativo) Elimina il file segreto in testo normale (PATH_TO_SECRET) dalla macchina locale. Questa è una buona prassi per i file contenenti dati sensibili non criptati.

Il bucket di archiviazione STORAGE_BUCKET ora contiene il file segreto criptato, che viene criptato utilizzando la chiave di crittografia KEY_NAME.

Decripta il file che contiene il secret

Esegui questi passaggi come account utente principale, lavorando in entrambi i progetti.

  1. Scarica il file della chiave segreta criptata dal bucket di archiviazione. Puoi utilizzare il seguente comando gcloud CLI:

    gcloud storage cp gs://STORAGE_BUCKET/PATH_TO_ENCRYPTED_SECRET .
    

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

  2. Decripta il file utilizzando la stessa chiave utilizzata per criptarlo.

    gcloud kms decrypt --location LOCATION \
      --keyring KEY_RING \
      --key KEY_NAME \
      --ciphertext-file PATH_TO_ENCRYPTED_SECRET \
      --plaintext-file PATH_TO_DECRYPTED_SECRET
    

    Sostituisci quanto segue:

    • LOCATION: la posizione in cui hai creato il mazzo di chiavi.
    • KEY_RING: il nome della chiave automatizzata.
    • KEY_NAME: il nome della chiave di crittografia.
    • PATH_TO_ENCRYPTED_SECRET: il percorso del segreto criptato scaricato, ad esempio secret.txt.encrypted.
    • PATH_TO_DECRYPTED_SECRET: il percorso in cui vuoi memorizzare il segreto decriptato, ad esempio secret_decrypted.txt.

    Per scoprire di più sulla decrittografia dei dati, segui la guida introduttiva alla crittografia dei dati.

    Per la crittografia simmetrica non elaborata, utilizza invece raw-decrypt.

    Ora puoi leggere il testo non criptato decriptato dello secret utilizzando cat o un editor di testo. I contenuti sono identici a quelli originali di PATH_TO_SECRET.

  3. (Facoltativo) Elimina i file PATH_TO_ENCRYPTED_SECRET e PATH_TO_DECRYPTED_SECRET dalla macchina locale.

Pulizia

Per eseguire la pulizia, elimina tutti i file che hai creato sulla macchina locale, quindi elimina i progetti KEY_PROJECT_ID e STORAGE_PROJECT_ID.

Passaggi successivi