Utilizzo delle chiavi di crittografia gestite dal cliente

Per impostazione predefinita, Workflows cripta i dati archiviati at-rest. Google Cloud gestisce questa crittografia predefinita per conto tuo senza che tu debba fare altro.

Se hai requisiti normativi o di conformità specifici relativi alle chiavi che proteggono i tuoi dati, puoi utilizzare chiavi di crittografia gestite dal cliente (CMEK) per Workflows. Il tuo flusso di lavoro e i dati at-rest associati sono protetti da una chiave di crittografia a cui puoi accedere solo tu e che puoi controllare e gestire utilizzando Cloud Key Management Service (Cloud KMS).

Cosa è protetto con CMEK

Durante il deployment di un flusso di lavoro, puoi specificare una chiave Cloud KMS. Questa chiave viene utilizzata per criptare il flusso di lavoro e le sue esecuzioni:

  • Un flusso di lavoro richiede un file di origine che contenga una definizione valida del flusso di lavoro. Questo file di origine è criptato con la chiave.

  • Un'esecuzione del flusso di lavoro esegue l'attuale definizione del flusso di lavoro (una revisione del flusso di lavoro specifica). Utilizzando la chiave associata alla revisione del flusso di lavoro al momento del suo deployment, il flusso di lavoro compilato e tutti i dati di input, di output e di runtime archiviati per l'esecuzione vengono criptati. Sono inclusi argomenti di esecuzione, risultati, errori ed eccezioni, eventi Eventarc pubblicati e richieste e risposte HTTP e di callback.

Prima di iniziare

Prima di utilizzare CMEK in Workflows, completa questi passaggi:

  1. Abilitare le API.

    Console

    1. Abilita le API Cloud KMS and Workflows.

      Abilita le API

    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 che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

    2. Aggiorna gcloud componenti.
      gcloud components update
      
    3. Abilitare le API Cloud KMS e Workflows per il progetto in cui verranno archiviate le tue chiavi di crittografia.
      gcloud services enable cloudkms.googleapis.com workflows.googleapis.com
      
  2. Cloud KMS produce Cloud Audit Logs quando le chiavi sono abilitate, disabilitate o utilizzate dalle risorse Workflows per criptare e decriptare i dati. Assicurati che il logging sia abilitato per l'API Cloud KMS nel tuo progetto e di aver deciso quali autorizzazioni e ruoli specifici per il logging applicare al tuo caso d'uso. Per ulteriori informazioni, consulta Informazioni sull'audit logging di Cloud KMS.

Crea un keyring e una chiave Cloud KMS

Puoi creare un nuovo keyring o utilizzarne uno esistente. Nel keyring puoi aggiungere una nuova chiave o usarne una esistente.

  1. Crea un keyring.

  2. Crea una chiave per un keyring specificato.

Recupera l'ID risorsa per una chiave Cloud KMS

L'ID risorsa per una chiave Cloud KMS è obbligatorio quando abiliti CMEK per un flusso di lavoro. In questo documento, vedi Abilitare CMEK per un flusso di lavoro.

Console

  1. Nella console Google Cloud, vai alla pagina Gestione delle chiavi.

    Vai a Gestione delle chiavi

  2. Fai clic sul keyring che contiene la chiave.

  3. Per la chiave di cui stai recuperando l'ID risorsa, fai clic su Altro.

  4. Fai clic su Copia nome risorsa.

    L'ID risorsa della chiave viene copiato negli appunti. Il suo formato è simile al seguente:

    projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
    
  5. Una chiave contiene zero o più versioni. L'ID risorsa di una versione della chiave è l'ID della chiave più una barra (/) e l'ID versione. Per elencare tutte le versioni di una chiave:

    1. Fai clic sul nome della chiave.
    2. Per una versione specifica, fai clic su Altro.
    3. Fai clic su Copia nome risorsa.

