Creare risorse protette utilizzando Cloud KMS Autokey

Questa pagina mostra come creare risorse protette utilizzando le chiavi create da Cloud KMS Autokey per la crittografia. Per ulteriori informazioni su Autokey, consulta la panoramica di Autokey.

Prima di iniziare

Prima di poter creare risorse protette utilizzando Autokey, devi completare i seguenti passaggi di preparazione:

  1. Se non hai ancora un progetto di risorse all'interno della cartella Autokey, devi crearne uno per contenere le risorse che prevedi di creare.
  2. Per ottenere le autorizzazioni necessarie per utilizzare Autokey per creare risorse protette, chiedi all'amministratore di concederti il ruolo IAM Utente Cloud KMS Autokey (roles/cloudkms.autokeyUser) nella cartella o nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

    Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

  3. Inoltre, devi disporre delle autorizzazioni di creazione delle risorse nella cartella Autokey o in un progetto di risorse all'interno della cartella. Per ulteriori informazioni sulle autorizzazioni necessarie per creare ogni risorsa, consulta la documentazione specifica del servizio. Puoi trovare questa documentazione individuando il servizio nella tabella delle integrazioni CMEK e visitando il link relativo al tipo di risorsa che vuoi creare.

Utilizzo di Autokey con le risorse Compute Engine

Autokey crea una nuova chiave per ogni disco, immagine e immagine macchina nella stessa posizione della risorsa in fase di creazione.

Autokey non crea nuove chiavi per gli snapshot. Gli snapshot devono utilizzare la stessa chiave utilizzata per criptare il disco. Se crei uno snapshot utilizzando la console Google Cloud, la chiave di crittografia utilizzata dal disco viene applicata automaticamente allo snapshot. Se crei uno snapshot utilizzando l'interfaccia alla gcloud CLI, Terraform o l'API Compute Engine, devi identificare la chiave utilizzata per criptare il disco e utilizzarla per criptare lo snapshot.

Per ulteriori informazioni sull'utilizzo di CMEK con gli snapshot, consulta Creare uno snapshot da un disco criptato con CMEK.

Creare una risorsa Compute Engine protetta

Console

Per creare un disco:

  1. Nella console Google Cloud, vai alla pagina Dischi.

    Vai a Dischi

  2. Fai clic su Crea disco e inserisci le proprietà del nuovo disco.

  3. In Crittografia, seleziona Chiave Cloud KMS.

  4. In Tipo di chiave, seleziona Cloud KMS con Autokey e poi fai clic su Richiedi una nuova chiave. Un messaggio indica quando la chiave è stata creata correttamente ed è pronta per l'uso.

  5. Per completare la creazione del disco, fai clic su Crea.

Puoi seguire una procedura simile per creare risorse di istanze VM, immagini e immagini macchina protette.

Terraform

Il seguente esempio di Terraform crea un handle della chiave e utilizza la chiave restituita per proteggere una nuova risorsa disco permanente:

resource "google_kms_key_handle" "my_key_handle" {
  provider               = google-beta
  project                = "RESOURCE_PROJECT_ID"
  name                   = "KEY_HANDLE"
  location               = "LOCATION"
  resource_type_selector = "compute.googleapis.com/Disk"
}

resource "google_compute_disk" "persistent_disk" {
  project = "RESOURCE_PROJECT_ID"
  name    = "DISK_NAME"
  type    = "pd-ssd"
  zone    = "ZONE"
  size    = 30
  physical_block_size_bytes = 4096
  disk_encryption_key {
    kms_key_self_link = google_kms_key_handle.my_key_handle.kms_key
  }
}

Sostituisci quanto segue:

  • RESOURCE_PROJECT_ID: l'ID progetto della risorsa nella cartella Autokey in cui vuoi creare una risorsa protetta.
  • KEY_HANDLE: un ID da utilizzare per l'handle della chiave.
  • LOCATION: la posizione in cui vuoi creare la risorsa protetta.
  • DISK_NAME: il nome del nuovo disco.
  • ZONE: la zona della risorsa protetta. Deve essere una zona all'interno della località in cui stai creando la risorsa. Ad esempio, se crei la risorsa nella località us-central1, la zona potrebbe essere us-central1-a.

Cloud KMS non ti consente di eliminare le risorseKeyHandle. Se utilizzi un pattern di creazione e distruzione, il tentativo di ricreare un KeyHandle genera un errore ALREADY_EXISTS. Per evitare questo problema, puoi importare un KeyHandle creato in precedenza. Per saperne di più, consulta Creare e distruggere pattern in Terraform in questa pagina.

