Cloud KMS è un servizio di gestione delle chiavi ospitato nel cloud che consente di gestire le chiavi di crittografia per i servizi cloud esattamente come si gestisce la crittografia on-premise. Include il supporto per la crittografia, la decriptazione, la firma e la verifica utilizzando una serie di tipi e origini di chiavi, tra cui Cloud HSM per le chiavi supportate dall'hardware.
In questo tutorial imparerai a utilizzare le funzionalità avanzate delle API Cloud Security e Cloud Privacy, tra cui:
- Configurazione di un bucket Cloud Storage sicuro
- Gestione delle chiavi e dei dati criptati utilizzando Cloud KMS
- Visualizzazione degli audit log di Cloud Storage
Prenderai i dati abbreviati dall'Enron Corpus, li cripterai e li caricherai in Cloud Storage.
Imparerai
- Come criptare i dati e gestire le chiavi di crittografia utilizzando Key Management Service (KMS)
L'utente sfrutterà le
- Cloud KMS
- Cloud Storage
- Cloud SDK
Configurazione dell'ambiente autonoma
Se non hai ancora un Account Google (Gmail o Google Apps), devi crearne uno. Accedi alla console di Google Cloud (console.cloud.google.com) e crea un nuovo progetto:
Ricorda l'ID progetto, un nome univoco per tutti i progetti Google Cloud (il nome riportato sopra è già stato utilizzato e non funzionerà per te, mi dispiace). In questo codelab verrà chiamato PROJECT_ID
.
Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse Google Cloud.
L'esecuzione di questo codelab non dovrebbe costarti più di qualche dollaro, ma potrebbe essere più cara se decidi di utilizzare più risorse o se le lasci in esecuzione (vedi la sezione "Pulizia" alla fine di questo documento).
I nuovi utenti di Google Cloud Platform possono beneficiare di una prova senza costi di 300$.
Avvia Cloud Shell
In questo codelab utilizzerai Cloud Shell, un ambiente virtualizzato senza costi in esecuzione su Google Cloud. Nella console GCP, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:
Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:
Questa macchina virtuale è caricata con tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Salvo diversa indicazione, esegui tutti i comandi da questa shell.
Per archiviare i dati per questo tutorial, crea un bucket Cloud Storage. Poiché i nomi dei bucket Cloud Storage devono essere univoci a livello globale, aggiungi come prefisso al nome del bucket il tuo ID progetto:
$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails
Quindi, crea il bucket:
$ gsutil mb gs://${BUCKET_NAME}
L'Enron Corpus è un ampio database di oltre 600.000 email generate da 158 dipendenti della Enron Corporation. Questi dati sono stati copiati nel bucket Cloud Storage denominato gs://enron_emails/
.
Scarica uno dei file email localmente:
$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!
Ispeziona il file scaricato per verificare che si tratti effettivamente di un'email:
$ tail 1.
L'email conterrà un messaggio simile a questo:
Attached is the Delta position for 1/18... # ...
Oltre alle email, il bucket contiene anche immagini. Questo tutorial utilizza sia le email in formato testo sia le immagini.
Prima di poter utilizzare Cloud KMS, devi abilitare il servizio nel tuo progetto. Questa operazione deve essere eseguita una sola volta per progetto. Per abilitare il servizio Cloud KMS, esegui questo comando:
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
L'attivazione può richiedere fino a un minuto. Al termine, il comando segnalerà l'esito positivo.
Crea una raccolta di chiavi Cloud KMS. In Cloud KMS, un keyring è una raccolta logica di chiavi di crittografia. Il keyring contiene metadati sulle chiavi, ad esempio la loro posizione. Crea un keyring denominato my-keyring
nella regione global
:
$ gcloud kms keyrings create "my-keyring" \ --location "global"
Ora crea una chiave crittografica denominata enron-emails
con lo scopo encryption
all'interno della chiave automatizzata che hai appena creato.
$ gcloud kms keys create "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --purpose "encryption"
Apri la UI web delle chiavi crittografiche e visualizza le risorse appena create. Questa opzione è disponibile in IAM e amministrazione nel menu principale.
Puoi visualizzare e gestire i portachiavi e le chiavi di crittografia in Cloud Console.
Cripta i contenuti dell'email scaricata in precedenza utilizzando Cloud KMS. Questo tutorial utilizza lo strumento a riga di comando gcloud
, ma puoi anche criptare i dati utilizzando l'API Cloud KMS.
$ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file ./1. \ --ciphertext-file ./1.enc
Verrà creato un nuovo file sul disco 1.enc
, che contiene i contenuti del file criptato. Ora che i dati sono criptati con Cloud KMS, carica il file criptato nel bucket Cloud Storage.
$ gsutil cp ./1.enc gs://${BUCKET_NAME}
Cloud KMS è integrato con Google Cloud Identity and Access Management (IAM). I ruoli IAM di Cloud KMS sono suddivisi in due categorie:
- Autorizzazione a gestire le chiavi
- Autorizzazione a utilizzare le chiavi
Ad esempio, il ruolo roles/cloudkms.admin
consente al titolare di creare keyring e chiavi di crittografia, impostare criteri IAM ed eseguire operazioni correlate alla gestione. roles/cloudkms.cryptoKeyEncrypterDecrypter
concede al titolare l'autorizzazione a criptare e decriptare i dati, ma non include le autorizzazioni di gestione.
I ruoli IAM vengono ereditati dalla risorsa padre. Se un utente ha il ruolo roles/cloudkms.admin
nel progetto Google Cloud, è amministratore di tutte le chiavi del progetto. Se dispone di roles/cloudkms.admin
su un keyring, è amministratore di tutte le chiavi del keyring. Se dispone di roles/cloudkms.admin
su una singola chiave di crittografia, è solo amministratore di quella chiave.
Per questo esercizio, utilizza la tua identità:
$ export MY_IDENTITY=you@gmail.com # or you@example.com
Assegna all'identità la possibilità di gestire le risorse Cloud KMS nel keyring creato sopra utilizzando lo strumento a riga di comando gcloud
:
$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \ --location "global" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.admin"
Il ruolo roles/cloudkms.admin
non include l'autorizzazione per utilizzare le chiavi, ma solo per gestirle. Per concedere alla tua identità la possibilità di criptare e decriptare i dati utilizzando la chiave di crittografia enron-emails
:
$ gcloud kms keys add-iam-policy-binding "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
Tieni presente che il primo comando concede il ruolo roles/cloudkms.admin
sul portachiavi, che includerà tutte le risorse chiavi di crittografia secondarie. Il secondo comando concede roles/cloudkms.cryptoKeyEncrypterDecrypter
, ma solo sulla chiave di crittografia enron-emails
.
Puoi anche visualizzare e assegnare i ruoli nell'interfaccia utente di Cloud KMS nella console Google Cloud.
Oltre a criptare un singolo file, puoi criptare anche una raccolta di file con alcuni script. Questo esempio trasmette in streaming tutte le email per allen-p, le cripta e carica i valori criptati risultanti nel bucket Cloud Storage:
DIR="gs://enron_emails/allen-p" for file in $(gsutil ls ${DIR}/**); do ENC_NAME="$(basename ${file}).enc" gsutil cat ${file} \ | \ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file - \ --ciphertext-file - \ | \ gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME} echo "Copied ${ENC_NAME}" done
Questo codice esegue l'iterazione su tutti i file della directory specificata nel bucket Cloud Storage di esempio, li cripta utilizzando Cloud KMS e li carica in Google Cloud Storage.
Al termine dello script, puoi visualizzare i file criptati nella UI di Cloud Storage. Il risultato dovrebbe essere simile a questo:
Cloud Audit Logging ha due flussi di log, i log delle attività di amministrazione e i log degli accessi ai dati, che vengono generati dai servizi Google Cloud per aiutarti a rispondere alla domanda "Chi ha fatto cosa, dove e quando?" all'interno dei tuoi progetti Google Cloud.
Per visualizzare l'attività di qualsiasi risorsa in KMS, fai clic sul portachiavi e seleziona Visualizza attività. Verrà visualizzata l'interfaccia utente di Cloud Activity, dove dovresti vedere la creazione e tutte le modifiche apportate al KeyRing.
Hai criptato correttamente i dati utilizzando Cloud KMS e li hai archiviati in Cloud Storage.
Pulisci
Rilascia le risorse create durante questo tutorial. Elimina il bucket Cloud Storage creato in precedenza:
$ gsutil rm -r gs://${BUCKET_NAME}
Le risorse Cloud KMS non possono essere eliminate. Tuttavia, puoi eliminare il materiale della chiave in modo che non possa essere riutilizzato:
$ gcloud kms keys versions destroy "1" \ --location "global" \ --key "enron-emails" \ --keyring "my-keyring"
Argomenti trattati
- Utilizzo di Cloud IAM per gestire le autorizzazioni Cloud KMS
- Utilizzo di Cloud KMS per criptare i dati
- Utilizzo di Cloud Storage per archiviare dati criptati
- Utilizzo dell'audit logging di Cloud per visualizzare tutte le attività per chiavi e portachiavi
Passaggi successivi
- Utilizzare Cloud KMS per criptare una colonna in un database come BigQuery
- Impostare una pianificazione di rotazione automatica per le chiavi Cloud KMS
Scopri di più
- Scopri di più su come ruotare le chiavi di crittografia.
- Scopri di più sulla crittografia envelope
- Scopri di più sulla crittografia lato server per i bucket Cloud Storage
- Pubblica domande e trova risposte su Stack Overflow utilizzando il tag google-cloud-kms.
Licenza
Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.