Utilizzo delle chiavi di crittografia gestite dal cliente

Questo argomento mostra come proteggere le immagini container di cui è stato eseguito il deployment nei servizi Cloud Run utilizzando le chiavi di crittografia gestite dal cliente (CMEK) di Cloud KMS. Puoi utilizzare questa funzionalità per proteggere i container importati da Cloud Run con una chiave CMEK at-rest.

Tieni presente quanto segue:

  • I metadati dei file, come il percorso del file, non sono criptati.
  • I metadati del servizio Cloud Run, come le variabili di nome o ambiente, non vengono criptati utilizzando la chiave fornita, ma con una chiave gestita da Google.
  • In fase di esecuzione, la memoria e i contenuti dei file non sono criptati.
  • Se una chiave CMEK è disabilitata, le nuove istanze di revisioni Cloud Run esistenti che utilizzano la chiave non verranno avviate.
  • Se una chiave CMEK è disabilitata, il deployment di una nuova revisione di Cloud Run avrà esito negativo a meno che non venga utilizzata una nuova chiave valida.

Poiché la chiave CMEK è sotto il tuo controllo e non è controllata da Google, nessuno, incluso Google, può accedere ai dati protetti da queste chiavi di crittografia quando le chiavi sono disattivate o distrutte.

Quando utilizzi CMEK, vengono generati gli audit log. Per ulteriori dettagli, consulta Informazioni sugli audit log e sui messaggi di errore.

Comportamento di scalabilità automatica interessato da CMEK

La scalabilità automatica prevista per il servizio Cloud Run può essere influenzata dall'utilizzo di chiavi di crittografia gestite dal cliente. Ad esempio, la latenza per l'avvio di nuove istanze può aumentare a causa dei ritardi nel contatto con i sistemi di gestione delle chiavi esterni durante le operazioni delle chiavi.

La seguente tabella mostra i possibili cambiamenti nel comportamento dovuti all'uso delle chiavi CMEK:

Operazione correlata a CMEK Comportamento di scalabilità automatica
Chiave disattivata/eliminata Le nuove istanze non verranno avviate.
Impossibile contattare il gestore delle chiavi esterno Se è possibile riprovare la richiesta di chiave, nessuna istanza viene arrestata durante i nuovi tentativi e non verranno avviate nuove istanze. Lo scale out può apparire più lento del previsto.
Se non è possibile riprovare la richiesta di chiave, non vengono avviate nuove istanze e le istanze in esecuzione vengono arrestate dopo un periodo di attesa.
Quota KMS superata Le operazioni CMEK utilizzano la quota KMS. Se questa quota viene superata, gli errori relativi a RESOURCE_EXHAUSTED vengono registrati e le nuove istanze non verranno avviate. Per risolvere questo problema, puoi richiedere una quota aggiuntiva.

Autorizzazione di Cloud Run ad accedere a una chiave

Per utilizzare questa funzionalità:

  1. Abilita l'API Cloud Run Admin

  2. Usa una chiave simmetrica Cloud KMS esistente o crea una nuova chiave simmetrica. Tuttavia, per consentire a un servizio Cloud Run di accedere alla chiave, devi aggiungere l'account di servizio Cloud Run come membro della chiave e concedergli il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS:

    Console

    1. Vai alla pagina Chiavi di crittografia nella console Google Cloud

    2. Fai clic sul keyring corrispondente alla chiave per aprire la relativa pagina dell'elenco delle chiavi.

    3. Seleziona la chiave e fai clic su Aggiungi membro nella scheda delle autorizzazioni sul lato destro.

    4. Nella casella di testo Nuovi membri, copia l'indirizzo email dell'agente di servizio Cloud Run. Ha il suffisso @serverless-robot-prod.iam.gserviceaccount.com.

    5. Concedi il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS.

    Riga di comando

    Utilizza il seguente comando gcloud kms:

    gcloud kms keys add-iam-policy-binding 
    (KEY : --keyring=KEYRING --location=LOCATION)
    --member=MEMBER --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'

    Sostituisci

    • KEYRING con il nome del keyring.
    • LOCATION con il nome della tua regione.
    • MEMBER con l'indirizzo email dell'agente di servizio Cloud Run. Ha il suffisso @serverless-robot-prod.iam.gserviceaccount.com.

    Per concedere il ruolo IAM roles/cloudkms.cryptoKeyEncrypterDecrypter, devi disporre dell'autorizzazione per amministrare le risorse Cloud KMS nel progetto Google Cloud. Solo i membri IAM con i ruoli Proprietario (roles/owner) o Amministratore Cloud KMS (roles/cloudkms.admin) possono concedere o revocare l'accesso alle risorse Cloud KMS.

