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 questo funzionalità per proteggere i container importati da Cloud Run con una chiave CMEK a riposo.

Tieni presente quanto segue:

  • I metadati del file, ad esempio il percorso del file, non sono criptati.
  • Metadati del servizio Cloud Run, ad esempio il nome o l'ambiente non viene criptato usando la chiave fornita, ma con una chiave di proprietà di Google e gestita da Google.
  • In fase di runtime, la memoria e i contenuti del 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 Cloud Run non andrà a buon fine, a meno che non venga utilizzata una nuova chiave valida.

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

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

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 usi CMEK in Cloud Run, i tuoi progetti possono consumare richieste crittografiche di Cloud KMS quote. Ad esempio, i repository criptati con CMEK possono utilizzare queste quote per ogni caricamento o download.

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

Per ulteriori informazioni, consulta Quote di Cloud KMS.

Comportamento di scalabilità automatica influenzato da CMEK

La scalabilità automatica prevista per i tuoi L'utilizzo della gestione dal cliente può incidere sul servizio Cloud Run chiavi di crittografia. 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 di scalabilità automatica
Chiave disattivata/distrutta/revocata Le nuove istanze non verranno avviate.
Impossibile contattare il gestore di chiavi esterno Se è possibile riprovare a richiedere la chiave, nessuna istanza viene arrestata durante i tentativi e non verranno avviate nuove istanze. Lo scale out può apparire più lento del previsto.
Se non è possibile ritentare la richiesta della chiave, non viene avviata alcuna nuova istanza e dopo un certo periodo di attesa le istanze in esecuzione vengono arrestate.
Quota KMS superata Se questa quota viene superata, vengono registrati RESOURCE_EXHAUSTED errori e le nuove istanze non verranno avviate. Per risolvere questo problema, puoi richiedere una quota aggiuntiva.

Prima di iniziare

Consenti 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. Utilizzo della guida rapida di Docker di Artifact Registry come riferimento, per creare un repository Docker eseguendo il push di un'immagine.

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

  4. Per consentire a Cloud Run di accedere alla chiave, concedi la classe all'agente di servizio Cloud Run Ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS:

    Console

    1. Vai alla pagina Chiavi di crittografia.

    2. Fai clic sul mazzo di chiavi 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 il file Cloud Run l'indirizzo email dell'agente di servizio. Ha il seguente suffisso:

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

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

    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 che vuoi 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 membri IAM con il proprietario (roles/owner) o l'amministratore Cloud KMS (roles/cloudkms.admin) i ruoli possono concedere o revocare l'accesso alle risorse Cloud KMS.

Configurare CMEK per un servizio Cloud Run

Qualsiasi modifica alla configurazione porta 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, quindi fai clic 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. Nel menu Seleziona una chiave gestita dal cliente, scegli una delle le 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 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 CMEK la revoca della chiave.

        • Arresta il prima possibile: non verranno avviate nuove istanze ed esistenti di istanze gestite 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 tuo 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 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 della chiave.
  • SHUTDOWN_HOURS con il numero di ore di ritardo prima di viene chiuso 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 a cui era la chiave in cui è stato creato.
    • LOCATION con la località 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 di viene chiuso dopo la revoca.
    • REVISION con un nuovo nome di revisione o eliminala (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 attuali del 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 Dettagli servizio. .

  3. Fai clic sulla scheda Revisioni.

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

gcloud

  1. Utilizza il seguente comando:

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

Testa la revoca CMEK

  1. Esegui questo comando per confermare che il servizio è 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. In caso contrario specifica riattiva la chiave e modifica o eseguire nuovamente il deployment del servizio impostando il valore minimo di un'ora.

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

curl SERVICE_URL

Informazioni sui log di controllo e sui messaggi di errore

Se sei responsabile del monitoraggio degli audit log, una delle attività potrebbe essere quella di e verificherai le operazioni CMEK nel tuo servizio Cloud Run. In questo caso, non è un problema di comprensione degli audit log 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 KMS forniscono un audit trail per ogni eseguita con una chiave. Per i servizi Cloud Run abilitati per CMEK, Cloud Run aggiunge un contesto del chiamante specifico di Cloud Run nel dettaglio il motivo per cui il sistema ha eseguito l'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 CMEK, dove 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. Registrato quando viene eseguito un controllo di convalida della chiave, eseguito periodicamente.

Per dettagli sul formato e sui contenuti degli audit log, consulta 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.

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: consentire 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 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 di nuovo 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 di nuovo il deployment del servizio.

Passaggi successivi