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 at-rest CMEK.

Tieni presente quanto segue:

  • I metadati dei file, ad esempio il percorso, non sono criptati.
  • I metadati del servizio Cloud Run, come nome o variabili di ambiente, non vengono criptati utilizzando la chiave fornita, ma con una chiave gestita da Google.
  • In fase di runtime, la memoria e i contenuti dei file non sono criptati.
  • Se una chiave CMEK è disabilitata, le nuove istanze delle 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 non andrà a buon fine, a meno che non venga utilizzata una nuova chiave valida.

Poiché la chiave CMEK è all'interno del tuo controllo e non è controllata da Google, nessuno, compresa Google, può accedere ai dati protetti da queste chiavi di crittografia quando le chiavi vengono disabilitate o eliminate.

L'utilizzo di CMEK genera audit log. Per maggiori dettagli, consulta Informazioni sugli audit log e sui messaggi di errore.

Quote di Cloud KMS e Cloud Run

Puoi impostare la tua CMEK su uno dei livelli di protezione disponibili per indicare come vengono eseguite le operazioni crittografiche. Quando utilizzi CMEK in Cloud Run, i tuoi progetti possono consumare quote per le richieste crittografiche di Cloud KMS. Ad esempio, i repository criptati con CMEK possono consumare queste quote per ogni caricamento o download.

Le operazioni di crittografia e decriptazione mediante chiavi CMEK influiscono sulle quote di Cloud KMS nei seguenti modi:

  • Per le chiavi CMEK software generate in Cloud KMS, non viene consumata alcuna quota di Cloud KMS.
  • Per le chiavi CMEK hardware, a volte chiamate chiavi Cloud HSM, le operazioni di crittografia e decriptazione vengono conteggiate ai fini delle quote di Cloud HSM nel progetto che contiene la chiave.
  • Per le chiavi CMEK esterne, a volte chiamate chiavi Cloud EKM, le operazioni di crittografia e decriptazione vengono conteggiate ai fini delle quote di Cloud EKM nel progetto che contiene la chiave.

Per ulteriori informazioni, consulta Quote di Cloud KMS.

Comportamento di scalabilità automatica interessato da CMEK

L'utilizzo di chiavi di crittografia gestite dal cliente può influire sulla scalabilità automatica prevista per il tuo servizio Cloud Run. Ad esempio, la latenza per l'avvio di nuove istanze può aumentare a causa dei ritardi nel contattare i sistemi di gestione delle chiavi esterni durante le operazioni delle chiavi.

La tabella seguente mostra le possibili modifiche del comportamento dovute all'utilizzo delle chiavi CMEK:

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

Prima di iniziare

Consentire a Cloud Run di accedere a una chiave

Per utilizzare CMEK per Cloud Run, segui questi passaggi:

  1. Utilizza una chiave simmetrica di Cloud KMS esistente o crea una nuova chiave simmetrica.

  2. Per consentire a Cloud Run di accedere alla chiave, concedi all'agente di servizio Cloud Run il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS:

    Console

    1. Vai alla pagina Chiavi di crittografia.

    2. Fai clic sul keyring della chiave per aprire la pagina del relativo elenco di chiavi.

    3. Seleziona la chiave e, nella scheda Autorizzazioni a destra, fai clic su Aggiungi entità.

    4. Nel campo Nuove entità, copia l'email dell'agente di servizio Cloud Run. Ha il seguente suffisso:

      @serverless-robot-prod.iam.gserviceaccount.com.

    5. Nel campo Seleziona un ruolo, seleziona Autore crittografia/decriptazione CryptoKey Cloud KMS.

    gcloud

    Utilizza il seguente comando gcloud kms:

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

    Sostituisci

    • KEY_NAME con il nome della chiave.
    • KEYRING con il nome del tuo keyring.
    • LOCATION con il nome della tua regione.
    • 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 il ruolo Proprietario (roles/owner) o Amministratore Cloud KMS (roles/cloudkms.admin) possono concedere o revocare l'accesso alle risorse Cloud KMS.

Configurazione di CMEK per un servizio Cloud Run

Qualsiasi modifica alla configurazione comporta la creazione di una nuova revisione. Anche per le revisioni successive verrà applicata automaticamente questa impostazione di configurazione, a meno che non apporti aggiornamenti espliciti per modificarla.

