Per impostazione predefinita, Pub/Sub cripta i contenuti inattivi dei clienti at rest. Pub/Sub gestisce la crittografia senza che tu debba eseguire ulteriori azioni. Questa opzione è denominata crittografia predefinita di Google.
Se vuoi controllare le chiavi di crittografia, puoi utilizzare le chiavi di crittografia gestite dal cliente (CMEK) in Cloud KMS con i servizi integrati con CMEK, incluso Pub/Sub. L'utilizzo delle chiavi Cloud KMS ti consente di controllare il livello di protezione , la località, la pianificazione della rotazione, le autorizzazioni di utilizzo e di accesso e i limiti crittografici. Con Cloud KMS puoi inoltre monitorare l'utilizzo delle chiavi, visualizzare gli audit log e controllare i cicli di vita delle chiavi. Invece di Google, sei tu ad avere la proprietà e la gestione delle chiavi di crittografia della chiave (KEK) simmetriche che proteggono i tuoi dati. Puoi controllare e gestire queste chiavi in Cloud KMS.
Dopo aver configurato le risorse con le CMEK, l'esperienza di accesso alle risorse Pub/Sub è simile a quella della crittografia predefinita di Google. Per saperne di più sulle opzioni di crittografia, consulta Chiavi di crittografia gestite dal cliente (CMEK).
CMEK con Autokey di Cloud KMS
Puoi creare le CMEK manualmente per proteggere le risorse Pub/Sub oppure utilizzare Cloud KMS Autokey. Con Autokey, le chiavi e le chiavi automatizzate vengono generate on demand per supportare la creazione delle risorse in Pub/Sub. Vengono creati gli agenti di servizio che utilizzano le chiavi per le operazioni di crittografia e decrittografia, se non esistono già, e ricevono i ruoli IAM (Identity and Access Management) richiesti. Per saperne di più, consulta la panoramica di Autokey.
Come funziona CMEK con Pub/Sub
Quando configuri Pub/Sub con 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 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 dei data center
- Abilita le chiavi di crittografia gestite dal cliente (CMEK)
Pattern di crittografia envelope
Pub/Sub utilizza il pattern di crittografia envelope con CMEK. Con 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 wrapped da Pub/Sub. Prima di archiviare una DEK, il servizio la invia a Cloud KMS per criptarla con la chiave di crittografia della chiave (KEK) specificata nell'argomento. Viene generata una nuova DEK per ogni argomento all'incirca ogni sei ore.
Prima che Pub/Sub pubblichi i messaggi in una sottoscrizione, li cripta utilizzando la DEK più recente generata per l'argomento. Pub/Sub decripta i messaggi poco prima che vengano consegnati ai sottoscrittori.
Configurare CMEK con Pub/Sub
Puoi configurare CMEK manualmente o utilizzando Autokey.
Prima di iniziare
Puoi configurare CMEK per Pub/Sub utilizzando la Google Cloud console 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 keyring non possono essere eliminati.
Per istruzioni su come eseguire queste attività, consulta Creare un key ring e Creare una chiave.
Poiché le risorse Pub/Sub sono globali, ti consigliamo vivamente di utilizzare le chiavi Cloud KMS globali per configurare gli argomenti abilitati per CMEK. A seconda delle località dei publisher e dei sottoscrittori 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
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 per impostazione predefinita nella pagina Service account della Google Cloud console.
Il service agent 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.
Completa i seguenti passaggi per configurare l'accesso richiesto:
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.cryptoKeyEncrypterDecrypterSostituisci quanto segue:
CLOUD_KMS_KEY_NAME: il nome della chiave Cloud KMS.
La chiave ha il 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 Identity and Access Management, consulta Concedere ruoli a una risorsa.
Configurare manualmente un argomento con CMEK
Puoi configurare manualmente CMEK per un argomento utilizzando la Google Cloud console o gcloud CLI.
Console
Per creare un argomento con CMEK, segui questi passaggi:
Nella Google Cloud console, vai alla pagina Argomenti di Pub/Sub.
Fai clic su Crea argomento.
Nel campo ID argomento, inserisci un ID per l'argomento.
Per saperne di più 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
-
Nella Google Cloud console, attiva Cloud Shell.
Nella parte inferiore della Google Cloud console viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già inclusa e installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
-
Per creare un argomento con CMEK, esegui il
gcloud pubsub topics createcomando: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, consulta Linee guida per la denominazione di un argomento, una sottoscrizione, uno schema o uno snapshot.
-
ENCRYPTION_KEY: l'ID della CMEK da utilizzare per l'argomento.
Il formato è
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.
-
Aggiornare manualmente un argomento CMEK
Puoi aggiungere, modificare o rimuovere la CMEK collegata a un argomento Pub/Sub. Puoi utilizzare gcloud CLI per aggiornare la CMEK. Tuttavia, questa modifica non viene applicata in modo retroattivo.
I messaggi pubblicati nell'argomento prima delle modifiche della chiave rimangono criptati con la chiave originale, indipendentemente dal fatto che si tratti di una CMEK o Google-owned and Google-managed encryption key. La modifica della CMEK di un argomento non cripta nuovamente i messaggi pubblicati in precedenza. Questi messaggi rimangono protetti con la chiave con cui sono stati criptati originariamente, pertanto i dati dei messaggi all'interno di un argomento potrebbero comunque dipendere dalla chiave precedente per un massimo di 31 giorni, a seconda della durata di conservazione dei messaggi specificata nell'argomento o in una delle relative sottoscrizioni.
Pub/Sub ha un meccanismo di memorizzazione nella cache delle chiavi che dura circa 30 minuti. Potrebbe essere necessario questo periodo di tempo prima che Pub/Sub riconosca e inizi a utilizzare una nuova chiave modificata manualmente nella configurazione dell'argomento.
Rotazione della chiave Cloud KMS in Pub/Sub
Le modifiche alla configurazione delle chiavi, come rotazione della chiave in Cloud KMS, non attivano direttamente la creazione di chiavi di crittografia dei dati in Pub/Sub. Potrebbero essere necessarie fino a 12 ore prima che Pub/Sub inizi a utilizzare le nuove versioni delle chiavi per criptare i dati dei messaggi.
Come per le modifiche manuali alla configurazione delle impostazioni di crittografia in Pub/Sub, queste modifiche non vengono applicate in modo retroattivo ai messaggi pubblicati in precedenza. I messaggi esistenti continuano a essere protetti con le versioni precedenti della chiave di crittografia. Questi messaggi rimangono protetti con la chiave con cui sono stati criptati originariamente, pertanto i dati dei messaggi all'interno di un argomento potrebbero comunque dipendere dalla versione della chiave precedente per un massimo di 31 giorni, a seconda della durata di conservazione dei messaggi specificata nell'argomento o in una delle relative sottoscrizioni.
Configurare un argomento con Cloud KMS Autokey
Per saperne di più sull'utilizzo di Cloud KMS Autokey con Pub/Sub, consulta Cloud KMS con Autokey.
Audit log
Cloud KMS genera audit log quando le chiavi vengono abilitate, disabilitate o utilizzate da Pub/Sub per criptare e decriptare i messaggi. È utile per il debug dei problemi relativi alla disponibilità di pubblicazione o consegna.
Le chiavi Cloud KMS sono collegate agli audit log 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 pricing:
Per ogni argomento che utilizza CMEK, viene criptata e archiviata una nuova DEK ogni sei ore.
La chiave viene utilizzata per decriptare le DEK ogni sei minuti. La decrittografia avviene tre volte, una per ogni zona nella regione in cui viene eseguito il servizio Pub/Sub.
Ad esempio, considera un argomento con:
Almeno una sottoscrizione
Client publisher e sottoscrittore nella stessa regione
Il numero di operazioni di crittografia di 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 nella consegna dei messaggi
Errori di pubblicazione
Monitora gli errori di pubblicazione e delle richieste di pull utilizzando le seguenti
metriche, raggruppate per response_class
e response_code:
topic/send_request_countsubscription/pull_request_countsubscription/streaming_pull_response_count
La risposta StreamingPull ha una percentuale di errore del 100%
. Ciò indica che lo stream è terminato, non che le richieste non sono riuscite. Per monitorare StreamingPull, cerca il codice di risposta FAILED_PRECONDITION.
La pubblicazione e la consegna dei messaggi possono non riuscire con errori FAILED_PRECONDITION per diversi motivi.
La chiave Cloud KMS potrebbe essere disabilitata. Per maggiori dettagli, vedi Disabilitare e riabilitare le chiavi in questa pagina.
Se utilizzi chiavi gestite esternamente tramite Cloud EKM, consulta il riferimento agli errori di Cloud EKM.
Per le sottoscrizioni push, non è possibile rilevare direttamente i problemi di consegna specifici di CMEK. Invece:
Monitora le dimensioni e l'età del backlog di una sottoscrizione push utilizzando
subscription/num_unacked_messages.Monitora
subscription/oldest_unacked_message_ageper eventuali picchi insoliti.Utilizza gli errori di pubblicazione e gli audit log CMEK per individuare i problemi.
Disabilitare e riabilitare le chiavi
Esistono due modi per impedire a Pub/Sub di decriptare i dati dei messaggi:
Consigliato: Disabilita 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 le sottoscrizioni che contengono messaggi criptati utilizzando CMEK.
Sebbene nessuna delle due operazioni confermi la revoca immediata dell'accesso, in genere le modifiche IAM vengono propagate 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 consegna dei messaggi con StreamingPull o pull non riesce con errori FAILED_PRECONDITION. La consegna dei messaggi agli endpoint push verrà interrotta. Per
riprendere la consegna e la pubblicazione,
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 consegna dei messaggi riprende entro 2 ore.
Sebbene sia improbabile che interruzioni intermittenti di Cloud KMS di durata inferiore a un minuto interrompano in modo significativo la pubblicazione e la consegna, la mancata disponibilità prolungata di Cloud KMS ha lo stesso effetto della revoca della chiave.