Abilita chiavi di crittografia gestite dal cliente per Secret Manager

Questo argomento illustra il supporto per le chiavi di crittografia gestite dal cliente (CMEK) in Secret Manager.

Panoramica

Secret Manager fornisce strumenti per l'archiviazione, la gestione e l'accesso ai dati sensibili nelle applicazioni.

Per impostazione predefinita, i secret archiviati in Secret Manager sono criptati con la crittografia predefinita di Google. Con la crittografia predefinita di Google, i payload dei secret vengono criptati dalle chiavi gestite da Google prima di essere scritti nell'archiviazione permanente, senza necessità di configurazione. La crittografia predefinita di Google è la scelta migliore per molte organizzazioni.

Per le organizzazioni che vogliono un maggiore controllo, il supporto CMEK per Secret Manager consente di configurare la chiave Cloud KMS che protegge i dati at-rest in Secret Manager.

Come funziona CMEK in Secret Manager

Prima di scrivere una versione del secret nello spazio di archiviazione permanente in una determinata località, Secret Manager cripta i dati con una chiave di crittografia dei dati univoca (DEK). Questa DEK viene quindi criptata con una chiave specifica della replica, chiamata chiave di crittografia della chiave (KEK) di proprietà del servizio Secret Manager.

Quando si utilizza CMEK per Secret Manager, la KEK è chiamata chiave CMEK ed è una chiave simmetrica che si gestisce all'interno di Cloud KMS. La chiave CMEK deve trovarsi nella stessa località Google Cloud della replica della versione del secret che cripta. Puoi anche utilizzare una chiave Cloud EKM nel criterio CMEK per crittografia e decriptazione.

Questa guida illustra come configurare Secret Manager per l'utilizzo di CMEK. Per ulteriori informazioni su CMEK in generale, inclusi quando e perché abilitarla, consulta la documentazione di Cloud Key Management Service.

Limitazioni

CMEK è disponibile solo nell'API Secret Manager v1 e in gCloud.

Prima di iniziare

Puoi scegliere di archiviare tutte le risorse nello stesso progetto o di archiviare secret e chiavi in progetti separati. Leggi la sezione Separazione dei compiti di Cloud KMS per comprendere meglio questa decisione.

Completa i seguenti prerequisiti per configurare Secret Manager e Cloud KMS:

  • Secret Manager:

    • Crea o utilizza un progetto esistente per contenere le risorse di Secret Manager.
    • Se necessario, completa i passaggi nella sezione Configurazione di Secret Manager della guida rapida di Secret Manager.
  • Cloud KMS:

    • Crea o utilizza un progetto esistente per archiviare le risorse Cloud KMS.
    • Se necessario, abilita l'API Cloud KMS.

Imposta le seguenti variabili sugli ID dei tuoi progetti Secret Manager e Cloud KMS.

This is an editable variable. Set it to your Secret Manager project ID and the
value will be used in all commands on this page.
SM_PROJECT_ID

This is an editable variable. Set it to your Cloud KMS project ID and the value
will be used in all commands on this page.
KMS_PROJECT_ID

Esegui l'autenticazione in Google Cloud:

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud auth login

Creazione di un'identità dell'agente di servizio

Devi creare un'identità dell'agente di servizio per ogni progetto che richiede chiavi di crittografia gestite dal cliente.

Per creare un'identità di servizio con Google Cloud CLI, esegui questo comando:

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud beta services identity create \
    --service "secretmanager.googleapis.com" \
    --project "SM_PROJECT_ID"

che restituirà un nome di identità di servizio nel seguente formato:

service-PROJECT_NUMBER@gcp-sa-secretmanager.iam.gserviceaccount.com

Salva il nome dell'identità del servizio:

The following variable is editable. Click on it to update the value, and it will
be reflected throughout this documentation page.

SM_SERVICE_IDENTITY

Concederai a questa identità di servizio l'accesso alle chiavi Cloud KMS CMEK utilizzate per criptare e decriptare i tuoi secret.

CMEK con replica automatica

Questa sezione illustra i secret configurati tramite un criterio di replica automatica.