API

  1. Richiedi una nuova chiave Cloud KMS creando un KeyHandle:

    curl -H "Content-Type: application/json" \
        -H "X-Goog-User-Project: USER_PROJECT" \
        -H "Authorization: Bearer TOKEN" \
        -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \
        -d '{"resource_type_selector": "RESOURCE_TYPE"}'
    

    Sostituisci quanto segue:

    • USER_PROJECT: il progetto a cui verranno addebitati gli oneri associati a questa richiesta.
    • RESOURCE_PROJECT_ID: l'ID progetto della risorsa all'interno della cartella Autokey in cui vuoi creare una risorsa protetta.
    • LOCATION: la posizione in cui vuoi creare la risorsa protetta.
    • RESOURCE_TYPE: il tipo di risorsa da creare, ad esempio compute.googleapis.com/Disk.

    L'output è simile al seguente:

    {
      "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata"
      }
    }
    

    Prendi nota del valore OPERATION_ID dall'output. Ti serve questo valore per ottenere l'ID risorsa della chiave creata.

  2. Individua la chiave Cloud KMS associata all'handle della chiave:

    curl -H "X-Goog-User-Project: USER_PROJECT" \
        -H "Authorization: Bearer TOKEN" \
        -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
    

    Sostituisci quanto segue:

    • USER_PROJECT: il progetto a cui verranno addebitati gli oneri associati a questa richiesta.
    • RESOURCE_PROJECT_ID: l'ID progetto della risorsa all'interno della cartella Autokey in cui vuoi creare una risorsa protetta.
    • LOCATION: la posizione in cui vuoi creare la risorsa protetta.
    • OPERATION_ID: l'identificatore dell'operazione di richiesta dell'handle della chiave dall'output del passaggio precedente.

    L'output è simile al seguente:

    {
      "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle",
        "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE",
        "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME",
        "resourceTypeSelector": "RESOURCE_TYPE"
      }
    }
    

    Il valore dell'elemento kmsKey nell'output è l'ID risorsa completo della chiave creata da Autokey per questa risorsa. Puoi utilizzare questo ID risorsa come faresti con l'ID risorsa di qualsiasi altra risorsa Cloud KMS.

  3. Crea un disco criptato utilizzando il comando gcloud compute disks create con il flag --kms-key:

    gcloud compute disks create DISK_NAME \
      --kms-key projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME
    

    Sostituisci quanto segue:

    • DISK_NAME: il nome del nuovo disco.
    • KEY_PROJECT_ID: l'ID del progetto principale.
    • LOCATION: la posizione in cui vuoi creare la risorsa.
    • KEY_NAME: il nome della chiave restituita nell'output del passaggio precedente.

Utilizzo di Autokey con le risorse Cloud Storage

Autokey crea una nuova chiave nella stessa posizione del bucket. La chiave creata da Autokey viene assegnata come chiave predefinita del bucket.

Autokey non crea chiavi per gli oggetti. Per impostazione predefinita, gli oggetti creati in un bucket utilizzano la chiave predefinita del bucket. Se vuoi criptare un oggetto utilizzando una chiave diversa da quella predefinita del bucket, puoi creare manualmente una CMEK e utilizzarla durante la creazione dell'oggetto.

Se vuoi modificare la chiave predefinita assegnata a un bucket, puoi utilizzare qualsiasi CMEK esistente, incluse le chiavi create da Autokey.

Creare una risorsa Cloud Storage protetta

Console

  1. Nella console Google Cloud, vai alla pagina Crea un bucket.

    Vai a Crea un bucket

  2. Segui le istruzioni per creare un nuovo bucket fino a Scegli come proteggere i dati degli oggetti.

  3. In Scegli come proteggere i dati degli oggetti, espandi la sezione Crittografia dei dati e poi seleziona Chiave Cloud KMS.

  4. In Tipo di chiave, seleziona Cloud KMS con Autokey e poi fai clic su Richiedi una nuova chiave. Un messaggio indica quando la chiave è stata creata correttamente ed è pronta per l'uso.

  5. Per completare la creazione del bucket, fai clic su Crea.

Terraform

Il seguente esempio di Terraform crea un handle della chiave e utilizza la chiave restituita per proteggere un nuovo bucket di archiviazione:

