Configurare la crittografia dei messaggi

Per impostazione predefinita, Pub/Sub cripta i contenuti inattivi dei clienti. Pub/Sub gestisce la crittografia per conto tuo senza che tu debba fare altro. Questa opzione è denominata crittografia predefinita di Google.

Se vuoi controllare le tue chiavi di crittografia, puoi utilizzare le chiavi di crittografia gestite dal cliente (CMEK) in Cloud KMS con servizi integrati con CMEK, tra cui 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 CMEK, l'esperienza di accesso alle risorse Pub/Sub è simile all'utilizzo 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 chiavi CMEK manualmente per proteggere le tue risorse Pub/Sub oppure utilizzare Cloud KMS Autokey. Con Autokey, le chiavi e le chiavi automatizzate vengono generate on demand per supportare la creazione di 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 tuoi pattern di utilizzo.

Ogni messaggio viene criptato nei seguenti stati e livelli:

A livello di applicazione, Pub/Sub cripta singolarmente i messaggi in entrata non appena vengono ricevuti. Questa implementazione aggiunge le seguenti funzionalità:

Pattern di crittografia envelope

Pub/Sub utilizza il pattern di crittografia envelope con CMEK. In questo approccio, i messaggi non vengono criptati da Cloud KMS. Invece, Cloud KMS viene 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. Viene generata una nuova DEK 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 consegnati ai sottoscrittori.

Regione della chiave Cloud KMS

Poiché le risorse Pub/Sub sono globali, ti consigliamo di utilizzare chiavi Cloud KMS globali per configurare gli argomenti abilitati per CMEK. L'utilizzo di una chiave Cloud KMS regionale può introdurre dipendenze non necessarie dai collegamenti di rete tra regioni, a seconda delle località dei publisher e degli abbonati di un argomento.

Utilizza le chiavi Cloud KMS regionali solo nelle seguenti situazioni:

In queste situazioni, tutto il traffico per l'argomento viene indirizzato alla stessa regione.

Configurare CMEK con Pub/Sub

Puoi configurare CMEK manualmente o utilizzando Autokey.

Prima di iniziare

Puoi configurare CMEK per Pub/Sub utilizzando la console Google Cloud o Google Cloud CLI.

Completa le seguenti attività:

  • Abilita l'API Cloud KMS.

  • Crea chiavi automatizzate e una chiave in Cloud KMS. Impossibile eliminare le chiavi e le chiavi automatizzate.

Per istruzioni su come svolgere queste attività, consulta Crea un portachiavi e Crea una chiave.

Ruoli e autorizzazioni richiesti

Pub/Sub utilizza un Google Cloud service agent 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 console Google Cloud .

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.

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 del progetto Pub/Sub.

Per saperne di più sulla concessione dei ruoli Identity and Access Management, consulta Concessione dei ruoli su una risorsa.

Configurare manualmente un argomento con CMEK

Puoi configurare manualmente CMEK per un argomento utilizzando la console Google Cloud o gcloud CLI.

Console

Per creare un argomento con CMEK:

  1. Nella console Google Cloud , vai alla pagina Argomenti di Pub/Sub.

    Vai ad Argomenti

  2. Fai clic su Crea argomento.

  3. 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.

  4. Per Crittografia, fai clic su Chiave Cloud KMS.

  5. 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.

  6. Fai clic su Crea argomento.

gcloud

  1. Nella console Google Cloud , attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud 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à installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. 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:

Aggiornare manualmente un argomento CMEK

Hai la flessibilità di 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 retroattivamente.

I messaggi pubblicati nell'argomento prima delle modifiche alla chiave rimangono criptati con la chiave originale, indipendentemente dal fatto che si tratti di una chiave CMEK o Google-owned and Google-managed encryption key. La modifica della chiave CMEK di un argomento non comporta la ri-crittografia dei messaggi pubblicati in precedenza. Questi messaggi rimangono protetti con la chiave con cui sono stati originariamente criptati, pertanto i dati dei messaggi all'interno di un argomento potrebbero ancora 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 per le 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 all'interno di 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 della chiave per criptare i dati dei messaggi.

Come per le modifiche alla configurazione manuale apportate alle impostazioni di crittografia in Pub/Sub, queste modifiche non si applicano retroattivamente ai messaggi pubblicati in passato. I messaggi esistenti continuano a essere protetti con le versioni precedenti della chiave crittografica. Questi messaggi rimangono protetti con la chiave con cui sono stati originariamente criptati, pertanto i dati dei messaggi all'interno di un argomento potrebbero ancora dipendere dalla versione precedente della chiave per un massimo di 31 giorni, a seconda della durata di conservazione dei messaggi specificata nell'argomento o in una delle relative iscrizioni.

Configura un argomento con Cloud KMS Autokey

Per ulteriori informazioni 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 attivate, disattivate o utilizzate da Pub/Sub per criptare e decriptare i messaggi. Questo è utile per il debug dei problemi relativi alla disponibilità di pubblicazione o distribuzione.

Le chiavi Cloud KMS sono associate agli audit log per le risorse dei topic 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 addebito per l'accesso al servizio Cloud KMS in base ai prezzi di Pub/Sub:

  • Per ogni argomento che utilizza CMEK, ogni sei ore viene criptata e archiviata una nuova DEK.

  • 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 sottoscrittore nella stessa regione

Il numero di operazioni di crittografia Cloud KMS può essere stimato come:

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
Data una struttura dei prezzi in cui le operazioni di crittografia costano 0,03 $ogni 10.000 operazioni, l'utilizzo precedente costerebbe circa 0,07 $. Per informazioni aggiornate sui prezzi, consulta Prezzi di Cloud KMS.

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 richiesta di pull 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 una percentuale 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 l'invio dei messaggi possono non riuscire con errori FAILED_PRECONDITION per diversi motivi.

Per le sottoscrizioni push, non è possibile rilevare direttamente problemi di pubblicazione 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_age per rilevare 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/decriptazione CryptoKey Pub/Sub dal account di servizio Pub/Sub (service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com) utilizzando IAM. Questo approccio influisce su tutti gli argomenti Pub/Sub del progetto e sulle sottoscrizioni che contengono messaggi criptati utilizzando CMEK.

Sebbene nessuna operazione confermi la revoca immediata dell'accesso, le modifiche IAM si propagano 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 generati errori FAILED_PRECONDITION. La consegna dei messaggi agli endpoint push verrà interrotta. Per riprendere 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 distribuzione dei messaggi riprende entro 2 ore.

Sebbene sia improbabile che interruzioni intermittenti di Cloud KMS inferiori a un minuto interrompano in modo significativo la pubblicazione e la distribuzione, l'indisponibilità prolungata di Cloud KMS ha lo stesso effetto della revoca delle chiavi.