gcloud

  1. Elenca tutte le chiavi in un determinato keyring:

    gcloud kms keys list --keyring RING_NAME --location LOCATION
    

    Sostituisci quanto segue:

    • RING_NAME: il nome del keyring
    • LOCATION: la regione del keyring

    L'output include l'ID risorsa per ogni chiave. Ad esempio:

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
    
  2. Una chiave ha zero o più versioni. L'ID risorsa di una versione della chiave è l'ID della chiave più una barra (/) e l'ID versione. Elenca tutte le versioni di una chiave:

    gcloud kms keys versions list --location LOCATION --keyring RING_NAME --key KEY_NAME
    

    L'output include l'ID risorsa per ogni versione della chiave. Ad esempio:

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME/2
    

Concedere all'agente di servizio Workflows l'accesso alla chiave

Devi concedere all'agente di servizio Workflows il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS in modo che possa accedere alla chiave Cloud KMS:

Console

Quando abiliti CMEK per un flusso di lavoro attraverso la console, ti viene richiesto di concedere il ruolo Autore crittografia/decriptazione CryptoKey Cloud KMS all'account di servizio. Per saperne di più, in questo documento, vedi Abilitare CMEK per un flusso di lavoro.

gcloud

gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring RING_NAME \
    --location LOCATION \
    --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

Sostituisci quanto segue:

  • KEY_NAME: il nome della chiave. Ad esempio, my-key.
  • RING_NAME: il nome del keyring. Ad esempio, my-keyring.
  • LOCATION: la posizione della chiave. Ad esempio, us-central1.
  • PROJECT_NUMBER: il numero del tuo progetto Google Cloud. Puoi trovare il numero del progetto nella pagina Ti diamo il benvenuto della console Google Cloud o eseguendo questo comando:

    export PROJECT=$(gcloud info --format='value(config.project)')
    gcloud projects describe ${PROJECT} --format="value(projectNumber)"
    

Finché l'agente di servizio ha il ruolo roles/cloudkms.cryptoKeyEncrypterDecrypter, un flusso di lavoro nel tuo progetto può criptare e decriptare i dati utilizzando la chiave CMEK. Se revochi questo ruolo o se disabiliti o distruggi la chiave CMEK, non sarà possibile accedere a questi dati. In questo documento, consulta Disabilita Cloud KMS.

Abilita CMEK per un flusso di lavoro

Quando crei un flusso di lavoro o lo aggiorni in seguito, puoi specificare la chiave Cloud KMS che il flusso di lavoro deve utilizzare per la crittografia dei dati.

Console

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro.

    Vai a Workflows

  2. Fai clic sul nome del flusso di lavoro da aggiornare.

    Viene visualizzata la pagina Dettagli dei flussi di lavoro.

  3. Fai clic su Modifica.

  4. Seleziona Chiave di crittografia gestita dal cliente (CMEK).

  5. Nell'elenco Seleziona una chiave gestita dal cliente, seleziona o filtra in base a una chiave Cloud KMS.

  6. (Facoltativo) Per inserire manualmente il nome della risorsa della chiave, nell'elenco Seleziona una chiave gestita dal cliente fai clic su Inserisci la chiave manualmente e inserisci il nome della risorsa della chiave nel formato specificato.

  7. Se richiesto, concedi il ruolo cloudkms.cyptoKeyEncrypterDecrypter all'account di servizio Workflows con il ruolo workflows.serviceAgent.

  8. Tocca Avanti.

  9. Per salvare le modifiche ed eseguire il deployment del flusso di lavoro aggiornato, fai clic su Esegui il deployment.

gcloud

gcloud workflows deploy WORKFLOW_NAME \
    --source=SOURCE_FILE \
    --kms-key=KEY \
    --location LOCATION \
    --service-account=SERVICE_ACCOUNT