Console

  1. Nella console Google Cloud, vai a Cloud Run:

    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 nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina iniziale delle impostazioni del servizio in base alle tue esigenze, quindi fai clic su Container, volumi, networking, sicurezza per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Sicurezza.

    immagine

    • In Crittografia:
      1. Seleziona Chiave di crittografia gestita dal cliente (CMEK).
      2. Dal menu Seleziona una chiave gestita dal cliente, scegli una delle seguenti opzioni:
        • Seleziona Cambia progetto se devi utilizzare una chiave di un altro progetto. Puoi fare riferimento a una chiave di un altro progetto se l'account di servizio del progetto può accedere alla chiave per le operazioni di crittografia e decriptazione.

        • Seleziona Inserisci la chiave manualmente per inserire il secret di un progetto, utilizzando il seguente formato: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME.

        Per copiare e incollare il nome della risorsa da un altro progetto a cui hai accesso:

        • Vai alla pagina Chiavi di crittografia.
        • Fai clic sul keyring
        • Seleziona il nome del keyring scelto e fai clic su Azioni.
        • Seleziona Copia nome risorsa dal menu e incollalo nel campo Nome risorsa della chiave del passaggio precedente.

      3. Dal menu Azione di revoca della chiave, scegli una delle seguenti opzioni:
        • Impedisci nuova istanza di container: nessuna nuova istanza viene avviata dopo la revoca della chiave CMEK.

        • Arresto il prima possibile: nessuna nuova istanza viene avviata e quelle esistenti vengono arrestate dopo la revoca della chiave CMEK.

        • Ritardo di arresto personalizzato: specifica il numero di ore prima dell'arresto del servizio.

  5. Fai clic su Crea o Esegui il deployment.

gcloud

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

gcloud run deploy SERVICE \
--image IMAGE_URL \
--key KEY \
--post-key-revocation-action-type KEY_REVOCATION_ACTION
--encryption-key-shutdown-hours SHUTDOWN_HOURS
gcloud run services update SERVICE --key KEY
--post-key-revocation-action-type KEY_REVOCATION_ACTION
--encryption-key-shutdown-hours SHUTDOWN_HOURS

Sostituisci

  • SERVICE con il nome del servizio.
  • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, è necessario già creare il repository REPO_NAME. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • KEY con il nome completo della chiave nel seguente formato: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME.
  • KEY_REVOCATION_ACTION con shut-down o prevent-new, a seconda delle preferenze di revoca della chiave.
  • SHUTDOWN_HOURS con il numero di ore di ritardo prima dell'arresto del servizio dopo la revoca.

YAML

Puoi scaricare e visualizzare le configurazioni di servizio esistenti 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 utilizzando il comando gcloud run services replace. Assicurati di modificare i campi solo come documentato.

  1. Per visualizzare e scaricare la configurazione:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Aggiorna le seguenti annotazioni CMEK con i valori che preferisci:

    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
            run.googleapis.com/post-key-revocation-action-type: KEY_REVOCATION_ACTION
            run.googleapis.com/encryption-key-shutdown-hours: SHUTDOWN_HOURS
          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 località 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.
    • KEY_REVOCATION_ACTION con shut-down o prevent-new, a seconda delle preferenze di revoca della chiave.
    • SHUTDOWN_HOURS con il numero di ore di ritardo prima dell'arresto del servizio dopo la revoca.
    • REVISION con un nuovo nome di revisione oppure eliminala (se presente). Se specifichi un nuovo nome, la revisione deve soddisfare i seguenti criteri:
      • Inizia con SERVICE-
      • Contiene solo lettere minuscole, numeri e -
      • Non termina con -
      • Non supera i 63 caratteri
  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml

Visualizzazione delle impostazioni di sicurezza

Per visualizzare le impostazioni di sicurezza attuali per il tuo servizio Cloud Run:

Console

  1. Nella console Google Cloud, vai a Cloud Run:

    Vai a Cloud Run

  2. Fai clic sul servizio che ti interessa per aprire la pagina Dettagli servizio.

  3. Fai clic sulla scheda Revisioni.

  4. Nel riquadro dei dettagli a destra, l'impostazione di sicurezza è elencata nella scheda Sicurezza.

Riga di comando

  1. Utilizza il seguente comando:

    gcloud run services describe SERVICE
  2. Individua l'impostazione di sicurezza nella configurazione restituita.

Informazioni su audit log e messaggi di errore

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

Se sei responsabile di risolvere e risolvere gli 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à precedenti.

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 un contesto del chiamante specifico per Cloud Run che descrive in dettaglio il motivo per cui il sistema ha eseguito l'accesso alla chiave del cliente. La seguente tabella elenca i contesti che potresti vedere negli audit log:

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 viene 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 quando viene avviata una nuova istanza, il che richiede la decrittografia dell'immagine.
Performing an encrypt operation on dummy data to check the customer-managed-encryption-key status and access. Registrato ogni volta che viene eseguito un controllo di convalida della chiave, che viene eseguito periodicamente.
Performing an decrypt operation on dummy data to check the customer-managed-encryption-key status and access. Registrato ogni volta che viene eseguito un controllo di convalida della chiave, che viene eseguito periodicamente.

Per specifiche sul formato e sul contenuto degli audit log, consulta la pagina Audit logging 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.

La seguente tabella elenca i messaggi di errore relativi a CMEK che potresti visualizzare, insieme alle descrizioni e ai possibili rimedi.

Message Descrizione
User's service account does not have CMEK decrypter permission. Service account: %s Soluzione: consenti al servizio di accedere alla chiave
User's KMS operation quota has been exceeded. CMEK key: %s Il servizio abilitato per CMEK ha superato le quote KMS. Soluzione: richiedi l'aumento della quota KMS
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 pianificata l'eliminazione della chiave CMEK. Soluzione: modifica la chiave CMEK del servizio ed esegui nuovamente il deployment del servizio.

Passaggi successivi