Configurare la crittografia dei messaggi

Questo documento spiega come configurare le chiavi di crittografia gestite dal cliente (CMEK) per Pub/Sub.

Per impostazione predefinita, Pub/Sub cripta i messaggi con chiavi di proprietà di Google e gestite da Google. Non è richiesta alcuna configurazione aggiuntiva per utilizzare le chiavi di crittografia gestite da Google.

Informazioni su CMEK

Le 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 di Pub/Sub, puoi utilizzare le chiavi CMEK. Alcune organizzazioni richiedono anche l'uso di CMEK.

Le chiavi CMEK ti offrono il pieno controllo sulle chiavi di crittografia, consentendoti di gestire il loro ciclo di vita, la rotazione e i criteri 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:

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

CMEK per Pub/Sub

Pub/Sub utilizza il pattern di crittografia dell'involucro 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 "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 generato un nuovo DEK per ogni argomento ogni sei ore circa.

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 recapitati ai sottoscrittori.

Prima di iniziare

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

Completa le seguenti attività:

  • Attiva l'API Cloud KMS.

  • Crea un keyring e una chiave in Cloud KMS. Le chiavi e gli anelli 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 le chiavi Cloud KMS globali per configurare gli argomenti abilitati per CMEK. A seconda delle località dei publisher e degli iscritti di un argomento, l'uso di una chiave Cloud KMS regionale potrebbe introdurre dipendenze non necessarie sui link di rete tra regioni.

Ruoli e autorizzazioni richiesti per configurare CMEK

Pub/Sub utilizza un agente di servizio Google Cloud 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 Account di servizio della console Google Cloud.

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 la chiave CMEK.

Per configurare l'accesso richiesto:

  • Concedi all'agente di servizio Pub/Sub il ruolo Autore crittografia/decrittografia della chiave crittografica 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 ulteriori informazioni sulla concessione dei ruoli IAM, consulta Concedere i ruoli a una risorsa.

Configurare 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:

  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 ulteriori informazioni sugli argomenti relativi ai nomi, consulta le linee guida per i nomi.

  4. In 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 attivato l'API Cloud KMS per il progetto.

  6. Fai clic su Crea argomento.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  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 il CMEK per un argomento

Hai la possibilità di modificare il CMEK collegato a un argomento Pub/Sub. Puoi utilizzare gcloud CLI per aggiornare il CMEK. Tuttavia, questa modifica non si applica in modo retroattivo.

I messaggi pubblicati nell'argomento prima della modifica della chiave rimangono criptati con la chiave originale. Se un argomento è stato creato senza un CMEK, puoi aggiungerne uno in un secondo momento. I messaggi esistenti continueranno a essere protetti con la crittografia gestita da Google per impostazione predefinita. La modifica del CMEK di un argomento non cripta di nuovo i messaggi pubblicati in precedenza. Questi messaggi continuano a essere protetti con la chiave con cui sono stati criptati inizialmente.

Pub/Sub ha un meccanismo di memorizzazione nella cache per le chiavi che dura circa 5 minuti. Potrebbero essere necessarie fino a queste durate 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. Questo è utile per eseguire il debug dei problemi relativi alla disponibilità della pubblicazione o della pubblicazione.

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, 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 della regione in cui viene eseguito il servizio Pub/Sub.

Ad esempio, prendiamo in considerazione un argomento con:

  • Almeno un abbonamento

  • Client publisher e abbonati 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
Data una struttura dei prezzi in cui le operazioni crittografiche costano 0,03 $ogni 10.000 operazioni, l'utilizzo sopra indicato costerebbe circa 0,07 $. Per informazioni sui prezzi più aggiornate, consulta la pagina 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 nella consegna dei messaggi

  • Errori di pubblicazione

Monitora gli errori di pubblicazione e delle richieste 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

La risposta StreamingPull ha un tasso di errore del 100%. Questo 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 iscrizioni push, non è possibile rilevare direttamente i problemi di invio specifici di CMEK. Invece:

  • Monitora le dimensioni e la data dell'ultima modifica della coda di un abbonamento push utilizzando subscription/num_unacked_messages.

  • Monitora subscription/oldest_unacked_message_age per verificare la presenza di picchi insoliti.

  • Utilizza gli errori di pubblicazione e i log di controllo CMEK per individuare i problemi.

Disattivare e riattivare le 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 riguarda solo gli argomenti e le sottoscrizioni Pub/Sub associati a quella chiave specifica.

  • Rimuovi il ruolo Autore crittografia/decrittografia CryptoKey Pub/Sub dall'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 iscrizioni che contengono messaggi criptati utilizzando CMEK.

Sebbene nessuna delle due operazioni confermi la revoca immediata dell'accesso, le modifiche IAM in genere si propagano più rapidamente. Per scoprire 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 vanno a buon fine con errori FAILED_PRECONDITION. L'invio dei messaggi agli endpoint push verrà interrotto. Per riprendere il caricamento 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 meno di un minuto per Cloud KMS interrompano in modo significativo la pubblicazione e la pubblicazione, l'indisponibilità prolungata di Cloud KMS ha lo stesso effetto della revoca della chiave.