Sostituisci quanto segue:

  • WORKFLOW_NAME: il nome del flusso di lavoro
  • SOURCE_FILE: il file di origine del tuo flusso di lavoro con un'estensione yaml per un file YAML o con un'estensione json per un file JSON; ad esempio, myWorkflow.yaml.
  • KEY: l'ID risorsa della chiave nel formato projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME. Puoi recuperare l'ID chiave.

  • LOCATION: posizione del flusso di lavoro

  • SERVICE_ACCOUNT: l'account di servizio che il tuo flusso di lavoro utilizzerà per accedere ad altri servizi Google Cloud; ad esempio, SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com. Ti consigliamo vivamente di utilizzare un account di servizio con i privilegi minimi necessari per accedere alle risorse richieste. Se non lo specifichi, viene utilizzato l'account di servizio predefinito. Per maggiori informazioni, consulta Concedere l'autorizzazione dei flussi di lavoro per l'accesso alle risorse Google Cloud.

Tieni presente quanto segue:

  • Le revisioni e le esecuzioni dei flussi di lavoro vengono criptate con la chiave specificata al momento del deployment; le risorse precedentemente criptate con una chiave precedente rimangono criptate con quella chiave precedente. Se un flusso di lavoro viene modificato successivamente e viene specificata una nuova chiave, la revisione del flusso di lavoro viene criptata con la nuova chiave ed eventuali esecuzioni successive utilizzeranno la nuova chiave.
  • Le revisioni e le esecuzioni dei flussi di lavoro criptate in precedenza non rimangono criptate.
  • Se disabiliti CMEK per la revisione di un flusso di lavoro, le eventuali esecuzioni successive vengono create senza crittografia CMEK. In questo documento, vedi Disabilita CMEK per un flusso di lavoro. Le revisioni e le esecuzioni esistenti dei flussi di lavoro rimangono criptate con le chiavi con cui erano state precedentemente criptate.

Verifica l'integrazione di Cloud KMS

Puoi verificare l'integrazione CMEK visualizzando i metadati per un flusso di lavoro.

Console

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro.

    Vai a Workflows

  2. Fai clic sul nome del flusso di lavoro da verificare.

    Viene visualizzata la pagina Dettagli dei flussi di lavoro.

  3. Fai clic sulla scheda Dettagli.

    Il valore Crittografia mostra l'ID risorsa della chiave Cloud KMS utilizzata per proteggere il flusso di lavoro e la sua esecuzione.

gcloud

gcloud workflows describe WORKFLOW_NAME \
    --location=LOCATION

L'output dovrebbe essere simile al seguente:

createTime: '2022-08-10T19:57:58.233177709Z'
cryptoKeyName: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
name: projects/PROJECT_NAME/locations/LOCATION/workflows/WORKFLOW_NAME
revisionCreateTime: '2022-11-18T19:44:04.933633237Z'
revisionId: 000009-8be
serviceAccount: projects/PROJECT_NAME/serviceAccounts/SA_NAME@PROJECT_NAME.iam.gserviceaccount.com
sourceContents:
[...]
state: ACTIVE
updateTime: '2022-11-18T19:44:05.171793128Z'

Il valore cryptokeyName è l'ID risorsa della chiave Cloud KMS utilizzato per proteggere il flusso di lavoro e la sua esecuzione.

Disabilita CMEK per un flusso di lavoro

Puoi disabilitare CMEK per un flusso di lavoro in modo che non utilizzi più la chiave Cloud KMS associata.

Console

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro.

    Vai a Workflows

  2. Fai clic sul nome del flusso di lavoro da aggiornare.

    Viene visualizzata la pagina Dettagli dei flussi di lavoro.

  3. Fai clic su Modifica.

  4. Per cancellare il pulsante di opzione Chiave di crittografia gestita dal cliente (CMEK), seleziona Chiave di crittografia gestita da Google.

  5. Tocca Avanti.

  6. Per salvare le modifiche ed eseguire il deployment del flusso di lavoro aggiornato, fai clic su Esegui il deployment.

gcloud

