Configurare la crittografia dei messaggi

Questo documento illustra come configurare la crittografia gestita dal cliente (CMEK) per Pub/Sub.

Pub/Sub cripta i messaggi con Chiavi di proprietà di Google e gestite da Google per impostazione predefinita. Nessuna configurazione aggiuntiva necessarie 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 chiavi di crittografia utilizzate per proteggere Pub/Sub puoi usare le CMEK. Alcune organizzazioni richiedono anche l'uso di CMEK.

Le CMEK ti offrono il controllo completo sulle tue chiavi di crittografia, consentendoti di gestirne ciclo di vita, rotazione e accesso. Quando configuri Pub/Sub con una CMEK, il servizio cripta automaticamente tutti i dati utilizzando la chiave specificata. 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:

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 pattern di crittografia della busta con CMEK. In questo approccio, i messaggi non sono criptati da Cloud KMS. Invece Cloud KMS viene utilizzato per criptare le chiavi di crittografia dei dati (DEK, Data Encryption Key) create Pub/Sub per ogni argomento. Queste DEK vengono archiviate solo in o con wrapping, nel modulo 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 il console Google 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 gli anelli portachiavi non possono essere eliminati.

Per istruzioni su come eseguire queste attività, consulta le 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 posizioni degli editori e dei sottoscrittori di un argomento, l'utilizzo di una chiave Cloud KMS a livello di regione potrebbe introdurre di dipendenze 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 è gestito internamente Pub/Sub per ogni progetto e non è visibile la 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 con 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.

      Il formato della chiave è 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.

Configura un argomento con CMEK

Puoi configurare CMEK per un argomento utilizzando la console Google Cloud oppure con gcloud CLI.

Console

Per creare un argomento con CMEK, segui questi passaggi:

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

    Vai ad Argomenti

  2. Fai clic su Crea argomento.

  3. Inserisci un ID per l'argomento nel campo ID argomento.

    Per ulteriori informazioni sugli argomenti relativi alla denominazione, 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 l'interfaccia a riga di comando gcloud per aggiornare il CMEK. Tuttavia, questa modifica non è retroattiva.

I messaggi pubblicati nell'argomento prima delle modifiche alla 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 della CMEK di un argomento non esegue nuovamente la crittografia delle pubblicazioni in precedenza messaggi. Questi messaggi continuano a essere protetti con la chiave che erano con cui è stata eseguita la crittografia originale.

Pub/Sub dispone di un meccanismo di memorizzazione nella cache per le chiavi che dura circa 5 minuti. L'operazione potrebbe richiedere fino a Pub/Sub per riconoscere e iniziare a utilizzare la nuova versione della chiave.

Audit log

Cloud KMS produce audit log quando le chiavi siano abilitati, disabilitati o utilizzati da Pub/Sub per criptare e decriptare messaggi. È utile per eseguire il debug dei problemi di pubblicazione o pubblicazione. la disponibilità del servizio.

Le chiavi Cloud KMS sono associate ai log di controllo per le risorse degli argomenti Pub/Sub. Pub/Sub non includere qualsiasi altra informazione relativa a Cloud KMS.

Prezzi e costi

Per le seguenti richieste Pub/Sub, l'uso di CMEK comporta addebita l'accesso al servizio Cloud KMS in base al 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, considera un argomento con:

  • Almeno un abbonamento

  • Client publisher e sottoscrittori nella stessa regione

Il numero di operazioni crittografiche 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 le 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 con l'accesso alla chiave possono avere i seguenti effetti:

  • Ritardi nella consegna dei messaggi

  • Errori di pubblicazione

Monitora gli errori di pubblicazione e di richiesta di pull utilizzando quanto segue 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 valore 100% il tasso di errori. Questo indica che lo stream è terminato, non che le richieste falliscono. 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 dimensioni ed 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 gli audit log CMEK per individuare i problemi.

Disattivare e riattivare le chiavi

Esistono due modi per impedire a Pub/Sub di decriptare dati dei messaggi:

  • Opzione consigliata: 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.

  • Revoca il ruolo Autore crittografia/decriptazione CryptoKey Pub/Sub dall'account di servizio Pub/Sub (service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com) con o IAM. Questo approccio influisce su tutte le risorse Argomenti Pub/Sub e sottoscrizioni che contengono messaggi criptato con 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. La consegna dei messaggi agli endpoint push verrà interrotta. A riprendere l'invio e la pubblicazione, ripristinare l'accesso Chiave Cloud KMS.

Quando la chiave Cloud KMS è accessibile a Pub/Sub, la pubblicazione è disponibile entro 12 ore e la consegna dei messaggi riprende entro 2 nell'orario lavorativo locale del TAM.

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.