Crea recursos protegidos con Autokey de Cloud KMS

En esta página, se muestra cómo crear recursos protegidos con claves que crea la clave automática de Cloud KMS para la encriptación. Para obtener más información sobre las claves automáticas, consulta Descripción general de las claves automáticas.

Antes de comenzar

Antes de poder crear recursos protegidos con Autokey, debes completar los siguientes pasos para prepararte:

  1. Si aún no tienes un proyecto de recursos dentro de la carpeta Autokey, debes crear un proyecto para contener los recursos que planeas crear.
  2. Para obtener los permisos que necesitas para usar Autokey y crear recursos protegidos, pídele a tu administrador que te otorgue el rol de IAM de usuario de Autokey de Cloud KMS (roles/cloudkms.autokeyUser) en la carpeta o el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

    También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

  3. También necesitas permisos de creación de recursos en la carpeta Autokey o en un proyecto de recursos dentro de la carpeta. Para obtener más información sobre los permisos necesarios para crear cada recurso, consulta la documentación específica del servicio. Para encontrar esta documentación, busca el servicio en la tabla de integraciones de CMEK y visita el vínculo del tipo de recurso que deseas crear.

Cómo usar Autokey con recursos de Compute Engine

Autokey crea una clave nueva para cada disco, imagen y máquina en la misma ubicación que el recurso que se está creando.

Autokey no crea claves nuevas para instantáneas. Las instantáneas deben usar la misma clave que se usó para encriptar el disco. Si creas una instantánea con la consola de Google Cloud, la clave de encriptación que usa el disco se aplica automáticamente a la instantánea. Si creas una instantánea con la gcloud CLI, Terraform o la API de Compute Engine, debes identificar la clave que se usa para encriptar el disco y usar esa clave para encriptar la instantánea.

Para obtener más información sobre el uso de CMEK con instantáneas, consulta Crea una instantánea desde un disco encriptado con CMEK.

Crea un recurso de Compute Engine protegido

Console

Para crear un disco, completa los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página Discos.

    Ir a Discos

  2. Haz clic en Crear disco y, luego, ingresa las propiedades del disco nuevo.

  3. En Encriptación, selecciona Clave de Cloud KMS.

  4. En Tipo de clave, selecciona Cloud KMS con Autokey y, luego, haz clic en Solicitar una clave nueva. Aparecerá un mensaje que indicará cuando la clave se haya creado correctamente y esté lista para usarse.

  5. Para terminar de crear el disco, haz clic en Crear.

Puedes seguir un proceso similar para crear recursos de instancia, imagen y imagen de máquina protegidos de VM.

Terraform

En el siguiente ejemplo de Terraform, se crea un control de acceso a claves y se usa la clave que se muestra para proteger un nuevo recurso de disco persistente:

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
  }
}

Reemplaza lo siguiente:

  • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
  • KEY_HANDLE: Es un ID que se usará para el identificador de clave.
  • LOCATION: Es la ubicación en la que deseas crear el recurso protegido.
  • DISK_NAME: Es el nombre del disco nuevo.
  • ZONE: Es la zona del recurso protegido. Debe ser una zona dentro de la ubicación en la que creas el recurso. Por ejemplo, si creas el recurso en la ubicación us-central1, la zona podría ser us-central1-a.

Cloud KMS no te permite borrar recursos KeyHandle. Si usas un patrón de creación y destrucción, intentar recrear un KeyHandle genera un error ALREADY_EXISTS. Para evitar este problema, puedes importar un KeyHandle creado anteriormente. Para obtener más información, consulta Crea y destruye patrones en Terraform en esta página.

API

  1. Para solicitar una clave de Cloud KMS nueva, crea 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"}'
    

    Reemplaza lo siguiente:

    • USER_PROJECT: Es el proyecto al que se le facturarán los cargos asociados con esta solicitud.
    • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
    • LOCATION: Es la ubicación en la que deseas crear el recurso protegido.
    • RESOURCE_TYPE: El tipo de recurso que deseas crear, por ejemplo, compute.googleapis.com/Disk.

    El resultado es similar a este:

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

    Toma nota del OPERATION_ID del resultado. Necesitas este valor para obtener el ID de recurso de la clave creada.

  2. Busca la clave de Cloud KMS asociada con el identificador de clave:

    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
    

    Reemplaza lo siguiente:

    • USER_PROJECT: Es el proyecto al que se le facturarán los cargos asociados con esta solicitud.
    • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
    • LOCATION: Es la ubicación en la que deseas crear el recurso protegido.
    • OPERATION_ID: Es el identificador de la operación de solicitud de control de claves de la salida del paso anterior.

    El resultado es similar a este:

    {
      "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"
      }
    }
    

    El valor del elemento kmsKey en el resultado es el ID de recurso completo de la clave que Autokey creó para este recurso. Puedes usar este ID de recurso de la misma manera que usarías el ID de recurso de cualquier otro recurso de Cloud KMS.

  3. Crea un disco encriptado con el comando gcloud compute disks create y la marca --kms-key:

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

    Reemplaza lo siguiente:

    • DISK_NAME: Es el nombre del disco nuevo.
    • KEY_PROJECT_ID: Es el ID del proyecto de claves.
    • LOCATION: Es la ubicación en la que deseas crear el recurso.
    • KEY_NAME: Es el nombre de la clave que se muestra en el resultado del paso anterior.