gcloud workflows deploy WORKFLOW_NAME \
    --source=SOURCE_FILE \
    --clear-kms-key \
    --service-account=SERVICE_ACCOUNT

Questa azione disattiva CMEK per la revisione corrente del flusso di lavoro e le eventuali esecuzioni successive vengono create senza crittografia CMEK. Le revisioni e le esecuzioni dei flussi di lavoro esistenti rimangono criptate con le chiavi con cui erano state criptate in precedenza.

Disabilita Cloud KMS

Se vuoi revocare l'accesso ai dati per le esecuzioni dei flussi di lavoro o dei flussi di lavoro, puoi eseguire una delle seguenti operazioni per disabilitare Cloud KMS:

  • Disabilita o destroy la versione della chiave primaria della chiave di crittografia gestita dal cliente. La disattivazione di una versione della chiave CMEK sospende l'accesso a tutti i dati protetti da quella versione della chiave. L'eliminazione di una versione della chiave è la controparte permanente di questa azione. Entrambi interessano solo i flussi di lavoro e le esecuzioni dei flussi di lavoro associati alla chiave specifica. Non puoi creare nuove esecuzioni o visualizzare le risorse associate alla chiave disabilitata o eliminata. Le esecuzioni attive non andranno a buon fine con un messaggio di errore corrispondente.

  • Revoca il ruolo cloudkms.cryptoKeyEncrypterDecrypterIAM dall'agente di servizio Workflows. Ciò riguarda tutti i flussi di lavoro nel progetto Google Cloud che supportano la crittografia tramite CMEK. Non puoi creare nuovi flussi di lavoro ed esecuzioni integrati con CMEK o visualizzare risorse criptate con CMEK. Le esecuzioni attive non andranno a buon fine con un messaggio di errore corrispondente.

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

Risoluzione dei problemi

Potresti riscontrare errori quando utilizzi Cloud KMS con Workflows. La seguente tabella descrive i diversi problemi e le modalità di risoluzione.

Problema Descrizione
Autorizzazione cloudkms.cryptoKeyVersions.useToEncrypt negata La chiave Cloud KMS fornita non esiste o l'autorizzazione non è configurata correttamente.

Soluzione:

La versione della chiave non è abilitata La versione della chiave Cloud KMS fornita è stata disabilitata.

Soluzione: riattiva la versione della chiave Cloud KMS.

La regione del keyring non corrisponde alla risorsa da proteggere La regione del keyring KMS fornita è diversa da quella del flusso di lavoro.

Soluzione: utilizza un keyring e un flusso di lavoro protetto di Cloud KMS dalla stessa regione. (tieni presente che possono trovarsi in progetti diversi). Per maggiori informazioni, consulta le località di Cloud KMS e le località di Workflows.

Il limite di quota di Cloud KMS è stato superato È stato raggiunto il limite di quota per le richieste Cloud KMS.

Soluzione: limita il numero di chiamate Cloud KMS o aumenta il limite di quota. Per maggiori informazioni, consulta la pagina relativa alle quote di Cloud KMS.

Come viene gestito uno stato di una chiave non disponibile

Se per qualche motivo Cloud KMS non è disponibile, Workflows potrebbe non essere in grado di recuperare lo stato della chiave da Cloud KMS.

Se lo stato della chiave non è disponibile, il flusso di lavoro o la sua esecuzione restituirà un valore state: UNAVAILABLE e i relativi dettagli nel campo stateError.

Se lo stato della chiave non è disponibile nel corso dell'esecuzione di un flusso di lavoro (ad esempio, viene revocata un'autorizzazione durante un callback), si verifica un errore di runtime che restituisce un valore state: FAILED e i relativi dettagli nel campo error.

Prezzi

Questa integrazione non comporta costi aggiuntivi oltre alle operazioni chiave, fatturate al tuo progetto Google Cloud. Per informazioni sui prezzi attuali, consulta la pagina relativa ai prezzi di Cloud KMS.