resource "google_kms_key_handle" "my_key_handle" {
  provider               = google-beta
  project                = "RESOURCE_PROJECT_ID"
  name                   = "KEY_HANDLE"
  location               = "LOCATION"
  resource_type_selector = "storage.googleapis.com/Bucket"
}

resource "google_storage_bucket" "simple_bucket_name" {
  name                        = "BUCKET_NAME"
  location                    = "LOCATION"
  force_destroy               = true
  project                     = "RESOURCE_PROJECT_ID"
  uniform_bucket_level_access = true
  encryption {
    default_kms_key_name      = google_kms_key_handle.my_key_handle.kms_key
  }
}

Sostituisci quanto segue:

  • RESOURCE_PROJECT_ID: l'ID progetto della risorsa nella cartella Autokey in cui vuoi creare una risorsa protetta.
  • KEY_HANDLE: un ID da utilizzare per l'handle della chiave.
  • LOCATION: la posizione in cui vuoi creare la risorsa protetta.
  • BUCKET_NAME: il nome del nuovo bucket.

Cloud KMS non ti consente di eliminare le risorseKeyHandle. Se utilizzi un pattern di creazione e distruzione, il tentativo di ricreare un KeyHandle genera un errore ALREADY_EXISTS. Per evitare questo problema, puoi importare un KeyHandle creato in precedenza. Per saperne di più, consulta Creare e distruggere pattern in Terraform in questa pagina.

API

  1. Richiedi una nuova chiave Cloud KMS creando un KeyHandle:

    curl -H "Content-Type: application/json" \
        -H "X-Goog-User-Project: USER_PROJECT" \
        -H "Authorization: Bearer TOKEN" \
        -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \
        -d '{"resource_type_selector": "RESOURCE_TYPE"}'
    

    Sostituisci quanto segue:

    • USER_PROJECT: il progetto a cui verranno addebitati gli oneri associati a questa richiesta.
    • RESOURCE_PROJECT_ID: l'ID progetto della risorsa all'interno della cartella Autokey in cui vuoi creare una risorsa protetta.
    • LOCATION: la posizione in cui vuoi creare la risorsa protetta.
    • RESOURCE_TYPE: il tipo di risorsa da creare, ad esempio storage.googleapis.com/Bucket.

    L'output è simile al seguente:

    {
      "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata"
      }
    }
    

    Prendi nota del valore OPERATION_ID dall'output. Ti serve questo valore per ottenere l'ID risorsa della chiave creata.

  2. Trova la chiave Cloud KMS associata all'handle della chiave:

    curl -H "X-Goog-User-Project: USER_PROJECT" \
        -H "Authorization: Bearer TOKEN" \
        -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
    

    Sostituisci quanto segue:

    • USER_PROJECT: il progetto a cui verranno addebitati gli oneri associati a questa richiesta.
    • RESOURCE_PROJECT_ID: l'ID progetto della risorsa all'interno della cartella Autokey in cui vuoi creare una risorsa protetta.
    • LOCATION: la posizione in cui vuoi creare la risorsa protetta.
    • OPERATION_ID: l'identificatore dell'operazione di richiesta dell'handle della chiave dall'output del passaggio precedente.

    L'output è simile al seguente:

    {
      "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle",
        "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE",
        "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME",
        "resourceTypeSelector": "RESOURCE_TYPE"
      }
    }
    

    Il valore dell'elemento kmsKey nell'output è l'ID risorsa completo della chiave creata da Autokey per questa risorsa. Puoi utilizzare questo ID risorsa come faresti con l'ID risorsa di qualsiasi altra risorsa Cloud KMS.

  3. Crea un bucket criptato utilizzando il comando gcloud storage buckets create con il flag --default-encryption-key:

    gcloud storage buckets create gs://BUCKET_NAME \
        --location=LOCATION \
        --default-encryption-key=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME
    

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del nuovo bucket. Il nome del bucket deve rispettare i requisiti per la denominazione dei bucket.
    • LOCATION: la posizione in cui vuoi creare il separato.
    • KEY_PROJECT_ID: l'ID del progetto principale.
    • LOCATION: la posizione in cui vuoi creare la risorsa.
    • KEY_NAME: il nome della chiave restituita nell'output del passaggio precedente.

Utilizzo di Autokey con le risorse BigQuery