Usa Autokey con recursos de Cloud Storage

Autokey crea una clave nueva en la misma ubicación que el bucket. La clave que crea Autokey se asigna como la clave predeterminada del bucket.

Autokey no crea claves para objetos. De forma predeterminada, los objetos creados en un bucket usan la clave predeterminada del bucket. Si deseas encriptar un objeto con una clave que no sea la predeterminada del bucket, puedes crear una CMEK de forma manual y usarla cuando crees el objeto.

Si quieres cambiar la clave predeterminada asignada a un bucket, puedes usar cualquier CMEK existente, incluidas las claves creadas por Autokey.

Crea un recurso de Cloud Storage protegido

Console

  1. En la consola de Google Cloud, ve a la página Crear un bucket.

    Ir a Crear un bucket

  2. Sigue las instrucciones para Crear un bucket nuevo hasta llegar a Elige cómo proteger los datos de objetos.

  3. En Elige cómo proteger los datos de objetos, expande la sección Encriptación de datos y, luego, selecciona Clave de Cloud KMS.

  4. En Tipo de clave, selecciona Cloud KMS con Autokey y, luego, haz clic en Solicitar una clave nueva. Aparecerá un mensaje que indicará cuando la clave se haya creado correctamente y esté lista para usarse.

  5. Para terminar de crear el bucket, haz clic en Crear.

Terraform

En el siguiente ejemplo de Terraform, se crea un control de acceso a la clave y se usa la clave que se muestra para proteger un bucket de almacenamiento nuevo:

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
  }
}

Reemplaza lo siguiente:

  • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
  • KEY_HANDLE: Es un ID que se usará para el identificador de clave.
  • LOCATION: Es la ubicación en la que deseas crear el recurso protegido.
  • BUCKET_NAME: Es el nombre del bucket nuevo.

Cloud KMS no te permite borrar recursos KeyHandle. Si usas un patrón de creación y destrucción, intentar recrear un KeyHandle genera un error ALREADY_EXISTS. Para evitar este problema, puedes importar un KeyHandle creado anteriormente. Para obtener más información, consulta Crea y destruye patrones en Terraform en esta página.

API

  1. Para solicitar una clave de Cloud KMS nueva, crea 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"}'
    

    Reemplaza lo siguiente:

    • USER_PROJECT: Es el proyecto al que se le facturarán los cargos asociados con esta solicitud.
    • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
    • LOCATION: Es la ubicación en la que deseas crear el recurso protegido.
    • RESOURCE_TYPE: El tipo de recurso que deseas crear, por ejemplo, storage.googleapis.com/Bucket.

    El resultado es similar a este:

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

    Toma nota del OPERATION_ID del resultado. Necesitas este valor para obtener el ID de recurso de la clave creada.

  2. Busca la clave de Cloud KMS asociada con el identificador de clave:

    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
    

    Reemplaza lo siguiente:

    • USER_PROJECT: Es el proyecto al que se le facturarán los cargos asociados con esta solicitud.
    • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
    • LOCATION: Es la ubicación en la que deseas crear el recurso protegido.
    • OPERATION_ID: Es el identificador de la operación de solicitud de control de claves de la salida del paso anterior.

    El resultado es similar a este:

    {
      "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"
      }
    }
    

    El valor del elemento kmsKey en el resultado es el ID de recurso completo de la clave que Autokey creó para este recurso. Puedes usar este ID de recurso de la misma manera que usarías el ID de recurso de cualquier otro recurso de Cloud KMS.

  3. Crea un bucket encriptado con el comando gcloud storage buckets create, con la marca --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
    

    Reemplaza lo siguiente:

    • BUCKET_NAME: Es el nombre del bucket nuevo. El nombre del bucket debe seguir los requisitos de nombres de buckets.
    • LOCATION: Es la ubicación en la que deseas crear el bucket.
    • KEY_PROJECT_ID: Es el ID del proyecto de claves.
    • LOCATION: Es la ubicación en la que deseas crear el recurso.
    • KEY_NAME: Es el nombre de la clave que se muestra en el resultado del paso anterior.

