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 i servizi integrati con CMEK, tra cui Cloud Run. L'utilizzo delle chiavi Cloud KMS ti consente di controllare il loro livello di protezione, la posizione, la pianificazione della rotazione, le autorizzazioni di utilizzo e di accesso e i confini di crittografia. L'utilizzo di Cloud KMS ti consente inoltre di visualizzare gli audit log e controllare i cicli di vita delle chiavi. Invece che essere di proprietà e gestite da Google, le chiavi di crittografia della chiave (KEK) simmetriche che proteggono i tuoi dati sono sotto il tuo controllo e vengono gestite in Cloud KMS.

Dopo aver configurato le risorse con i 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).

Tieni presente quanto segue:

  • I metadati dei file, come il percorso, non vengono criptati.
  • I metadati del servizio Cloud Run, come il nome o le variabili di ambiente, non vengono criptati utilizzando la chiave fornita, ma con una chiave di proprietà e gestita da Google.
  • Durante l'esecuzione, 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 Cloud Run non andrà a buon fine a meno che non venga utilizzata una nuova chiave valida.

Quote di Cloud KMS e Cloud Run

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

Le operazioni di crittografia e decrittografia che utilizzano le 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 ai fini delle 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 ai fini delle quote Cloud EKM nel progetto che contiene la chiave.

Per ulteriori informazioni, consulta Quote di Cloud KMS.

Comportamento della scalabilità automatica interessato da CMEK

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

La seguente tabella mostra le possibili variazioni di comportamento dovute all'utilizzo delle chiavi CMEK:

Operazione correlata a CMEK Comportamento della scalabilità automatica
Chiave disattivata/distrutta/revocata Le nuove istanze non verranno avviate.
Impossibile contattare il gestore delle chiavi esterno Se è possibile riprovare a richiedere la chiave, nessuna istanza viene arrestata durante i tentativi e non verranno avviate nuove istanze. L'escaling può sembrare più lento del previsto.
Se non è possibile riprovare la richiesta della chiave, non vengono avviate nuove istanze e quelle in esecuzione vengono chiuse 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 fai clic su Aggiungi entità nella scheda Autorizzazioni a destra.

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

      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 il seguente comando gcloud kms:

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

    Sostituisci

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

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

Configurare CMEK per un servizio Cloud Run

Qualsiasi modifica alla configurazione comporta la creazione di una nuova revisione. Anche le revisioni successive acquisiranno 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 Esegui il deployment del contenitore e seleziona Servizio per configurare un nuovo servizio. Se stai configurando un servizio esistente, fai clic sul servizio, poi su Modifica ed esegui il deployment di una nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina iniziale delle impostazioni 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

    • 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 tuo progetto può accedere alla chiave per le operazioni di crittografia e decrittografia.

        • Seleziona Inserisci la 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.

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

        • Arrestare 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 dello spegnimento 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 del 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 della chiave completo 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 della chiave.
  • SHUTDOWN_HOURS con il numero di ore di ritardo prima dell'interruzione 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 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 posizione del servizio Cloud Run.
    • KEYRING_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 tue preferenze di revoca della chiave.
    • SHUTDOWN_HOURS con il numero di ore di ritardo prima dell'interruzione del servizio dopo la revoca.
    • REVISION con un nuovo nome di revisione o eliminarla (se presente). Se fornisci un nuovo nome di revisione, questo deve soddisfare i seguenti criteri:
      • Inizia con SERVICE-
      • Deve contenere solo lettere minuscole, numeri e -
      • Non termina con -
      • Non deve superare 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 correnti per il 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 il seguente comando:

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

Testare la revoca CMEK

  1. Esegui il seguente 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. Disattivare la versione della chiave

  3. Attendi il numero di SHUTDOWN_HOURS specificato. Se non hai specificato Riattiva la chiave e modificato o reimplementato il servizio con il valore impostato sul minimo di un'ora.

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

curl SERVICE_URL

Informazioni sui log di controllo e sui messaggi di errore

Se sei responsabile del monitoraggio dei log di controllo, una delle tue attività potrebbe essere verificare le operazioni CMEK nel 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 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 una traccia di controllo per ogni operazione eseguita con una chiave. Per i servizi Cloud Run abilitati per CMEK, Cloud Run aggiunge il contesto dell'autore della chiamata specifico di Cloud Run che descrive in dettaglio il motivo per cui il sistema ha avuto accesso alla chiave del cliente. Nella tabella riportata di seguito sono elencati 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 per 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 decrittografia dell'immagine.
Performing an encrypt operation on dummy data to check the customer-managed-encryption-key status and access. Viene registrato ogni volta che viene eseguito un controllo di convalida della chiave, che viene eseguito periodicamente.
Performing a decrypt operation on dummy data to check the customer-managed-encryption-key status and access. Viene registrato ogni volta che viene eseguito un controllo di convalida della chiave, che viene eseguito 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 delle 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, oltre alle descrizioni e ai possibili rimedi.

Messaggio Descrizione
User's service account does not have CMEK decrypter permission. Service account: %s Rimedio: 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 di KMS. Soluzione: richiedi una quota KMS maggiore
User's CMEK key has been disabled. CMEK key: %s La chiave CMEK è stata revocata. Rimedio: 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. Rimedio: 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. Rimedio: modifica la chiave CMEK del servizio ed esegui nuovamente il deployment del servizio.

Passaggi successivi