Cloud KMS è disponibile in diverse versioni di BigQuery. Assicurati che la versione di BigQuery in uso sia compatibile con Cloud KMS prima di provare a utilizzare Autokey per proteggere le risorse BigQuery. Per ulteriori informazioni sulle versioni di BigQuery, consulta Informazioni sulle versioni di BigQuery.

Per ogni nuovo set di dati, Autokey crea una nuova chiave nella stessa posizione della risorsa stessa, che diventa la chiave predefinita del set di dati.

Autokey non crea chiavi per tabelle, query, tabelle temporanee o modelli. Per impostazione predefinita, queste risorse sono protette dalla chiave predefinita del set di dati. Se vuoi proteggere una risorsa in un set di dati utilizzando una chiave diversa da quella predefinita del set di dati, puoi creare manualmente una chiave CMEK e utilizzarla durante la creazione della risorsa.

Per le query e le tabelle temporanee che non si trovano all'interno di un set di dati, utilizza le chiavi predefinite del progetto. Utilizza una chiave predefinita del progetto diversa per ogni posizione del progetto che contiene risorse BigQuery. Per ulteriori informazioni sull'utilizzo delle chiavi predefinite del progetto, consulta la sezione Impostare una chiave predefinita del progetto.

Per ulteriori informazioni sull'utilizzo di CMEK con BigQuery, consulta Chiavi Cloud KMS gestite dal cliente.

Creare una risorsa BigQuery protetta

Console

Prima di tentare di creare un set di dati BigQuery utilizzando Autokey, assicurati di disporre delle autorizzazioni richieste. Per ulteriori informazioni sulla creazione di set di dati, consulta Creare set di dati.

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Segui le istruzioni per creare un set di dati fino a quando non arrivi a Opzioni avanzate > Crittografia.

  3. In Crittografia, seleziona Chiave Cloud KMS.

  4. In Tipo di chiave, seleziona Cloud KMS con Autokey e poi fai clic su Richiedi una nuova chiave. Un messaggio indica quando la chiave è stata creata correttamente ed è pronta per l'uso.

  5. Per completare la creazione del set di dati, fai clic su Crea set di dati.

Terraform

Il seguente esempio di Terraform crea un handle della chiave e utilizza la chiave restituita per proteggere un nuovo set di dati:

resource "google_kms_key_handle" "my_key_handle" {
  provider               = google-beta
  project                = "RESOURCE_PROJECT_ID"
  name                   = "test-key-handle"
  location               = "LOCATION"
  resource_type_selector = "bigquery.googleapis.com/Dataset"
}

resource "google_bigquery_dataset" "dataset" {
  project                     = "RESOURCE_PROJECT_ID"
  dataset_id                  = "DATASET_ID"
  friendly_name               = "DATASET_NAME"
  description                 = "DATASET_DESCRIPTION"
  location                    = "LOCATION"
  default_table_expiration_ms = 3600000

  default_encryption_configuration {
    kms_key_name = google_kms_key_handle.my_key_handle.kms_key
  }
}

Sostituisci quanto segue:

  • RESOURCE_PROJECT_ID: l'ID progetto della risorsa nella cartella Autokey in cui vuoi creare una risorsa protetta.
  • LOCATION: la posizione in cui vuoi creare la risorsa protetta.
  • DATASET_ID: l'ID da utilizzare per il nuovo set di dati.
  • DATASET_NAME: un nome facile da ricordare per il nuovo set di dati.
  • DATASET_DESCRIPTION: una descrizione del nuovo set di dati.

Cloud KMS non ti consente di eliminare le risorseKeyHandle. Se utilizzi un pattern di creazione e distruzione, il tentativo di ricreare un KeyHandle genera un errore ALREADY_EXISTS. Per evitare questo problema, puoi importare un KeyHandle creato in precedenza. Per saperne di più, consulta Creare e distruggere pattern in Terraform in questa pagina.