Per i secret che utilizzano il criterio di replica automatica, la chiave CMEK deve trovarsi nella località multiregionale di Cloud KMS global. Se utilizzi una chiave Cloud EKM, non puoi configurare il secret per utilizzare la replica automatica perché le chiavi Cloud EKM non sono disponibili nella regione global. Per scoprire di più sull'utilizzo delle chiavi Cloud EKM, consulta Aggiungere una chiave Cloud EKM a un criterio CMEK.

Crea una chiave Cloud KMS simmetrica nell'area geografica Cloud KMS global oppure utilizza una chiave esistente. Questo esempio crea un nuovo keyring denominato secret-manager-cmek, quindi ne crea una nuova chiamata my-cmek-key.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "global"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Concedi l'identità del servizio per l'accesso a Secret Manager per criptare e decriptare utilizzando la chiave CMEK. Questo comando concede il ruolo Autore crittografia/decrittografia Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) nella chiave Cloud KMS my-cmek-key all'identità del servizio.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Crea un secret con replica automatica. Il nome della risorsa della chiave CMEK viene archiviato come metadati sul secret.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud secrets create "SECRET_ID" \
    --replication-policy "automatic" \
    --kms-key-name "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key" \
    --project "SM_PROJECT_ID"

API

Questi esempi utilizzano curl per dimostrare l'utilizzo dell'API. Puoi generare token di accesso con gcloud auth print-access-token. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

Imposta il valore di replication.automatic.customerManagedEncryption.kmsKeyName sul nome della risorsa per la chiave CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets?secretId=SECRET_ID" \
    --request "POST" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
      }
    }
  }
}
EOF

Ora, ogni volta che nel secret viene creata una versione del secret, il payload della versione viene automaticamente criptato tramite la chiave prima di essere scritto nello spazio di archiviazione permanente, purché l'identità del servizio abbia accesso alla chiave CMEK. Se l'identità di servizio perde l'accesso o se la chiave non è più disponibile, un tentativo di creare una nuova versione del secret o di accedere a una versione esistente restituisce un errore.

Aggiungi una nuova versione del secret. Tieni presente che non specifichi il nome della risorsa della chiave Cloud KMS, perché viene letto dai metadati del secret.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "SECRET_ID" \
    --project "SM_PROJECT_ID" \
    --data-file -

La versione del secret viene creata, anche se il chiamante non ha accesso diretto per utilizzare la chiave CMEK. L'identità di servizio di Secret Manager, anziché del chiamante, è responsabile della crittografia e decrittografia dei secret durante la lettura o la scrittura.

Allo stesso modo, non hai bisogno dell'accesso diretto alla chiave CMEK per accedere al secret. L'identità di servizio accede alla chiave e cripta o decripta il secret per tuo conto.

Accedi alla versione del secret appena creata:

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "SECRET_ID"

Aggiorna la configurazione CMEK

Crea una nuova chiave KMS simmetrica nella località multiregionale di Cloud KMS global.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Concedi l'identità del servizio per l'accesso a Secret Manager per criptare e decriptare utilizzando la nuova chiave CMEK. Questo comando concede il ruolo Autore crittografia / decrittografia Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) nella chiave Cloud KMS my-other-key all'identità del servizio.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Modifica la configurazione CMEK su un secret aggiornando la replica sul secret con i nuovi nomi delle risorse della chiave Cloud KMS.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud secrets replication update "SECRET_ID" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --project "SM_PROJECT_ID"

API

Questi esempi utilizzano curl per dimostrare l'utilizzo dell'API. Puoi generare token di accesso con gcloud auth print-access-token. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication": {
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
      }
    }
  }
}
EOF

CMEK con replica gestita dall'utente

Questa sezione illustra i secret configurati con un criterio di replica gestito dall'utente. Con un criterio di replica gestito dall'utente, puoi controllare la località Google Cloud in cui è archiviato il secret. I secret sono sempre accessibili da qualsiasi località Google Cloud.

I secret con un criterio di replica gestito dall'utente devono utilizzare chiavi Cloud KMS corrispondenti esattamente alle località in cui sono archiviate le versioni dei secret. Gli esempi in questa guida archiviano un secret in due località separate: us-east1, us- central1. Le richieste di accesso al secret vengono indirizzate a una di queste posizioni.

