Utilizzo delle chiavi di crittografia gestite dal cliente

Per impostazione predefinita, Cloud Run cripta i contenuti dei clienti inattivi. Cloud Run gestisce la crittografia per conto tuo senza che tu debba fare altro. Questa opzione è denominata Crittografia predefinita di Google.

Se vuoi controllare le tue chiavi di crittografia, puoi utilizzare le chiavi di crittografia gestite dal cliente (CMEK) in Cloud KMS con servizi integrati con CMEK, tra cui Cloud Run. L'utilizzo delle chiavi Cloud KMS ti consente di controllare il livello di protezione, la posizione, la pianificazione della rotazione, l'utilizzo e le autorizzazioni di accesso e i limiti crittografici. L'utilizzo di Cloud KMS consente anche di visualizzare i log di controllo e controllare i cicli di vita delle chiavi. Anziché essere di proprietà di Google e gestite da Google, le chiavi di crittografia delle chiavi (KEK) simmetriche che proteggono i tuoi dati sono controllate e gestite da te in Cloud KMS.

Dopo aver configurato le risorse con le chiavi CMEK, l'esperienza di accesso alle risorse Cloud Run è simile all'utilizzo della crittografia predefinita di Google. Per saperne di più sulle opzioni di crittografia, consulta Chiavi di crittografia gestite dal cliente (CMEK).

Per scoprire di più sulla protezione dei dati con CMEK nelle funzioni create utilizzando i comandi gcloud functions o l'API Cloud Functions v2, consulta Proteggere i dati con CMEK.

Tieni presente quanto segue:

  • I metadati dei file, come il percorso, non sono criptati.
  • I metadati del servizio Cloud Run, come il nome o le variabili di ambiente, non vengono criptati utilizzando la chiave fornita, ma con un Google-owned and Google-managed encryption key.
  • In fase di runtime, la memoria e i contenuti dei file non vengono 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 riuscirà a meno che non venga utilizzata una nuova chiave valida.

CMEK con Autokey di Cloud KMS

Puoi creare CMEK manualmente per proteggere le risorse Cloud Run oppure utilizzare Cloud KMS Autokey. Con Autokey, le chiavi normali e automatizzate vengono generate on demand durante la creazione delle risorse in Cloud Run. Gli agenti di servizio che utilizzano le chiavi per le operazioni di crittografia e decrittografia vengono creati se non esistono già e vengono concessi i ruoli IAM (Identity and Access Management) richiesti. Per ulteriori informazioni, consulta la panoramica di Autokey.

Per configurare CMEK manualmente, consulta Configurare CMEK per un servizio Cloud Run.

Per configurare CMEK utilizzando Autokey, consulta Utilizzare Autokey.

Autokey non è disponibile per le funzioni create utilizzando i comandi gcloud functions o l'API Cloud Functions v2.

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 le quote di 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 che utilizzano 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 Cloud KMS.
  • Per le chiavi CMEK hardware, a volte chiamate chiavi Cloud HSM, le operazioni di crittografia e decrittografia vengono conteggiate in base alle quote Cloud HSM nel progetto che contiene la chiave.
  • Per le chiavi CMEK esterne, a volte chiamate chiavi Cloud EKM, le operazioni di crittografia e decrittografia vengono conteggiate in base alle quote Cloud EKM nel progetto che contiene la chiave.

Per ulteriori informazioni, consulta Quote di Cloud KMS.

Comportamento della scalabilità automatica influenzato da CMEK

La scalabilità automatica prevista per il tuo servizio Cloud Run può essere influenzata quando utilizzi 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 con le chiavi.

La tabella seguente mostra i possibili cambiamenti nel comportamento dovuti all'utilizzo di CMEK:

Operazione correlata a CMEK Comportamento della scalabilità automatica
Chiave disattivata/eliminata/revocata Le nuove istanze non verranno avviate.
Impossibile contattare il gestore chiavi esterno Se la richiesta di chiave può essere ritentata, nessuna istanza viene arrestata durante i tentativi e non vengono avviate nuove istanze. Lo scale out può sembrare 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 Se questa quota viene superata, vengono registrati errori RESOURCE_EXHAUSTED e le nuove istanze non vengono avviate. Per risolvere il 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. Configura Artifact Registry per utilizzare CMEK.

  2. Utilizzando la guida rapida di Docker di Artifact Registry come riferimento, crea un repository Docker ed esegui il push di un'immagine.

  3. Utilizza una chiave simmetrica Cloud KMS esistente o crea una nuova chiave simmetrica.

  4. 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 crittografiche.

    2. Fai clic sul portachiavi della chiave per aprire la pagina dell'elenco delle 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 di Cloud Run. Ha il seguente suffisso:

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

    5. Nel campo Seleziona un ruolo, seleziona Cloud KMS CryptoKey Encrypter/Decrypter.

    6. Fai clic su Salva.

    gcloud

    Utilizza questo comando gcloud kms:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring=KEYRING \
    --location=LOCATION \
    --member serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
    --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'

    Sostituisci:

    • KEY_NAME con il nome della chiave.
    • KEYRING con il nome della chiave automatizzata.
    • LOCATION con il nome della tua regione.
    • PROJECT_NUMBER Con il numero di progetto in cui intendi eseguire il deployment del servizio Cloud Run.

    Per concedere il ruolo IAM roles/cloudkms.cryptoKeyEncrypterDecrypter, devi disporre dell'autorizzazione per amministrare le risorse Cloud KMS nel progettoGoogle 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.