API

  1. Richiedi una nuova chiave Cloud KMS creando un KeyHandle:

    curl -H "Content-Type: application/json" \
        -H "X-Goog-User-Project: USER_PROJECT" \
        -H "Authorization: Bearer TOKEN" \
        -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \
        -d '{"resource_type_selector": "RESOURCE_TYPE"}'
    

    Sostituisci quanto segue:

    • USER_PROJECT: il progetto a cui verranno addebitati gli oneri associati a questa richiesta.
    • RESOURCE_PROJECT_ID: l'ID progetto della risorsa all'interno della cartella Autokey in cui vuoi creare una risorsa protetta.
    • LOCATION: la posizione in cui vuoi creare la risorsa protetta.
    • RESOURCE_TYPE: il tipo di risorsa da creare, ad esempio bigquery.googleapis.com/Dataset.

    L'output è simile al seguente:

    {
      "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata"
      }
    }
    

    Prendi nota del valore OPERATION_ID dall'output. Ti serve questo valore per ottenere l'ID risorsa della chiave creata.

  2. Trova la chiave Cloud KMS associata all'handle della chiave:

    curl -H "X-Goog-User-Project: USER_PROJECT" \
        -H "Authorization: Bearer TOKEN" \
        -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
    

    Sostituisci quanto segue:

    • USER_PROJECT: il progetto a cui verranno addebitati gli oneri associati a questa richiesta.
    • RESOURCE_PROJECT_ID: l'ID progetto della risorsa all'interno della cartella Autokey in cui vuoi creare una risorsa protetta.
    • LOCATION: la posizione in cui vuoi creare la risorsa protetta.
    • OPERATION_ID: l'identificatore dell'operazione di richiesta dell'handle della chiave dall'output del passaggio precedente.

    L'output è simile al seguente:

    {
      "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle",
        "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE",
        "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME",
        "resourceTypeSelector": "RESOURCE_TYPE"
      }
    }
    

    Il valore dell'elemento kmsKey nell'output è l'ID risorsa completo della chiave creata da Autokey per questa risorsa. Puoi utilizzare questo ID risorsa come faresti con l'ID risorsa di qualsiasi altra risorsa Cloud KMS.

  3. Crea un set di dati criptato utilizzando il comando bq mk con il flag --destination_kms_key.

    bq --location=LOCATION mk \
        --dataset \
        --default_kms_key=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME \
        --default_table_expiration=TABLE_EXPIRATION \
        --description="DATASET_DESCRIPTION" \
        RESOURCE_PROJECT_ID:DATASET_ID
    

    Sostituisci quanto segue:

    • LOCATION: la posizione in cui vuoi creare il set di dati.
    • KEY_PROJECT_ID: l'ID del progetto principale.
    • KEY_NAME: il nome della chiave restituita nell'output del passaggio precedente.
    • TABLE_EXPIRATION: la durata predefinita per le nuove tabelle in questo set di dati, in secondi.
    • DATASET_DESCRIPTION: una descrizione del nuovo set di dati.
    • RESOURCE_PROJECT_ID: l'ID progetto della risorsa all'interno della cartella Autokey in cui vuoi creare una risorsa protetta.
    • DATASET_ID: l'ID del set di dati che stai creando.

    Per saperne di più sullo strumento bq, consulta Esplorare lo strumento a riga di comando bq.

Utilizzo di Autokey con le risorse Secret Manager

Autokey crea una singola chiave per proteggere tutti i secret nello stesso progetto e nella stessa posizione. Quando la chiave viene ruotata, i nuovi secret aggiunti al progetto utilizzano la nuova versione principale della chiave.

Secret Manager è compatibile con Autokey di Cloud KMS solo quando si creano risorse utilizzando Terraform o l'API REST.

Crea una risorsa Secret Manager protetta

Terraform

Il seguente esempio di Terraform crea un handle della chiave e utilizza la chiave restituita per proteggere un nuovo secret con la replica automatica:

resource "google_kms_key_handle" "my_key_handle" {
  provider               = google-beta
  project                = "RESOURCE_PROJECT_ID"
  name                   = "test-key-handle"
  location               = "global"
  resource_type_selector = "secretmanager.googleapis.com/Secret"
}

resource "google_secret_manager_secret" "my_secret" {
  project   = "RESOURCE_PROJECT_ID"
  secret_id = "SECRET_ID"

  replication {
    auto {
      customer_managed_encryption {
        kms_key_name = google_kms_key_handle.my_key_handle.kms_key
      }
    }
  }
}

Sostituisci quanto segue:

  • RESOURCE_PROJECT_ID: l'ID progetto della risorsa nella cartella Autokey in cui vuoi creare una risorsa protetta.
  • SECRET_ID: l'ID da utilizzare per la nuova secret.

Se tenti di creare un handle della chiave per un segreto nello stesso progetto e nella stessa posizione per cui esiste già un handle della chiave, viene restituito un messaggio di errore con i dettagli dell'handle della chiave esistente. In questo caso, assicurati di avere un solo blocco che crea l'handle della chiave. Puoi riutilizzare l'handle della chiave utilizzando il relativo ID (KEY_HANDLE) per creare altri secret che devono condividere la chiave.