In ciascuna delle due regioni, crea un keyring e una chiave Cloud KMS a scopo di crittografia oppure utilizza una chiave esistente. Questo esempio crea un nuovo keyring denominato "secret-manager-cmek", quindi crea una chiave denominata "my-cmek-key" in ogni regione.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Concedi l'identità del servizio per l'autorizzazione di Secret Manager per criptare e decriptare utilizzando la chiave CMEK concedendo il ruolo Autore crittografia/decrittografia Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) per ciascuna delle chiavi CMEK singolarmente o per tutte le chiavi nel progetto.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Crea un secret abilitato per CMEK con la replica gestita dall'utente. Il nome della risorsa della chiave CMEK viene archiviato come metadati sul secret.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-east1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      },
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

Questi esempi utilizzano curl per dimostrare l'utilizzo dell'API. Puoi generare token di accesso con gcloud auth print-access-token. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

Imposta il valore di replication.userManaged.replicas.customerManagedEncryption.kmsKeyName sui nomi delle risorse per le chiavi CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets?secretId=my-ummr-secret" \
--request "POST" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        }
      ]
    }
  }
}
EOF

Ora, ogni volta che nel secret viene creata una versione del secret, il payload della versione viene automaticamente criptato tramite la chiave prima di essere scritto nello spazio di archiviazione permanente, purché l'identità del servizio abbia accesso alla chiave CMEK. Se l'identità di servizio perde l'accesso o se la chiave non è più disponibile, un tentativo di creare una nuova versione del secret o di accedere a una versione esistente restituisce un errore.

Aggiungi una nuova versione del secret. Tieni presente che non specifichi il nome della risorsa della chiave Cloud KMS, perché viene letto dai metadati del secret.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

La versione del secret viene creata, anche se il chiamante non ha accesso diretto per utilizzare la chiave CMEK. L'identità di servizio di Secret Manager, anziché del chiamante, è responsabile della crittografia e decrittografia dei secret durante la lettura o la scrittura.

Allo stesso modo, non hai bisogno dell'accesso diretto alla chiave CMEK per accedere al secret. L'identità di servizio accede alla chiave e cripta o decripta il secret per tuo conto.

Accedi alla versione del secret appena creata.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "my-ummr-secret"

Aggiorna la configurazione CMEK

Creare due nuove chiavi KMS simmetriche nelle stesse regioni del secret.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Concedi l'identità del servizio per l'accesso a Secret Manager per criptare e decriptare utilizzando le nuove chiavi CMEK. Questo comando concede il ruolo Autore crittografia / decrittografia Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) per le my-other-key chiavi Cloud KMS all'identità del servizio.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Modifica la configurazione CMEK su un secret aggiornando la replica sul secret con i nuovi nomi delle risorse della chiave Cloud KMS.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-east1 \
    --project "SM_PROJECT_ID"
gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-central1 \
    --project "SM_PROJECT_ID"

Per aggiornare più chiavi in un secret contemporaneamente, puoi ottenere e impostare il criterio di replica tramite un file.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud secrets replication get "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --format=json > ./replication-policy.json

Aggiorna il file in modo che rifletta la configurazione CMEK desiderata nel tuo editor preferito. Quindi, configura il nuovo criterio:

gcloud secrets replication set "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

Questi esempi utilizzano curl per dimostrare l'utilizzo dell'API. Puoi generare token di accesso con gcloud auth print-access-token. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/my-ummr-secret?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        }]
      }
    }
  }
EOF

Visualizza la configurazione CMEK della versione del secret

Per ispezionare i metadati di una versione del secret, ad esempio se la versione del secret è abilitata e il nome risorsa della versione della chiave CMEK, visualizza i relativi metadati.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud secrets versions describe "latest" \
    --secret "SECRET_ID" \
    --project "SM_PROJECT_ID"

API

Questi esempi utilizzano curl per dimostrare l'utilizzo dell'API. Puoi generare token di accesso con gcloud auth print-access-token. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets/SECRET_ID/versions/latest" \
    --request "GET" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json"

