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:
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.
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.
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.
Crea l'utente
key-admin
. Per creare utenti, è necessario Ruoloroles/resourcemanager.organizationAdmin
per progetto my-kms-project.Concedi a
key-admin
il ruolo Identity and Access Management diroles/cloudkms.admin
.key-admin
può creare e gestire le chiavi.Crea l'utente
key-user
.Concedi a
key-user
il Ruolo IAM diroles/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.
- 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 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
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.
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
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.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.
[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.
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.
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.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.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.
[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
- Scopri di più sulla gestione dei secret.
- Scopri di più sulla separazione dei compiti.
- Scopri di più su come concedere, modificare e revocare l'accesso alle risorse.
- Scopri di più sulla creazione di un account di servizio.