Configurazione della crittografia dei messaggi

Pub/Sub cripta i messaggi con chiavi di crittografia gestite da Google per impostazione predefinita. Non è richiesta alcuna impostazione o configurazione e non è necessario modificare il modo in cui accedi al servizio. Ogni messaggio viene criptato nei seguenti stati e livelli:

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

Utilizzo delle chiavi di crittografia gestite dal cliente

Pub/Sub utilizza il pattern di crittografia envelope con CMEK. Con questo approccio, i messaggi non vengono criptati da Cloud KMS. Viene invece utilizzato Cloud KMS per criptare le chiavi di crittografia dei dati (DEK) create da Pub/Sub per ogni argomento. Queste DEK sono archiviate solo in forma criptata o con wrapping da Pub/Sub. Prima di archiviare una DEK, il servizio invia la DEK a Cloud KMS per la crittografia 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 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.

Pub/Sub utilizza un account di servizio Google Cloud per accedere a Cloud KMS. L'account di servizio è gestito internamente da Pub/Sub per ogni progetto e non sarà visibile nel tuo elenco di account di servizio. L'account di servizio ha il formato service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com. Affinché la funzionalità CMEK funzioni, devi concedere a questo account il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS in Identity and Access Management.

Configurazione degli argomenti

Puoi configurare CMEK utilizzando la console Google Cloud o lo strumento a riga di comando gcloud. Per i prerequisiti, devi avere:

Consulta la guida rapida di Cloud KMS per istruzioni su come eseguire queste attività.

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 abbonati di un argomento, l'utilizzo di una chiave Cloud KMS a livello di regione potrebbe introdurre dipendenze non necessarie sui link di rete tra regioni.

Utilizzo della console Google Cloud

Puoi utilizzare la finestra di dialogo di creazione dell'argomento della console Google Cloud per aggiungere le tue chiavi di crittografia. Consulta la guida rapida della console Google Cloud per informazioni su come accedere alla finestra di dialogo.

Se non vedi il menu a discesa Seleziona una chiave gestita dal cliente, assicurati di aver abilitato l'API KMS per il progetto.

La console Google Cloud:

  • Semplifica la configurazione IAM garantendo al contempo che l'account di servizio Pub/Sub disponga delle autorizzazioni appropriate.

  • Consente di configurare la crittografia nella finestra di dialogo di creazione dell'argomento.

Utilizzo della riga di comando

Questo esempio illustra come utilizzare Google Cloud CLI per configurare CMEK su un argomento:


   # Grant the Pub/Sub service account the Cloud KMS CryptoKey
   # Encrypter/Decrypter role. This service account is different
   # from the service account you are using to authorize requests to Google Cloud.

   gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=\
      "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
      --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'

   # Create a topic that uses customer-managed encryption, using the
   # --topic-encryption-key argument to specify the Cloud KMS key to use
   # for protecting message data.

   KEY_ID=projects/${PROJECT_ID}/locations/global/keyRings/my-key-ring/cryptoKeys/my-crypto-key
   alias pubsub="gcloud pubsub"
   pubsub topics create $TOPIC_NAME --topic-encryption-key=$KEY_ID

   # Confirm that the topic is configured for customer-managed encryption,
   # indicated by the presence of the kmsKeyName specified on the topic.

   pubsub topics describe $TOPIC_NAME
     

Audit log

Cloud KMS produce audit log quando le chiavi vengono abilitate, disabilitate o utilizzate da Pub/Sub per criptare e decriptare i messaggi. Questo è utile per il debug dei problemi relativi alla disponibilità di pubblicazione.

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 addebiti per l'accesso al servizio Cloud KMS in base ai pricing 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

  • Clienti di publisher e abbonati 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 Prezzi di Cloud KMS.

In pratica, le chiavi potrebbero essere recuperate più o meno spesso a seconda dei pattern di accesso. Utilizza questi valori solo come stime.

Monitoraggio e risoluzione dei problemi

I problemi con l'accesso alle chiavi possono avere i seguenti effetti:

  • Ritardi nella consegna dei messaggi

  • Errori di pubblicazione

Monitora gli errori di pubblicazione e di richiesta di pull utilizzando le seguenti metrics, raggruppate per response_class e response_code:

  • topic/send_request_count
  • subscription/pull_request_count
  • subscription/streaming_pull_response_count

La risposta StreamingPull ha una percentuale di errori del 100%. Questo indica che lo stream è terminato, non che le richieste sono andate a buon fine. Per monitorare StreamingPull, cerca il codice di risposta FAILED_PRECONDITION.

La pubblicazione e il recapito dei messaggi possono non riuscire con errori FAILED_PRECONDITION per diversi motivi.

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_age per rilevare picchi insoliti.

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

Disabilitare e riattivare le chiavi

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

  • Consigliato: disabilita la chiave Cloud KMS associata 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 dall'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 tramite CMEK.

Sebbene nessuna delle due operazioni garantisca la revoca immediata dell'accesso, le modifiche IAM in genere si propagano più velocemente. Per saperne di più, consulta Coerenza delle risorse di Cloud KMS e Accedere alla propagazione delle modifiche.

Quando Pub/Sub non può accedere a una chiave Cloud KMS, la pubblicazione e la consegna dei messaggi con StreamingPull o il pull hanno esito negativo 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.

Quando 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 distribuzione, l'indisponibilità estesa di Cloud KMS ha lo stesso effetto della revoca della chiave.