Questo restituisce il nome completo della risorsa Cloud KMS della versione della chiave utilizzata per criptare la versione del secret.

{
  "name": "projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/1",
  "createTime": "2021-07-...",
  "state": "ENABLED",
  "replicationStatus": {
    "automatic": {
      "customerManagedEncryption": {
        "kmsKeyVersionName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key/cryptoKeyVersions/1"
      }
    }
  }
}

Aggiungi una chiave Cloud EKM a un criterio CMEK

Questa sezione illustra l'aggiunta di una chiave Cloud EKM a un criterio CMEK. Questi passaggi abilitano una chiave Cloud EKM da utilizzare per criptare o decriptare i secret.

Poiché Cloud EKM al momento non supporta la località multiregionale global, le chiavi Cloud EKM possono essere utilizzate solo con i secret configurati per la replica gestita dall'utente.

Crea una chiave simmetrica nella regione Cloud KMS us-central1 (o in qualsiasi regione tranne global). In questo esempio viene creato un nuovo keyring denominato secret-manager-cmek-ekm, quindi viene creata una nuova chiave denominata my-ekm-key sul keyring.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

Crea un nuovo keyring:

gcloud kms keyrings create "secret-manager-cmek-ekm" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1"

Crea una chiave nel keyring:

gcloud kms keys create "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --purpose "encryption" \
  --protection-level "external" \
  --skip-initial-version-creation \
  --default-algorithm "external-symmetric-encryption"

Quindi, crea una nuova versione di my-ekm-key utilizzando l'URI esterno della chiave. Per ulteriori informazioni sugli URI esterni per le chiavi Cloud EKM, consulta Creare una chiave esterna.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud kms keys versions create \
  --key "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --external-key-uri EXTERNAL_KEY_URI \
  --primary

Concedi l'identità del servizio per consentire l'accesso a Secret Manager per criptare e decriptare utilizzando la chiave esterna. Questo comando concede il ruolo Autore crittografia / decrittografia Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) su my-ekm-key all'identità del servizio.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud kms keys add-iam-policy-binding "my-ekm-key" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1" \
  --keyring "secret-manager-cmek-ekm" \
  --member "serviceAccount:SM_SERVICE_IDENTITY" \
  --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Crea un secret abilitato per CMEK che utilizza una chiave Cloud EKM.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek-ekm/cryptoKeys/my-ekm-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ekm-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

Ora, ogni volta che viene creata una versione del secret in my-ekm-secret, il payload della versione del secret viene criptato automaticamente usando la chiave Cloud EKM prima di essere scritto nello spazio di archiviazione permanente, purché l'identità del servizio abbia accesso alla chiave. Se l'identità di servizio perde l'accesso o se la chiave non è più disponibile, un tentativo di creare una nuova versione del secret o di accedere a una versione esistente restituisce un errore.

Aggiungi una nuova versione del secret. Nota che il nome della risorsa della chiave viene letto dai metadati del secret.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ekm-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

La versione del secret viene creata, anche se il chiamante non ha accesso diretto per utilizzare la chiave. L'identità di servizio di Secret Manager, anziché del chiamante, è responsabile della crittografia e decrittografia dei secret durante la lettura o la scrittura.

Accedi alla versione del secret appena creata. È qui che l'identità del servizio accede alla chiave e cripta o decripta il secret per tuo conto.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud secrets versions access "latest" \
  --project "SM_PROJECT_ID" \
  --secret "my-ekm-secret"

Disattiva CMEK

Rimuovi la configurazione CMEK da un secret aggiornando il criterio di replica.

gcloud

Per utilizzare Secret Manager nella riga di comando, devi prima installare Google Cloud CLI o eseguirne l'upgrade alla versione 378.0.0 o successiva. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

gcloud secrets replication update "SECRET_ID" --remove-cmek \
    --project "SM_PROJECT_ID"

API

Questi esempi utilizzano curl per dimostrare l'utilizzo dell'API. Puoi generare token di accesso con gcloud auth print-access-token. In Compute Engine o GKE, devi eseguire l'autenticazione con l'ambito cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{}
  }
}
EOF

Passaggi successivi

  • Scopri di più su CMEK.