Utilizzo delle chiavi di crittografia gestite dal cliente

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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 inattiva.

Tieni presente quanto segue:

  • I metadati dei file, come il percorso, non vengono criptati.
  • I metadati del servizio Cloud Run, ad esempio variabili di nome o ambiente, non vengono criptati utilizzando la chiave fornita, ma con una chiave gestita da Google.
  • Durante l'esecuzione, la memoria e i contenuti dei file non vengono criptati.
  • Se una chiave CMEK è disabilitata, le nuove istanze container 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 se non viene 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 delle chiavi di crittografia gestite dal cliente. Ad esempio, la latenza per l'avvio di nuove istanze può aumentare a causa di ritardi nel contatto con i sistemi di gestione delle chiavi esterni durante le operazioni sulle chiavi.

La tabella seguente mostra le possibili modifiche al comportamento dovute all'uso di chiavi CMEK:

Operazione relativa a CMEK Comportamento di scalabilità automatica
Chiave disabilitata/eliminata Le nuove istanze non verranno avviate.
Impossibile contattare il gestore delle chiavi esterno Se è possibile riprovare con la richiesta di chiave, non viene eseguito l'arresto di alcuna istanza durante i nuovi tentativi e non verrà avviata nessuna nuova istanza. Lo scale out può apparire più lento del previsto.
Se non è possibile ritentare 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, vengono registrati RESOURCE_EXHAUSTED errori e non vengono avviate nuove istanze. Puoi richiedere una quota aggiuntiva per risolvere il problema.

Consentire a Cloud Run di accedere a una chiave

Per utilizzare questa funzionalità:

  1. Abilita l'API Cloud Run Admin

  2. Usa una chiave simmetrica di 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 Cloud Encryption/Decrypter di Cloud KMS:

    Console

    1. Vai alla pagina Chiavi di crittografia in Google Cloud Console

    2. Fai clic sul keyring della chiave per aprire la pagina con l'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'email dell'agente di servizio Cloud Run. Ha il suffisso @serverless-robot-prod.iam.gserviceaccount.com.

    5. Concedi il ruolo Criptatore/decriptatore CryptoKey Cloud KMS.

    Riga di comando

    Utilizza il comando gcloud kms seguente:

    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 area geografica.
    • MEMBER con l'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 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 della configurazione determina la creazione di una nuova revisione. Anche 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, quindi 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, connessioni, sicurezza 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 Esegui il deployment.

Riga di comando

Per impostare una chiave in 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 con 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 la configurazione del servizio esistente utilizzando il comando gcloud run services describe --format export, che restituisce risultati puliti in formato YAML. Puoi quindi modificare i campi descritti di seguito e caricare il file YAML modificato con 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 tuo 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 si fornisce un nuovo nome di revisione, deve soddisfare i seguenti criteri:
      • Inizia con SERVICE-
      • Contiene solo lettere minuscole, numeri e -
      • Non termina con -
      • Non superi 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 provenienti da altri progetti

Puoi fare riferimento a una chiave di un altro progetto se l'account di servizio del progetto è stato 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, quindi 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, connessioni, sicurezza 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 vedi 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 puoi accedervi selezionandolo, facendo clic sui puntini di sospensione Azioni a destra del secret e selezionando ID risorsa risorsa dal menu a discesa.
    4. Fai clic su Esegui il deployment.

  6. Fai clic su Crea o Esegui il deployment.

Riga di comando

Per impostare una chiave su un servizio, usa uno dei seguenti comandi:

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

Sostituisci

  • SERVICE con 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 quella di verificare le operazioni CMEK nel servizio Cloud Run. In questo caso, devi comprendere gli audit log correlati.

Se sei responsabile della risoluzione e della correzione degli errori di runtime per il servizio Cloud Run, potresti dover risolvere gli errori relativi a CMEK registrati durante il funzionamento del servizio Cloud Run.

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

Audit log

Gli log di controllo KMS forniscono un audit trail per ogni operazione eseguita con una chiave. Per i servizi Cloud Run abilitati per CMEK, Cloud Run aggiunge un contesto chiamante specifico di Cloud Run che descrive il motivo per cui il sistema ha eseguito l'accesso alla chiave cliente. Nella tabella seguente sono elencati i contesti che potresti vedere nei log di controllo:

Motivo dell'accesso alla chiave Descrizione
Decrypting CMEK-encrypted layer during container clone start. Registrato quando viene avviata una nuova istanza.
Encrypting a newly created data-encryption-key w/ the customer-managed-encryption-key. Registrato durante il deployment di un servizio abilitato per CMEK, in cui la chiave CMEK è aggregata 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 è presente 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 è presente un controllo di convalida sulla chiave, eseguito periodicamente.

Per informazioni dettagliate sul formato e sui contenuti del log di controllo, consulta la pagina Log di controllo di Logging.

Messaggi di errore

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

La tabella seguente elenca i messaggi di errore relativi a CMEK che potrebbero essere visualizzati, insieme a descrizioni e possibili rimedi.

Messaggio Descrizione
User's service account does not have CMEK decrypter permission. Service account: %s Rimedio: 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 chiave. Rimedio: richiedi una quota KMS maggiore
User's CMEK key has been disabled. CMEK key: %s La chiave CMEK è stata revocata. Rimedio: cambiare la chiave CMEK del servizio ed eseguire nuovamente il deployment del servizio.
User's CMEK key has been destroyed. CMEK key: %s La chiave CMEK è stata eliminata. Rimedio: cambiare la chiave CMEK del servizio ed eseguire nuovamente il deployment del servizio.
User's CMEK key has been scheduled for deletion. CMEK Key: %s È stata pianificata l'eliminazione della chiave CMEK. Rimedio: cambiare la chiave CMEK del servizio ed eseguire nuovamente il deployment del servizio.

Passaggi successivi