Abilitazione di CMEK per un servizio Cloud Run:

Qualsiasi modifica alla configurazione porta alla creazione di una nuova revisione. Le revisioni successive riceveranno automaticamente questa impostazione di configurazione, a meno che non apporti aggiornamenti espliciti per modificarla.

Console

  1. Vai a Cloud Run

  2. Fai clic su Crea servizio se stai configurando un nuovo servizio in cui stai eseguendo il deployment. Se stai configurando un servizio esistente, fai clic sul servizio e poi su Modifica ed esegui il deployment di una nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina delle impostazioni del servizio iniziale come preferisci, quindi fai clic su Container, Networking, Security per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Sicurezza.

    immagine

  5. Seleziona la casella di controllo Utilizza una chiave di crittografia gestita dal cliente (CMEK) , quindi seleziona la chiave desiderata dal menu a discesa Seleziona una chiave gestita dal cliente.

  6. Fai clic su Crea o Salva.

Riga di comando

Per impostare una chiave per un servizio, utilizza uno dei seguenti comandi:

gcloud run deploy SERVICE --image IMAGE_URL --key KEY
gcloud run services update SERVICE --key KEY

Sostituisci

  • SERVICE il nome del tuo servizio.
  • IMAGE_URL con un riferimento all'immagine container, ad esempio, us-docker.pkg.dev/cloudrun/container/hello:latest
  • KEY con il nome chiave completo, nel seguente formato:projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

YAML

Puoi scaricare e visualizzare le configurazioni di servizio esistenti utilizzando il comando gcloud run services describe --format export, che genera risultati puliti in formato YAML. Successivamente, potrai modificare i campi descritti di seguito e caricare il file YAML modificato utilizzando il comando gcloud run services replace. Assicurati di modificare solo i campi come documentato.

  1. Per visualizzare e scaricare la configurazione:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Aggiorna l'annotazione run.googleapis.com/encryption-key:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/encryption-key: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
          name: REVISION

    Sostituisci

    • SERVICE con il nome del servizio Cloud Run.
    • PROJECT_NAME con il nome del progetto in cui è stata creata la chiave.
    • LOCATION con la posizione in cui è stata creata la chiave. Deve corrispondere alla località del servizio Cloud Run.
    • RING_NAME con il nome del keyring.
    • KEY_NAME con il nome della chiave.
    • REVISION con un nuovo nome di revisione o eliminalo (se presente). Se fornisci un nuovo nome della revisione, deve soddisfare i seguenti criteri:
      • Inizia con SERVICE-
      • Contiene solo lettere minuscole, numeri e -
      • Non termina con -
      • Non superare i 63 caratteri.
  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml

Fare riferimento a chiavi di altri progetti

Puoi fare riferimento a una chiave da un altro progetto se l'account di servizio del progetto ha consentito di criptare/decriptare la chiave.

Console

  1. Vai a Cloud Run

  2. Fai clic su Crea servizio se stai configurando un nuovo servizio in cui stai eseguendo il deployment. Se stai configurando un servizio esistente, fai clic sul servizio e poi su Modifica ed esegui il deployment di una nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina delle impostazioni del servizio iniziale come preferisci, quindi fai clic su Container, Networking, Security per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Sicurezza.

    immagine

  5. Nella scheda Sicurezza:

    1. Seleziona la casella di controllo Utilizza una chiave di crittografia gestita dal cliente (CMEK) .
    2. Seleziona Non trovi il token? Inserisci l'ID risorsa della chiave dall'elenco a discesa Seleziona una chiave gestita dal cliente per visualizzare il seguente modulo:

      Chiavi tra progetti

    3. Nel modulo Aggiungi un secret per ID risorsa, inserisci il secret dall'altro progetto, nel formato projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME. In alternativa, puoi copiare e incollare l'ID risorsa dall'altro progetto se hai accesso a quest'ultimo, selezionando la chiave, facendo clic sui puntini di sospensione Azioni a destra del secret e selezionando Copia ID risorsa dal menu a discesa.
    4. Fai clic su Esegui il deployment.

  6. Fai clic su Crea o Salva.

