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:
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.
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.
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.
Crea l'utente
key-admin
. Per creare utenti, devi disporre del ruoloroles/resourcemanager.organizationAdmin
per il progetto my-kms-project.Concedi a
key-admin
il ruolo di Identity and Access Managementroles/cloudkms.admin
.key-admin
può creare e gestire le chiavi.Crea l'utente
key-user
.Concedi a
key-user
il ruolo IAMroles/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
.
- Crea un bucket di archiviazione denominato
my-bucket
. - 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.
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
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.
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
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.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.
[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.
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.
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.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.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.
[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
- Scopri di più sulla gestione dei secret.
- Scopri di più sulla separazione dei compiti.
- Scopri come concedere, modificare e revocare l'accesso alle risorse.
- Scopri di più sulla creazione di un account di servizio.