Cómo usar Autokey con recursos de BigQuery

Cloud KMS está disponible en varias ediciones de BigQuery. Asegúrate de que la edición de BigQuery que usas sea compatible con Cloud KMS antes de intentar usar Autokey para proteger los recursos de BigQuery. Para obtener más información sobre las ediciones de BigQuery, consulta Información sobre las ediciones de BigQuery.

Para cada conjunto de datos nuevo, Autokey crea una clave nueva, en la misma ubicación que el recurso, que se convierte en la clave predeterminada del conjunto de datos.

Autokey no crea claves para tablas, consultas, tablas temporales ni modelos. De forma predeterminada, estos recursos están protegidos por la clave predeterminada del conjunto de datos. Si quieres proteger un recurso en un conjunto de datos con una clave que no sea la predeterminada del conjunto de datos, puedes crear una CMEK de forma manual y usarla cuando crees el recurso.

Para las consultas y las tablas temporales que no están dentro de un conjunto de datos, usa las claves predeterminadas del proyecto. Usa una clave predeterminada de proyecto diferente para cada ubicación del proyecto que contenga recursos de BigQuery. Para obtener más información sobre el uso de claves predeterminadas del proyecto, consulta Establece una clave predeterminada del proyecto.

Para obtener más información sobre el uso de CMEK con BigQuery, consulta Claves de Cloud KMS administradas por el cliente.

Crea un recurso de BigQuery protegido

Console

Antes de intentar crear un conjunto de datos de BigQuery con Autokey, asegúrate de tener los permisos necesarios. Para obtener más información sobre la creación de conjuntos de datos, consulta Crea conjuntos de datos.

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. Sigue las instrucciones para crear un conjunto de datos hasta que llegues a Opciones avanzadas > Encriptación.

  3. En Encriptación, selecciona Clave de Cloud KMS.

  4. En Tipo de clave, selecciona Cloud KMS con Autokey y, luego, haz clic en Solicitar una clave nueva. Aparecerá un mensaje que indicará cuando la clave se haya creado correctamente y esté lista para usarse.

  5. Para terminar de crear el conjunto de datos, haz clic en Crear conjunto de datos.

Terraform

En el siguiente ejemplo de Terraform, se crea un control de acceso a claves y se usa la clave que se muestra para proteger un conjunto de datos nuevo:

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
  }
}

Reemplaza lo siguiente:

  • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
  • LOCATION: Es la ubicación en la que deseas crear el recurso protegido.
  • DATASET_ID: Es el ID que se usará para el conjunto de datos nuevo.
  • DATASET_NAME: Es un nombre descriptivo para el conjunto de datos nuevo.
  • DATASET_DESCRIPTION: Es una descripción del conjunto de datos nuevo.

Cloud KMS no te permite borrar recursos KeyHandle. Si usas un patrón de creación y destrucción, intentar recrear un KeyHandle genera un error ALREADY_EXISTS. Para evitar este problema, puedes importar un KeyHandle creado anteriormente. Para obtener más información, consulta Crea y destruye patrones en Terraform en esta página.

API

  1. Para solicitar una clave de Cloud KMS nueva, crea 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"}'
    

    Reemplaza lo siguiente:

    • USER_PROJECT: Es el proyecto al que se le facturarán los cargos asociados con esta solicitud.
    • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
    • LOCATION: Es la ubicación en la que deseas crear el recurso protegido.
    • RESOURCE_TYPE: El tipo de recurso que deseas crear, por ejemplo, bigquery.googleapis.com/Dataset.

    El resultado es similar a este:

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

    Toma nota del OPERATION_ID del resultado. Necesitas este valor para obtener el ID de recurso de la clave creada.

  2. Busca la clave de Cloud KMS asociada con el identificador de clave:

    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
    

    Reemplaza lo siguiente:

    • USER_PROJECT: Es el proyecto al que se le facturarán los cargos asociados con esta solicitud.
    • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
    • LOCATION: Es la ubicación en la que deseas crear el recurso protegido.
    • OPERATION_ID: Es el identificador de la operación de solicitud de control de claves de la salida del paso anterior.

    El resultado es similar a este:

    {
      "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"
      }
    }
    

    El valor del elemento kmsKey en el resultado es el ID de recurso completo de la clave que Autokey creó para este recurso. Puedes usar este ID de recurso de la misma manera que usarías el ID de recurso de cualquier otro recurso de Cloud KMS.

  3. Crea un conjunto de datos encriptado con el comando bq mk con la marca --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
    

    Reemplaza lo siguiente:

    • LOCATION: Es la ubicación en la que deseas crear el conjunto de datos.
    • KEY_PROJECT_ID: Es el ID del proyecto de claves.
    • KEY_NAME: Es el nombre de la clave que se muestra en el resultado del paso anterior.
    • TABLE_EXPIRATION: Es la duración predeterminada de las tablas nuevas en este conjunto de datos, en segundos.
    • DATASET_DESCRIPTION: Es una descripción del conjunto de datos nuevo.
    • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
    • DATASET_ID: Es el ID del conjunto de datos que crearás.

    Para obtener más información sobre la herramienta bq, consulta Explora la herramienta de línea de comandos de bq.