Cloud KMS non ti consente di eliminare le risorseKeyHandle. Se utilizzi un pattern di creazione e distruzione, il tentativo di ricreare un KeyHandle genera un errore ALREADY_EXISTS. Per evitare questo problema, puoi importare un KeyHandle creato in precedenza. Per saperne di più, consulta Creare e distruggere pattern in Terraform in questa pagina.

API

  1. Richiedi una nuova chiave Cloud KMS creando un KeyHandle:

    curl -H "Content-Type: application/json" \
        -H "X-Goog-User-Project: USER_PROJECT" \
        -H "Authorization: Bearer TOKEN" \
        -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \
        -d '{"resource_type_selector": "RESOURCE_TYPE"}'
    

    Sostituisci quanto segue:

    • USER_PROJECT: il progetto a cui verranno addebitati gli oneri associati a questa richiesta.
    • RESOURCE_PROJECT_ID: l'ID progetto della risorsa all'interno della cartella Autokey in cui vuoi creare una risorsa protetta.
    • LOCATION: la posizione in cui vuoi creare la risorsa protetta.
    • RESOURCE_TYPE: il tipo di risorsa da creare, ad esempio secretmanager.googleapis.com/Secret.

    L'output è simile al seguente:

    {
      "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata"
      }
    }
    

    Prendi nota del valore OPERATION_ID dall'output. Ti serve questo valore per ottenere l'ID risorsa della chiave creata.

    Se tenti di creare un handle della chiave per un segreto nello stesso progetto e nella stessa posizione per cui esiste già un handle della chiave, un messaggio di errore restituisce i dettagli dell'handle della chiave esistente. In questo caso, salta il passaggio successivo e utilizza l'ID risorsa della chiave nel campo existingKmsKey per proteggere il nuovo secret.

  2. Individua la chiave Cloud KMS associata all'handle della chiave:

    curl -H "X-Goog-User-Project: USER_PROJECT" \
        -H "Authorization: Bearer TOKEN" \
        -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
    

    Sostituisci quanto segue:

    • USER_PROJECT: il progetto a cui verranno addebitati gli oneri associati a questa richiesta.
    • RESOURCE_PROJECT_ID: l'ID progetto della risorsa all'interno della cartella Autokey in cui vuoi creare una risorsa protetta.
    • LOCATION: la posizione in cui vuoi creare la risorsa protetta.
    • OPERATION_ID: l'identificatore dell'operazione di richiesta dell'handle della chiave dall'output del passaggio precedente.

    L'output è simile al seguente:

    {
      "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle",
        "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE",
        "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME",
        "resourceTypeSelector": "RESOURCE_TYPE"
      }
    }
    

    Il valore dell'elemento kmsKey nell'output è l'ID risorsa completo della chiave creata da Autokey per questa risorsa. Puoi utilizzare questo ID risorsa come faresti con l'ID risorsa di qualsiasi altra risorsa Cloud KMS.

  3. Crea un secret criptato con replica automatica utilizzando il comando gcloud secrets create con il flag --kms-key-name.

    gcloud secrets create "SECRET_ID" \
        --replication-policy "automatic" \
        --kms-key-name "projects/KEY_PROJECT_ID/locations/global/keyRings/autokey/cryptoKeys/KEY_NAME" \
        --project "RESOURCE_PROJECT_ID"
    

    Sostituisci quanto segue:

    • SECRET_ID: l'ID da utilizzare per la nuova secret.
    • KEY_PROJECT_ID: l'ID del progetto principale.
    • KEY_NAME: il nome della chiave restituita nell'output del passaggio precedente.
    • RESOURCE_PROJECT_ID: l'ID progetto della risorsa all'interno della cartella Autokey in cui vuoi creare una risorsa protetta.

Pattern di creazione ed eliminazione in Terraform

Cloud KMS non ti consente di eliminare le risorse KeyHandle. Se utilizzi Terraform e un pattern di creazione e distruzione, il tentativo di ricreare un KeyHandle genera un errore ALREADY_EXISTS. Puoi evitare questo problema utilizzando un blocco import. Inserisci il seguente blocco prima del blocco resource per la risorsa google_kms_key_handle:

import {
  to = google_kms_key_handle.KEY_HANDLE
  id = "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE"
}

Passaggi successivi