Questo documento descrive come configurare le chiavi di crittografia gestite dal cliente (CMEK) per Pub/Sub.
Pub/Sub cripta i messaggi con Google-owned and Google-managed encryption keys per impostazione predefinita. Non è necessaria alcuna configurazione aggiuntiva per utilizzare Google-owned and Google-managed encryption keys.
Informazioni su CMEK
Le chiavi CMEK sono chiavi di crittografia di tua proprietà, gestite e archiviate in Cloud Key Management Service (Cloud KMS). Se hai bisogno di un maggiore controllo sulle chiavi di crittografia utilizzate per proteggere i dati Pub/Sub, puoi utilizzare le chiavi CMEK. Alcune organizzazioni impongono anche l'utilizzo di chiavi di crittografia gestite dal cliente.
Le chiavi CMEK ti danno il pieno controllo sulle chiavi di crittografia, consentendoti di gestirne il ciclo di vita, la rotazione e le norme di accesso. Quando configuri Pub/Sub con una chiave CMEK, il servizio cripta automaticamente tutti i dati utilizzando la chiave specificata. L'utilizzo di Cloud KMS per CMEK potrebbe comportare costi aggiuntivi a seconda dei tuoi pattern di utilizzo.
Ogni messaggio viene criptato nei seguenti stati e livelli:
-
- Livello hardware
- Livello dell'infrastruttura
- Livello di applicazione
A livello di applicazione, Pub/Sub cripta singolarmente i messaggi in entrata non appena vengono ricevuti. Questa implementazione aggiunge le seguenti funzionalità:
- Mantiene i messaggi criptati sui link interni del data center
- Attiva le chiavi di crittografia gestite dal cliente (CMEK)
CMEK per Pub/Sub
Pub/Sub utilizza il pattern di crittografia envelope con CMEK. In questo approccio, i messaggi non vengono criptati da Cloud KMS. Cloud KMS viene invece utilizzato per criptare le chiavi di crittografia dei dati (DEK) create da Pub/Sub per ogni argomento. Queste DEK vengono archiviate solo in formato criptato o sottoposto a wrapping da Pub/Sub. Prima di archiviare una DEK, il servizio la invia a Cloud KMS per essere criptata con la chiave di crittografia della chiave (KEK) specificata nell'argomento. Una nuova DEK viene generata per ogni argomento circa ogni sei ore.
Prima di pubblicare i messaggi in una sottoscrizione, Pub/Sub li cripta utilizzando la DEK più recente generata per l'argomento. Pub/Sub decripta i messaggi poco prima che vengano recapitati ai sottoscrittori.
Prima di iniziare
Puoi configurare CMEK per Pub/Sub utilizzando la consoleGoogle Cloud o Google Cloud CLI.
Completa le seguenti attività:
Abilita l'API Cloud KMS.
Crea un keyring e una chiave in Cloud KMS. Le chiavi e i portachiavi non possono essere eliminati.
Per istruzioni su come svolgere queste attività, consulta la guida rapida di Cloud KMS.
Poiché le risorse Pub/Sub sono globali, ti consigliamo vivamente di utilizzare chiavi Cloud KMS globali per configurare argomenti abilitati a CMEK. A seconda delle località dei publisher e degli abbonati di un argomento, l'utilizzo di una chiave Cloud KMS regionale potrebbe introdurre dipendenze non necessarie dai link di rete tra regioni.
Ruoli e autorizzazioni richiesti per configurare CMEK
Pub/Sub utilizza un Google Cloud agente di servizio per accedere a Cloud KMS. L'agente di servizio viene gestito internamente da Pub/Sub per ogni progetto e non è visibile nella pagina Account di servizio della console Google Cloud per impostazione predefinita.
L'agente di servizio Pub/Sub ha il formato
service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
.
Pub/Sub richiede autorizzazioni specifiche per criptare e decriptare i dati utilizzando CMEK.
Per configurare l'accesso richiesto, completa i seguenti passaggi:
Concedi al service agent Pub/Sub il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS (
roles/cloudkms.cryptoKeyEncrypterDecrypter
).gcloud kms keys add-iam-policy-binding CLOUD_KMS_KEY_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
Sostituisci quanto segue:
CLOUD_KMS_KEY_NAME: il nome della chiave Cloud KMS.
La chiave è nel formato
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY
.Un esempio è
projects/test-project/locations/us-central1/keyRings/test-keyring/cryptoKeys/test-key
.PROJECT_NUMBER: il numero di progetto del progetto Pub/Sub.
Per saperne di più sulla concessione dei ruoli IAM, consulta Concessione di ruoli a una risorsa.
Configura un argomento con CMEK
Puoi configurare CMEK per un argomento utilizzando la console Google Cloud o gcloud CLI.
Console
Per creare un argomento con CMEK:
Nella console Google Cloud , vai alla pagina Argomenti di Pub/Sub.
Fai clic su Crea argomento.
Nel campo ID argomento, inserisci un ID per l'argomento.
Per ulteriori informazioni sulla denominazione degli argomenti, consulta le linee guida per la denominazione.
Per Crittografia, fai clic su Chiave Cloud KMS.
Seleziona il tipo di chiave. Se non vedi il menu a discesa Seleziona una chiave gestita dal cliente, assicurati di aver abilitato l'API Cloud KMS per il progetto.
Fai clic su Crea argomento.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
-
Per creare un argomento con CMEK, esegui il comando
gcloud pubsub topics create
:gcloud pubsub topics create TOPIC_ID --topic-encryption-key=ENCRYPTION_KEY
Sostituisci quanto segue:
-
TOPIC_ID: L'ID o il nome dell'argomento.
Per saperne di più su come denominare un argomento, vedi Linee guida per la denominazione di un argomento, un abbonamento, uno schema o uno snapshot.
-
ENCRYPTION_KEY: l'ID della chiave CMEK da utilizzare per l'argomento.
Il formato è
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY
.
-
Aggiornare CMEK per un argomento
Puoi modificare la chiave CMEK collegata a un argomento Pub/Sub. Puoi utilizzare gcloud CLI per aggiornare la chiave CMEK. Tuttavia, questa modifica non si applica retroattivamente.
I messaggi pubblicati nell'argomento prima delle modifiche alla chiave rimangono criptati con la chiave originale. Se un argomento è stato creato senza una chiave CMEK, puoi aggiungerne una in un secondo momento. I messaggi esistenti continuano a essere protetti con la crittografia Google-owned and Google-managed encryption keyspredefinita. La modifica della chiave CMEK di un argomento non crittografa nuovamente i messaggi pubblicati in precedenza. Questi messaggi continuano a essere protetti con la chiave con cui sono stati originariamente criptati.
Pub/Sub ha un meccanismo di memorizzazione nella cache delle chiavi che dura circa 5 minuti. Potrebbe essere necessario questo periodo di tempo prima che Pub/Sub riconosca e inizi a utilizzare la nuova versione della chiave.
Audit log
Cloud KMS genera audit log quando le chiavi vengono attivate, disattivate o utilizzate da Pub/Sub per criptare e decriptare i messaggi. È utile per eseguire il debug dei problemi relativi alla disponibilità di pubblicazione o distribuzione.
Le chiavi Cloud KMS sono associate ai log di controllo per le risorse degli argomenti Pub/Sub. Pub/Sub non include altre informazioni relative a Cloud KMS.
Prezzi e costi
Per le seguenti richieste Pub/Sub, l'utilizzo di CMEK comporta costi per l'accesso al servizio Cloud KMS in base ai prezzi di Pub/Sub:
Per ogni argomento che utilizza CMEK, una nuova DEK viene criptata e archiviata ogni sei ore.
La chiave viene utilizzata per decriptare le DEK ogni sei minuti. La decriptazione avviene tre volte, una per ogni zona della regione in cui viene eseguito il servizio Pub/Sub.
Ad esempio, considera un argomento con:
Almeno un abbonamento
Client publisher e abbonati nella stessa regione
Il numero di operazioni di crittografia Cloud KMS può essere stimato come segue:
1 key access for ENCRYPT * (30 days / month * 24 hours / day) / 6 hours + 3 key accesses for DECRYPT * (30 days / month * 24 hours / day * 60 minutes / hour ) / 6 minutes = 21,720 Cloud KMS key access events
In pratica, le chiavi potrebbero essere recuperate con maggiore o minore frequenza a seconda dei pattern di accesso. Utilizza questi numeri solo come stime.
Monitoraggio e risoluzione dei problemi
I problemi di accesso alle chiavi possono avere i seguenti effetti:
Ritardi nel recapito dei messaggi
Errori di pubblicazione
Monitora gli errori di pubblicazione e pull request utilizzando le seguenti
metriche, raggruppate per response_class
e response_code
:
topic/send_request_count
subscription/pull_request_count
subscription/streaming_pull_response_count
Risposta StreamingPull ha un tasso di errore del 100%. Ciò indica che lo stream è terminato, non che le richieste
non vanno a buon fine. Per monitorare StreamingPull, cerca il codice di risposta FAILED_PRECONDITION
.
La pubblicazione e la distribuzione dei messaggi possono non riuscire con errori FAILED_PRECONDITION
per
diversi motivi.
La chiave Cloud KMS potrebbe essere disattivata. Per maggiori dettagli, vedi Disattivare e riattivare le chiavi in questa pagina.
Se utilizzi chiavi gestite esternamente tramite Cloud EKM, consulta il riferimento agli errori di Cloud EKM.
Per gli abbonamenti push, non è possibile rilevare direttamente problemi di consegna specifici di CMEK. Invece:
Monitora le dimensioni e l'età del backlog di un abbonamento push utilizzando
subscription/num_unacked_messages
.Monitora
subscription/oldest_unacked_message_age
per picchi insoliti.Utilizza gli errori di pubblicazione e i log di controllo CMEK per individuare i problemi.
Disattivazione e riattivazione delle chiavi
Esistono due modi per impedire a Pub/Sub di decriptare i dati dei messaggi:
Consigliato: disattiva la chiave Cloud KMS che hai associato all'argomento utilizzando Pub/Sub. Questo approccio interessa solo gli argomenti e le sottoscrizioni Pub/Sub associati a quella chiave specifica.
Revoca il ruolo Autore crittografia/decrittografia CryptoKey Pub/Sub dal account di servizio Pub/Sub (
service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com
) utilizzando IAM. Questo approccio interessa tutti gli argomenti Pub/Sub del progetto e gli abbonamenti che contengono messaggi criptati utilizzando CMEK.
Sebbene nessuna delle due operazioni confermi la revoca immediata dell'accesso, le modifiche IAM si propagano in genere più rapidamente. Per saperne di più, consulta Coerenza delle risorse Cloud KMS e Propagazione della modifica di accesso.
Quando Pub/Sub non riesce ad accedere a una chiave Cloud KMS, la pubblicazione e la distribuzione dei messaggi con StreamingPull o pull non vanno a buon fine e vengono visualizzati errori FAILED_PRECONDITION
. La distribuzione dei messaggi agli endpoint push verrà interrotta. Per
riprendere la pubblicazione e la distribuzione,
ripristina l'accesso alla
chiave Cloud KMS.
Una volta che la chiave Cloud KMS è accessibile a Pub/Sub, la pubblicazione è disponibile entro 12 ore e la distribuzione dei messaggi riprende entro 2 ore.
Sebbene interruzioni intermittenti di Cloud KMS di durata inferiore a un minuto non interrompano in modo significativo la pubblicazione e la distribuzione, l'indisponibilità prolungata di Cloud KMS ha lo stesso effetto della revoca della chiave.