Configurazione della crittografia dei messaggi

Per impostazione predefinita, Pub/Sub cripta i messaggi con chiavi di proprietà e gestite da Google. Non è richiesta alcuna impostazione 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 individualmente 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 della busta con CMEK. In questo approccio, i messaggi non sono criptati da Cloud KMS. Cloud KMS viene utilizzato per criptare le chiavi di crittografia dei dati (DEK, Data Encryption Key) create da Pub/Sub per ogni argomento. Queste DEK sono archiviate in un modulo criptato o con wrapping da Pub/Sub. Prima di archiviare una DEK, il servizio invia la DEK a Cloud KMS per essere criptata con la chiave di crittografia della chiave (KEK) specificata nell'argomento. Ogni sei ore circa viene generata una nuova DEK per ogni argomento.

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.

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 le istruzioni su come eseguire queste attività.

Poiché le risorse Pub/Sub sono globali, ti consigliamo vivamente di utilizzare chiavi Cloud KMS globali per configurare gli argomenti abilitati per CMEK. A seconda delle località degli editori e dei sottoscrittori 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 per la creazione dell'argomento della console Google Cloud per aggiungere le tue chiavi di crittografia. Per informazioni su come accedere a questa finestra di dialogo, consulta la guida rapida della console Google Cloud.

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. È utile per eseguire il debug dei problemi relativi alla disponibilità di pubblicazione o pubblicazione.

Le chiavi Cloud KMS sono collegate agli audit log per le risorse dell'argomento 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 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 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 di prezzi in cui le operazioni crittografiche costano 0,03 $ogni 10.000 operazioni, l'utilizzo indicato sopra costerebbe circa 0,07 $. Per le informazioni più aggiornate sui prezzi, consulta Prezzi di Cloud KMS.

In pratica, le chiavi potrebbero essere recuperate più o meno spesso 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 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 errore del 100%. Questo indica che lo stream è terminato, non che le richieste non vadano a buon fine. Per monitorare StreamingPull, cerca il codice di risposta FAILED_PRECONDITION.

La pubblicazione e la consegna dei messaggi possono non riuscire con FAILED_PRECONDITION errori per diversi motivi.

Per gli abbonamenti push, non è possibile rilevare direttamente i problemi di recapito 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 gli audit log CMEK per individuare i problemi.

Disattivazione e riattivazione dei tasti

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

  • Opzione consigliata: disabilita la chiave Cloud KMS associata all'argomento utilizzando Pub/Sub. Questo approccio riguarda solo gli argomenti e le sottoscrizioni Pub/Sub associati alla 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) utilizzando IAM. Questo approccio influisce su tutti gli argomenti Pub/Sub del progetto e le sottoscrizioni che contengono messaggi criptati utilizzando CMEK.

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

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