Configura CMEK per un servizio Cloud Run

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

Console

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

    Vai a Cloud Run

  2. Seleziona Servizi dal menu e fai clic su Esegui il deployment del contenitore per configurare un nuovo servizio. Se stai configurando un servizio esistente, fai clic sul servizio, quindi su Modifica ed esegui il deployment della nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina delle impostazioni iniziali del servizio, quindi fai clic su Container, volumi, networking, sicurezza per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Sicurezza.

    immagine

    • Nella sezione Crittografia:
      1. Seleziona Chiave Cloud KMS.
      2. In Tipo di chiave, seleziona Cloud KMS.
      3. Dal menu Seleziona una chiave Cloud KMS, 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 tuo progetto può accedere alla chiave per le operazioni di crittografia e decrittografia.

        • Seleziona Inserisci chiave manualmente per inserire il secret da un progetto utilizzando il seguente formato: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_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 chiave del passaggio precedente.

      4. Dal menu Azione di revoca della chiave, scegli una delle seguenti opzioni:
        • Impedisci nuova istanza di container: non vengono avviate nuove istanze dopo la revoca della chiave CMEK.

        • Arresto il prima possibile: non vengono avviate nuove istanze e quelle esistenti vengono arrestate dopo la revoca della chiave CMEK.

        • Ritardo di spegnimento personalizzato: specifica il numero di ore prima dell'interruzione 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 tuo servizio.
  • IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. 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/KEYRING_NAME/cryptoKeys/KEY_NAME.
  • KEY_REVOCATION_ACTION con shut-down o prevent-new, a seconda delle tue preferenze di revoca delle chiavi.
  • SHUTDOWN_HOURS con il numero di ore di ritardo prima dell'arresto del servizio dopo la revoca.

YAML

  1. Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:

    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/KEYRING_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 posizione in cui è stata creata la chiave. Deve corrispondere alla località del servizio Cloud Run.
    • KEYRING_NAME con il nome della chiave automatizzata.
    • KEY_NAME con il nome della chiave.
    • KEY_REVOCATION_ACTION con shut-down o prevent-new, a seconda delle tue preferenze di revoca delle chiavi.
    • SHUTDOWN_HOURS con il numero di ore di ritardo prima dell'arresto del servizio dopo la revoca.
    • REVISION con un nuovo nome di revisione o eliminalo (se presente). Se fornisci un nuovo nome di revisione, questo 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 sua nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml

Terraform

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Aggiungi quanto segue a una risorsa google_cloud_run_v2_service nella configurazione Terraform.

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE"
  location = "europe-west1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    encryption_key = "projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME"
  }
}

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.
  • KEYRING_NAME con il nome della chiave automatizzata.
  • KEY_NAME con il nome della chiave.

Utilizzare Autokey

Se non l'hai ancora fatto, attiva Cloud KMS Autokey.

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

Console

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

    Vai a Cloud Run

  2. Seleziona Servizi dal menu e fai clic su Esegui il deployment del contenitore per configurare un nuovo servizio. Se stai configurando un servizio esistente, fai clic sul servizio, quindi su Modifica ed esegui il deployment della nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina delle impostazioni iniziali del servizio, quindi fai clic su Container, volumi, networking, sicurezza per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Sicurezza.

    immagine

    • Nella sezione Crittografia:
      1. Nel menu Tipo di chiave, seleziona Cloud KMS con Autokey.
      2. Fai clic su Richiedi una chiave.
      3. Fai clic su Crea.

        I dettagli della chiave vengono mostrati dopo la creazione della risorsa.

      4. Dal menu Azione di revoca della chiave, scegli una delle seguenti opzioni:
        • Impedisci nuova istanza di container: non vengono avviate nuove istanze dopo la revoca di CMEK.

        • Arresto il prima possibile: non vengono avviate nuove istanze e quelle esistenti vengono arrestate dopo la revoca di CMEK.

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

  5. Fai clic su Crea o Esegui il deployment.

Visualizzazione delle impostazioni di sicurezza

Per visualizzare le impostazioni di sicurezza correnti 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.

gcloud

  1. Utilizza questo comando:

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

Configurazione aggiuntiva per le implementazioni basate sull'origine