Riga di comando

Per impostare una chiave per un servizio, utilizza uno dei seguenti comandi:

gcloud beta run deploy SERVICE --image IMAGE_URL --key KEY
gcloud beta run services update SERVICE --key KEY

Sostituisci

  • SERVICE il nome del tuo servizio.
  • IMAGE_URL con un riferimento all'immagine container, ad esempio, us-docker.pkg.dev/cloudrun/container/hello:latest
  • KEY con il nome chiave completo, nel seguente formato:projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

Visualizzazione delle impostazioni di sicurezza

Informazioni sugli audit log e sui messaggi di errore

Se sei responsabile del monitoraggio degli audit log, una delle attività potrebbe essere la verifica delle operazioni CMEK nel servizio Cloud Run. In questo caso, devi comprendere gli audit log correlati.

Se sei responsabile di risolvere e correggere gli errori di runtime del tuo servizio Cloud Run, potresti dover risolvere gli errori relativi a CMEK registrati durante il funzionamento del servizio Cloud Run.

Le seguenti sezioni forniscono le informazioni necessarie per le attività descritte sopra.

Audit log

Gli audit log di KMS forniscono un audit trail per ogni operazione eseguita con una chiave. Per i servizi Cloud Run abilitati per CMEK, Cloud Run aggiunge il contesto del chiamante specifico di Cloud Run che fornisce dettagli sul motivo per cui la chiave cliente è stata utilizzata dal sistema. La tabella seguente elenca i contesti che potresti visualizzare nei log di controllo:

Motivo dell'accesso alla chiave Descrizione
Decrypting CMEK-encrypted layer during container clone start. Registrato all'avvio di una nuova istanza.
Encrypting a newly created data-encryption-key w/ the customer-managed-encryption-key. Registrato durante il deployment di un servizio abilitato CMEK, in cui la chiave CMEK è sottoposta a wrapping da una chiave KMS.
Decrypting an existing encrypted data-encryption-key, under the same customer-managed-encryption-key, to be used to encrypt container contents. Registrato all'avvio di una nuova istanza, che richiede la decriptazione dell'immagine.
Performing an encrypt operation on dummy data to check the customer-managed-encryption-key status and access. Registrato quando viene eseguito un controllo di convalida sulla chiave, eseguito periodicamente.
Performing an decrypt operation on dummy data to check the customer-managed-encryption-key status and access. Registrato quando viene eseguito un controllo di convalida sulla chiave, eseguito periodicamente.

Per informazioni dettagliate sul formato e sui contenuti degli audit log, consulta la pagina Log di controllo di KMS.

Messaggi di errore

Tieni presente che i messaggi di errore forniti da un gestore di chiavi esterno vengono trasmessi direttamente ai log di Cloud Run per il tuo servizio.

Nella tabella seguente sono elencati i messaggi di errore relativi a CMEK che potresti visualizzare, oltre alle descrizioni e ai possibili rimedi.

Messaggio Descrizione
User's service account does not have CMEK decrypter permission. Service account: %s Soluzione: consentire al servizio di accedere alla chiave
User's KMS operation quota has been exceeded. CMEK key: %s Il servizio abilitato per CMEK utilizza la quota KMS per le operazioni con chiavi. Soluzione: richiedi una quota KMS maggiore
User's CMEK key has been disabled. CMEK key: %s La chiave CMEK è stata revocata. Soluzione: modifica la chiave CMEK del servizio ed esegui nuovamente il deployment del servizio.
User's CMEK key has been destroyed. CMEK key: %s La chiave CMEK è stata eliminata. Soluzione: modifica la chiave CMEK del servizio ed esegui nuovamente il deployment del servizio.
User's CMEK key has been scheduled for deletion. CMEK Key: %s È stata programmata l'eliminazione della chiave CMEK. Soluzione: modifica la chiave CMEK del servizio ed esegui nuovamente il deployment del servizio.

Passaggi successivi