Usa la clave automática con recursos de Secret Manager

Autokey crea una sola clave para proteger todos los secretos en el mismo proyecto y ubicación. Cuando se rota la clave, los secretos nuevos que se agregan al proyecto usan la versión primaria nueva de la clave.

Secret Manager solo es compatible con Autokey de Cloud KMS cuando se crean recursos con Terraform o la API de REST.

Crea un recurso protegido de Secret Manager

Terraform

En el siguiente ejemplo de Terraform, se crea un control de clave y se usa la clave que se muestra para proteger un secreto nuevo con replicación automática:

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
      }
    }
  }
}

Reemplaza lo siguiente:

  • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
  • SECRET_ID: Es el ID que se usará para el Secret nuevo.

Si intentas crear un identificador de clave para un secreto en el mismo proyecto y la misma ubicación para los que ya existe un identificador de clave, un mensaje de error muestra los detalles del identificador de clave existente. Si esto sucede, asegúrate de que solo tengas un bloque que cree el identificador de clave. Puedes volver a usar el identificador de clave con su ID (KEY_HANDLE) para crear secretos adicionales que deberían compartir la clave.

Cloud KMS no te permite borrar recursos KeyHandle. Si usas un patrón de creación y destrucción, intentar recrear un KeyHandle genera un error ALREADY_EXISTS. Para evitar este problema, puedes importar un KeyHandle creado anteriormente. Para obtener más información, consulta Crea y destruye patrones en Terraform en esta página.

API

  1. Para solicitar una clave de Cloud KMS nueva, crea 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"}'
    

    Reemplaza lo siguiente:

    • USER_PROJECT: Es el proyecto al que se le facturarán los cargos asociados con esta solicitud.
    • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
    • LOCATION: Es la ubicación en la que deseas crear el recurso protegido.
    • RESOURCE_TYPE: El tipo de recurso que deseas crear, por ejemplo, secretmanager.googleapis.com/Secret.

    El resultado es similar a este:

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

    Toma nota del OPERATION_ID del resultado. Necesitas este valor para obtener el ID de recurso de la clave creada.

    Si intentas crear un identificador de clave para un secreto en el mismo proyecto y ubicación para los que ya existe un identificador de clave, un mensaje de error muestra los detalles del identificador de clave existente. En este caso, omite el siguiente paso y usa el ID de recurso de clave en el campo existingKmsKey para proteger tu secreto nuevo.

  2. Busca la clave de Cloud KMS asociada con el identificador de clave:

    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
    

    Reemplaza lo siguiente:

    • USER_PROJECT: Es el proyecto al que se le facturarán los cargos asociados con esta solicitud.
    • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.
    • LOCATION: Es la ubicación en la que deseas crear el recurso protegido.
    • OPERATION_ID: Es el identificador de la operación de solicitud de control de claves de la salida del paso anterior.

    El resultado es similar a este:

    {
      "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"
      }
    }
    

    El valor del elemento kmsKey en el resultado es el ID de recurso completo de la clave que Autokey creó para este recurso. Puedes usar este ID de recurso de la misma manera que usarías el ID de recurso de cualquier otro recurso de Cloud KMS.

  3. Crea un secreto encriptado con replicación automática mediante el comando gcloud secrets create con la marca --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"
    

    Reemplaza lo siguiente:

    • SECRET_ID: Es el ID que se usará para el Secret nuevo.
    • KEY_PROJECT_ID: Es el ID del proyecto de claves.
    • KEY_NAME: Es el nombre de la clave que se muestra en el resultado del paso anterior.
    • RESOURCE_PROJECT_ID: Es el ID del proyecto de recursos dentro de la carpeta Autokey en la que deseas crear un recurso protegido.

Patrones de creación y destrucción en Terraform

Cloud KMS no te permite borrar recursos KeyHandle. Si usas Terraform y un patrón de creación y destrucción, intentar volver a crear un KeyHandle genera un error ALREADY_EXISTS. Puedes evitar este problema usando un bloque import. Inserta el siguiente bloque antes del bloque resource del recurso google_kms_key_handle:

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

¿Qué sigue?