I deployment dell'origine Cloud Run e delle funzioni comportano un passaggio di compilazione aggiuntivo. Per garantire la conformità CMEK di questo passaggio, devi:

  1. Crea il tuo bucket Cloud Storage criptato con CMEK. Per maggiori dettagli, consulta la documentazione di CMEK per Cloud Storage.

  2. Carica il codice sorgente nel bucket di archiviazione criptato con CMEK come file di archivio compresso.

  3. Crea un repository Artifact Registry criptato con CMEK. Per maggiori dettagli, consulta la documentazione di CMEK per Artifact Registry. Questo repository archivia gli artefatti prodotti dalprocesso di compilazioned.

  4. Esegui il deployment della funzione, passando le risorse di build utilizzando i flag --source e --image.

    gcloud run deploy FUNCTION \
        --key KEY \
        --source CUSTOM_BUCKET_WITH_SOURCE_CODE \
        --image CUSTOM_AR_REPOSITORY \
        --function FUNCTION_ENTRYPOINT \
        --base-image BASE_IMAGE \
        --region REGION

Sostituisci:

  • FUNCTION con il nome della funzione che stai eseguendo il deployment. Puoi omettere completamente questo parametro, ma ti verrà chiesto il nome se lo ometti.

  • KEY con il nome completo della chiave nel seguente formato: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.

  • CUSTOM_BUCKET_WITH_SOURCE_CODE con l'URI di una posizione Cloud Storage in cui è archiviato il codice sorgente. Utilizza il seguente formato: gs://BUCKET_NAME/PATH_TO_SOURCE.

  • CUSTOM_AR_REPOSITORY con l'URI di un repository Artifact Registry nel formato REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME.

  • FUNCTION_ENTRYPOINT con l'entry point della tua funzione nel codice sorgente. Questo è il codice eseguito da Cloud Run quando viene eseguita la funzione. Il valore di questo flag deve essere un nome di funzione o un nome di classe completo che esiste nel codice sorgente.

  • BASE_IMAGE con l'ambiente dell'immagine di base per la tua funzione. Per maggiori dettagli sulle immagini di base e sui pacchetti inclusi in ciascuna immagine, consulta Immagini di base dei runtime.

  • REGION con la Google Cloud regione in cui vuoi eseguire il deployment della funzione. Ad esempio: europe-west1.

Inoltre, se utilizzi Eventarc per attivare le tue funzioni, acquisisci familiarità con la configurazione CMEK per Eventarc. In particolare, la piena conformità in questi casi richiede la crittografia dei canali corrispondenti ai tipi di eventi utilizzati.

Testare la revoca CMEK

Per verificare che la protezione CMEK funzioni, puoi disattivare la chiave che hai utilizzato per attivare CMEK per un servizio, quindi provare a richiamare il servizio:

  1. Esegui questo comando per verificare che il servizio sia accessibile:

    curl SERVICE_URL

    Sostituisci SERVICE_URL con l'URL del servizio. Puoi trovarlo nell'interfaccia utente della console dopo il deployment: l'URL del contenitore viene visualizzato accanto al testo URL:.

  2. Disattiva la versione della chiave.

  3. Attendi il numero di SHUTDOWN_HOURS che hai specificato. Se non hai specificato il numero di ore di spegnimento, riattiva la chiave e modifica o ridistribuisci il servizio con il valore impostato sul minimo di un'ora. Se hai eseguito il deployment del codice sorgente, prova a visualizzarlo. Il tentativo dovrebbe non riuscire.

  4. Dopo aver atteso la durata SHUTDOWN_HOURS impostata, esegui di nuovo il seguente comando e verifica che il servizio non sia più accessibile:

     curl SERVICE_URL
     

  5. Dopo aver verificato che la versione della chiave è disabilitata, abilita la chiave.

Informazioni sugli audit log e sui messaggi di errore

Se sei responsabile del monitoraggio dei log di controllo, una delle tue attività potrebbe essere quella di verificare le operazioni CMEK nel tuo servizio Cloud Run. In questo caso, devi comprendere i log di controllo correlati.

Se sei responsabile della gestione e della correzione degli errori di runtime per il tuo servizio Cloud Run, potresti dover risolvere i problemi 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 una traccia di controllo per ogni operazione eseguita con una chiave. Per i servizi Cloud Run abilitati a CMEK, Cloud Run aggiunge un contesto del chiamante specifico di Cloud Run che descrive in dettaglio il motivo per cui il sistema ha eseguito l'accesso alla chiave del cliente. 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 ogni volta che 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 a CMEK, in cui la chiave di crittografia dei dati è sottoposta a wrapping da CMEK.
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 ogni volta che viene eseguito un controllo di convalida della chiave, operazione eseguita periodicamente.
Performing a 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, operazione eseguita periodicamente.

Per informazioni specifiche sul formato e sui contenuti dei log di controllo, consulta la pagina Log di controllo 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 alle possibili soluzioni.

Messaggio 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 a CMEK ha superato le quote KMS. Soluzione: richiedi una quota KMS maggiore
User's CMEK key has been disabled. CMEK key: %s La chiave CMEK è stata revocata. Soluzione: modifica la 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 CMEK del servizio ed esegui nuovamente il deployment del servizio.
User's CMEK key has been scheduled for deletion. CMEK Key: %s L'eliminazione della CMEK è stata pianificata. Soluzione: modifica la CMEK del servizio ed esegui nuovamente il deployment del servizio.

Passaggi successivi