Proteger recursos con claves de Cloud KMS


En este documento se explica cómo usar las claves de Cloud Key Management Service (Cloud KMS) creadas manualmente para cifrar discos y otros recursos relacionados con el almacenamiento. Las claves gestionadas en Cloud KMS se conocen como claves de cifrado gestionadas por el cliente (CMEKs).

Puedes usar CMEKs para cifrar recursos de Compute Engine, como discos, imágenes de máquina, instantáneas e instantáneas estándar.

Para obtener más información sobre cómo usar claves de cifrado proporcionadas por el cliente (CSEKs) para cifrar discos y otros recursos de almacenamiento, consulta Cifrar discos con claves de cifrado proporcionadas por el cliente.

Más información sobre el cifrado de disco

Antes de empezar

  • Familiarízate con los discos, las imágenes, las capturas de disco persistente y las instancias de máquina virtual (VM).
  • Decide si vas a ejecutar Compute Engine y Cloud KMS en el mismo proyecto Google Cloud o en proyectos diferentes. Para obtener información sobre los IDs y los números de proyecto, consulta el artículo Identificar proyectos. Google Cloud
  • En el proyecto que ejecuta Cloud KMS, haz lo siguiente:
    1. Enable the Cloud KMS API.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the API

    2. Google Cloud
  • + Si quieres crear un volumen de Hyperdisk Balanced en modo Confidencial, comprueba que tu caso de uso sea compatible consultando las limitaciones y las regiones admitidas.
  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Roles obligatorios

Para asegurarte de que el agente de servicio de Compute Engine tiene los permisos necesarios para proteger los recursos con claves de Cloud KMS, pide a tu administrador que le conceda el rol de gestión de identidades y accesos Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) en tu proyecto.

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Es posible que tu administrador también pueda conceder los permisos necesarios al agente de servicio de Compute Engine a través de roles personalizados u otros roles predefinidos.

El agente de servicio de Compute Engine tiene el siguiente formato:

service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com

Puedes usar Google Cloud CLI para asignar el rol:

gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

Haz los cambios siguientes:

  • KMS_PROJECT_ID: el ID de tuGoogle Cloud proyecto que ejecuta Cloud KMS (aunque sea el mismo proyecto que ejecuta Compute Engine)
  • PROJECT_NUMBER: el número de proyecto (no el ID de proyecto) de tu proyecto que ejecuta los recursos de Compute Engine Google Cloud Google Cloud

Especificaciones de cifrado

Las claves de Cloud KMS que se usan para proteger tus datos en Compute Engine son claves AES-256. Estas claves son claves de cifrado de claves y cifran las claves de cifrado de datos que cifran tus datos, no los datos en sí.

Los datos de los discos se cifran con Google-owned and Google-managed encryption keys. Para ver las especificaciones relacionadas con el cifrado predeterminado en Google Cloud, consulta Encriptado en reposo predeterminado en la documentación de seguridad.

Con el modo Confidencial de Hyperdisk Balanced y Cloud HSM, la clave de cifrado de datos (DEK) tiene propiedades de seguridad adicionales con enclaves respaldados por hardware.

Limitaciones

  • No puedes encriptar recursos con CMEKs. Solo puedes cifrar discos, imágenes y capturas con CMEKs cuando los creas.

  • Cuando creas un disco a partir de una captura instantánea cifrada con CMEK, debes especificar la clave que se ha usado para cifrar el disco de origen. No tienes que especificar la clave cuando trabajes con otros recursos cifrados con CMEK, como clones de discos e instantáneas estándar.

  • Vista previa: Cuando creas una captura de disco regional a partir de un disco cifrado con CMEK, debes crear la captura con una CMEK regional que esté en la misma ubicación que la captura. De esta forma, se asegura el aislamiento regional de tu copia y se aumenta su fiabilidad.

  • No puedes usar tus propias claves con discos SSD locales porque las claves las gestiona la infraestructura de Google Cloud y se eliminan cuando se termina la VM.

  • Los recursos regionales (discos) solo se pueden encriptar con una clave de una de las siguientes ubicaciones de Cloud KMS:

    • Una clave en la misma región que el disco
    • Una clave multirregional en la misma ubicación geográfica que el disco
    • Una clave en la ubicación global.

    Por ejemplo, un disco de la zona us-west1-a se puede cifrar con una clave de la ubicación global, la región us-west1 o la multirregión us.

    Los recursos globales (como imágenes y copias de seguridad) se pueden cifrar con claves de cualquier ubicación. Para obtener más información, consulta Tipos de ubicaciones de Cloud KMS.

  • El cifrado de un disco, una captura o una imagen con una clave es permanente. No puedes quitar el cifrado del recurso, cambiar el tipo de cifrado ni cambiar la clave que se usa. La única forma de eliminar el cifrado o cambiar las claves de cifrado es crear una copia del recurso y especificar una nueva opción de cifrado. Por ejemplo, para cambiar el uso de claves generadas por Google a CMEKs en un disco, sigue estos pasos:

    1. Crea una captura del disco.
    2. Crea un disco a partir de la instantánea. Cuando crees el disco, selecciona el tipo de cifrado que quieras.

    Para obtener más información, consulta Cambiar el tipo de un disco.

Creación de claves manual o automática

Puedes crear claves de Cloud KMS manualmente o usar Autokey de Cloud KMS. Autokey simplifica la creación y la gestión de claves de Cloud KMS automatizando el aprovisionamiento y la asignación. Con Autokey, no tienes que aprovisionar con antelación conjuntos de claves, claves y cuentas de servicio. En su lugar, se generan bajo demanda como parte de la creación de recursos de Compute Engine. Para obtener más información, consulta el resumen de Autokey.

Crear manualmente un conjunto de claves y una clave

En el Google Cloud proyecto que ejecuta Cloud KMS, crea un conjunto de claves y una clave tal como se describe en Crear conjuntos de claves y claves.

Encriptar un disco persistente nuevo con CMEK

Puedes encriptar un disco persistente nuevo proporcionando una clave durante la creación de la VM o del disco.

Consola

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

    Ir a Discos

  2. Haz clic en Crear disco e introduce las propiedades del nuevo disco.
  3. En Cifrado, selecciona Clave gestionada por el cliente.
  4. En el menú desplegable, selecciona la clave de Cloud KMS que quieras usar para cifrar este disco.
  5. Para crear el disco, haz clic en Crear.

gcloud

Crea un disco cifrado con el comando gcloud compute disks create y especifica la clave con la marca --kms-key.

gcloud compute disks create DISK_NAME \
  --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

Haz los cambios siguientes:

  • DISK_NAME: el nombre del nuevo disco
  • KMS_PROJECT_ID: el proyecto propietario de la clave de Cloud KMS
  • REGION: la región en la que se encuentra la clave
  • KEY_RING: el nombre del conjunto de claves que incluye la clave
  • KEY: nombre de la clave utilizada para cifrar el disco.

REST

Crea una solicitud POST para el método instances.insert. Para cifrar un disco, usa la propiedad diskEncryptionKey con la propiedad kmsKeyName. Por ejemplo, puedes encriptar un disco nuevo durante la creación de una VM con tu clave de Cloud KMS mediante lo siguiente:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
"machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
  "initializeParams": {
   "sourceImage": "SOURCE_IMAGE"
  },
  "boot": true
 }
],
...
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del Google Cloud proyecto que ejecuta Compute Engine
  • ZONE: la zona en la que se creará la VM
  • MACHINE_TYPE: el tipo de máquina. Por ejemplo, c3-standard-4.
  • KMS_PROJECT_ID: el proyecto propietario de la clave de Cloud KMS
  • REGION: la región en la que se encuentra el disco
  • KEY_RING: el nombre del conjunto de claves que incluye la clave
  • KEY: el nombre de la clave usada para cifrar el disco
  • SOURCE_IMAGE: la imagen que se va a usar al crear la máquina virtual. Por ejemplo: projects/debian-cloud/global/images/debian-11-bullseye-v20231115

Del mismo modo, puedes usar el método disks.insert para crear un disco persistente independiente y cifrarlo con tu clave de Cloud KMS:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks?sourceImage=SOURCE_IMAGE
{
 "name": "DISK_NAME",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
 "type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE"
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del Google Cloud proyecto que ejecuta Compute Engine
  • ZONE: la zona en la que se creará el disco.
  • SOURCE_IMAGE: la imagen que se va a usar al crear el disco. Por ejemplo: projects/debian-cloud/global/images/debian-11-bullseye-v20231115
  • DISK_NAME: el nombre del nuevo disco
  • KMS_PROJECT_ID: el proyecto propietario de la clave de Cloud KMS
  • REGION: la región en la que se encuentra el disco
  • KEY_RING: el nombre del conjunto de claves que incluye la clave
  • KEY: el nombre de la clave usada para cifrar el disco
  • DISK_TYPE: el tipo de disco que se va a crear.

Crear un disco Hyperdisk Balanced en modo Confidencial

Puedes crear un disco Hyperdisk Balanced en modo Confidencial con laGoogle Cloud consola, la CLI de Google Cloud o REST. Para crear un disco que no esté en modo Confidencial, sigue los pasos que se indican en Crear un disco persistente a partir de una captura cifrada con CMEK.

Consola

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

    Ir a Discos

  2. Haz clic en Crear disco e introduce las propiedades del nuevo disco.
  3. En la sección Ajustes del disco, elige Hyperdisk Balanced como tipo de disco.
  4. Opcional. Cambia los ajustes predeterminados de Tamaño, IOPS aprovisionadas y Rendimiento aprovisionado del disco.
  5. En la sección Encriptado, selecciona Clave de Cloud KMS.
  6. En la lista de claves, selecciona la clave de Cloud HSM que quieras usar para cifrar este disco.
  7. En la sección Computación confidencial, selecciona Habilitar servicios de computación confidencial.
  8. Para crear el disco, haz clic en Crear.

gcloud

Cifra un disco nuevo con el modo Confidencial para Hyperdisk Balanced mediante el comando gcloud compute disks create. Habilita el modo Confidencial con la marca --confidential-compute y especifica la clave con la marca --kms-key.

gcloud compute disks create DISK_NAME \
  --type=hyperdisk-balanced \
  --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY \
  --confidential-compute

Haz los cambios siguientes:

  • DISK_NAME: el nombre del nuevo disco
  • KMS_PROJECT_ID: el proyecto propietario de la clave de Cloud HSM
  • REGION: la región en la que se encuentra la clave
  • KEY_RING: el nombre del conjunto de claves que incluye la clave
  • KEY: nombre de la clave utilizada para cifrar el disco.

REST

Crea una solicitud POST para el método instances.insert. Para cifrar un disco con el modo confidencial de Hyperdisk Balanced, usa la propiedad diskEncryptionKey con la propiedad kmsKeyName y define la marca enableConfidentialCompute. Por ejemplo, puedes encriptar un disco nuevo durante la creación de una VM con tu clave de Cloud HSM mediante lo siguiente:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
"machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
"disks": [
 {
  "type": "DISK_TYPE",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
  "initializeParams": {
   "sourceImage": "SOURCE_IMAGE",
   "enableConfidentialCompute": true
  },
  "boot": true
 }
],
"networkInterfaces": [
  {
   "network": "global/networks/default"
  }
]
}

Haz los cambios siguientes:

  • DISK_TYPE: el tipo de disco que se va a crear. Por ejemplo, hyperdisk-balanced.
  • PROJECT_ID: el ID del Google Cloud proyecto que ejecuta Compute Engine
  • ZONE: la zona en la que se creará la VM
  • MACHINE_TYPE: el tipo de máquina. Por ejemplo, n2d-standard-4.
  • KMS_PROJECT_ID: el proyecto propietario de la clave de Cloud HSM
  • REGION: la región en la que se encuentra el disco
  • KEY_RING: el nombre del conjunto de claves que incluye la clave
  • KEY: nombre de la clave utilizada para cifrar el disco.
  • SOURCE_IMAGE: la imagen que admite la máquina virtual confidencial que se va a usar al crear la máquina virtual. Por ejemplo: projects/debian-cloud/global/images/debian-11-bullseye-v20231115

Del mismo modo, puedes usar el método disks.insert para crear un modo Confidencial para Hyperdisk Balanced:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks?sourceImage=SOURCE_IMAGE
{
 "name": "DISK_NAME",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
 "type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE",
 "enableConfidentialCompute": true
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del Google Cloud proyecto que ejecuta Compute Engine
  • ZONE: la zona en la que se creará el disco.
  • SOURCE_IMAGE: la imagen que admite máquinas virtuales confidenciales al crear el disco. Por ejemplo: projects/debian-cloud/global/images/debian-11-bullseye-v20231115
  • DISK_NAME: el nombre del nuevo disco
  • KMS_PROJECT_ID: el proyecto propietario de la clave de Cloud HSM
  • REGION: la región en la que se encuentra el disco
  • KEY_RING: el nombre del conjunto de claves que incluye la clave
  • KEY: el nombre de la clave usada para cifrar el disco
  • DISK_TYPE: el tipo de disco que se va a crear. Por ejemplo, hyperdisk-balanced.

Crear una instantánea a partir de un disco cifrado con CMEK

Para proteger una captura que crees a partir de un disco cifrado con una CMEK, debes usar la misma clave de cifrado que usaste para cifrar el disco.

No puedes crear una captura que use una CMEK a menos que el disco de origen también la use. Además, no puedes convertir discos ni capturas de disco cifrados con CMEK para que usen el cifrado predeterminado, a menos que crees una imagen de disco y un disco persistente completamente nuevos.Google Cloud

Las capturas de discos encriptados con CMEK son incrementales.

Consola

  1. En la Google Cloud consola, ve a la página Snapshots (Capturas).

    Ir a Capturas

  2. Haz clic en Crear copia.
  3. En Disco de origen, elija el disco de origen de la captura. La instantánea se cifra automáticamente con la misma clave que usa el disco de origen.

gcloud

En el caso del encriptado gestionado por el cliente, la clave de Cloud KMS que se ha usado para encriptar el disco también se usa para encriptar la instantánea.

Puedes crear la captura en la política de ubicación de almacenamiento definida en los ajustes de la captura o usar una ubicación de almacenamiento alternativa que elijas. Para obtener más información, consulta el artículo Elegir la ubicación de almacenamiento de las copias de seguridad.

  • Para crear una captura en la ubicación predefinida o personalizada que hayas configurado en los ajustes de las capturas, usa el comando gcloud compute snapshots create.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE
    
  • También puedes anular la configuración de la instantánea y crear una en una ubicación de almacenamiento personalizada. Para ello, incluye la marca --storage-location para indicar dónde quieres almacenar la instantánea.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION
    
  • Vista previa: Para crear una captura de ámbito regional en una región permitida, incluye la marca --region para indicar dónde quieres crear la captura.

      gcloud beta compute snapshots create SNAPSHOT_NAME \
          --region=SNAPSHOT_SCOPE_REGION
          --source-disk=SOURCE_DISK_NAME \
          --source-disk-zone=SOURCE_ZONE \
          --snapshot-type=SNAPSHOT_TYPE \
          --kms-key=projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY
    

Haz los cambios siguientes:

  • SNAPSHOT_NAME: nombre de la captura.
  • SOURCE_ZONE: la zona del disco de origen.
  • SOURCE_DISK_NAME: el nombre del volumen del disco del que quieres crear una captura.
  • KMS_PROJECT_ID: proyecto que contiene la clave de cifrado almacenada en Cloud Key Management Service.
  • KEY_REGION: la región en la que se encuentra la clave de Cloud KMS.
  • KEY_RING: el nombre del conjunto de claves que contiene la clave de Cloud KMS.
  • SNAPSHOT_KEY: nombre de la clave de Cloud KMS que has usado para cifrar el disco de origen.
  • SNAPSHOT_TYPE: el tipo de instantánea, STANDARD o ARCHIVE. Si no se especifica ningún tipo de captura, se crea una captura STANDARD.
  • STORAGE_LOCATION: Opcional: En el caso de las capturas de ámbito global, la multirregión de Cloud Storage o la región de Cloud Storage en la que quieras almacenar la captura. Solo puedes especificar una ubicación de almacenamiento.

    Usa el parámetro --storage-location solo cuando quieras anular la ubicación de almacenamiento predefinida o personalizada que hayas configurado en los ajustes de la instantánea.

  • SNAPSHOT_SCOPE_REGION: opcional. En el caso de las instantáneas con ámbito regional, se trata de la región a la que se limita la instantánea. Si incluye este parámetro, no podrá usar el parámetro --storage-location. El STORAGE_LOCATION se define automáticamente como SNAPSHOT_SCOPE_REGION.

REST

Puedes crear la captura en la política de ubicación de almacenamiento definida en los ajustes de la captura o usar una ubicación de almacenamiento alternativa que elijas. Para obtener más información, consulta el artículo Elegir la ubicación de almacenamiento de las copias de seguridad.

  • Para crear una captura en la ubicación predefinida o personalizada que hayas configurado en los ajustes de capturas, haz una solicitud POST al método snapshots.insert:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
        "name": "SNAPSHOT_NAME",
        "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
        "snapshotEncryptionKey":  {
         "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY"
        },
        "snapshotType": "SNAPSHOT_TYPE"
    }
    
  • También puedes anular la configuración de la captura y crear una captura en una ubicación de almacenamiento personalizada. Para ello, haz una solicitud POST al método snapshots.insert e incluye la propiedad storageLocations en tu solicitud:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
        "name": "SNAPSHOT_NAME",
        "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
        "snapshotEncryptionKey":  {
         "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY"
        },
        "snapshotType": "SNAPSHOT_TYPE",
        "storageLocations": [
            "STORAGE_LOCATION"
        ],
    }
    
  • Vista previa) Para crear una captura con ámbito regional en una región permitida, haz una solicitud POST al método snapshots.insert y define la región de creación:

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/regions/SNAPSHOT_SCOPE_REGION/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "snapshotEncryptionKey": {
        "kmsKeyName":"projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY",
      },
    }
    

Haz los cambios siguientes:

  • DESTINATION_PROJECT_ID: el ID del proyecto en el que quieres crear la instantánea.
  • SNAPSHOT_NAME: nombre de la captura.
  • SOURCE_PROJECT_ID: el ID del proyecto del disco de origen.
  • SOURCE_ZONE: la zona del disco de origen.
  • SOURCE_DISK_NAME: Nombre del disco a partir del que quieres crear una captura.
  • KMS_PROJECT_ID: proyecto que contiene la clave de cifrado almacenada en Cloud Key Management Service.
  • KEY_REGION: la región en la que se encuentra la clave de Cloud KMS.
  • KEY_RING: el nombre del conjunto de claves que contiene la clave de Cloud KMS.
  • SNAPSHOT_KEY: nombre de la clave de Cloud KMS que has usado para cifrar el disco de origen.
  • SNAPSHOT_TYPE: el tipo de instantánea, STANDARD o ARCHIVE. Si no se especifica ningún tipo de captura, se crea una captura STANDARD.
  • STORAGE_LOCATION: Opcional: En el caso de las capturas de ámbito global, la multirregión de Cloud Storage o la región de Cloud Storage en la que quieras almacenar la captura. Solo puedes especificar una ubicación de almacenamiento.

    Usa el parámetro storageLocations solo cuando quieras anular la ubicación de almacenamiento predefinida o personalizada que hayas configurado en los ajustes de la instantánea.

  • SNAPSHOT_SCOPE_REGION: opcional. En el caso de las instantáneas con ámbito regional, se trata de la región a la que se limita la instantánea. Si incluye este parámetro, no podrá usar el parámetro storageLocations. El STORAGE_LOCATION se define automáticamente como SNAPSHOT_SCOPE_REGION.

Cifrar una imagen importada con una CMEK

Puedes cifrar una imagen nueva cuando importes una imagen personalizada a Compute Engine. Antes de importar una imagen, debes crear y comprimir un archivo de imagen de disco y subir ese archivo comprimido a Cloud Storage.

Consola

  1. En la Google Cloud consola, ve a la página Imágenes.

    Ir a Imágenes

  2. Haz clic en Crear imagen.
  3. En Disco de origen, selecciona el disco del que quieras crear una imagen.
  4. En Cifrado, selecciona Clave gestionada por el cliente.
  5. En el menú desplegable, selecciona la clave de Cloud KMS que quieras usar para cifrar esta imagen.
  6. Continúa con el proceso de creación de la imagen.

gcloud

Para importar y cifrar una imagen, usa el comando gcloud compute images create. En el caso del encriptado gestionado por el cliente, especifica la clave de Cloud KMS de la imagen.

gcloud compute images create IMAGE_NAME \
    --source-disk=SOURCE_DISK  \
    --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

Haz los cambios siguientes:

  • IMAGE_NAME: el nombre de la imagen que vas a crear
  • SOURCE_DISK: nombre del disco del que se va a crear una instantánea.
  • KMS_PROJECT_ID: el proyecto que contiene la clave de Cloud KMS
  • REGION: la región en la que se encuentra la clave de Cloud KMS.
  • KEY_RING: el conjunto de claves que contiene la clave de Cloud KMS
  • KEY: el nombre de la clave que se usará para cifrar el nuevo disco.

REST

Para cifrar una imagen importada, crea una solicitud POST al método images.insert. Especifique el URI del archivo comprimido, añada la propiedad imageEncryptionKey a la solicitud de creación de la imagen y especifique la clave para cifrar la imagen en la propiedad kmsKeyName.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images

{
 "rawDisk": {
  "source": "http://storage.googleapis.com/example-image/example-image.tar.gz"
  },
 "name": "IMAGE_NAME",
 "sourceType": "RAW",
 "imageEncryptionKey": {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
   }
}

Haz los cambios siguientes:

  • PROJECT_ID: el proyecto para crear la imagen cifrada in
  • IMAGE_NAME: el nombre de la imagen que vas a crear
  • KMS_PROJECT_ID: el proyecto que contiene la clave de Cloud KMS
  • REGION: la región en la que se encuentra la clave de Cloud KMS.
  • KEY_RING: el conjunto de claves que contiene la clave de Cloud KMS
  • KEY: el nombre de la clave que has usado para cifrar el disco de origen

Crear un disco a partir de una instantánea cifrada con CMEK

Para crear un disco a partir de una instantánea cifrada, sigue estos pasos:

Consola

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

    Ir a Discos

  2. Haz clic en Crear disco e introduce las propiedades del nuevo disco.
  3. En Tipo de fuente, selecciona la captura o la imagen que quieras usar.
  4. Opcional: Si quieres especificar una nueva clave de cifrado, en Cifrado, indica el tipo de clave de cifrado que quieres usar y, a continuación, proporciona la información de la clave de cifrado.

    Si quieres quitar la clave de cifrado gestionada o proporcionada por el cliente, en Cifrado, usa el valor predeterminado Google-managed encryption key.

  5. Continúa con el proceso de creación del disco.

gcloud

  • Para crear un disco a partir de una captura cifrada con ámbito global, usa el comando gcloud compute disks create.

    gcloud compute disks create DISK_NAME \
      --zone=ZONE \
      --source-snapshot=SNAPSHOT_NAME \
      --kms-key=projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY
    
  • Vista previa Para crear un disco a partir de una captura cifrada con ámbito regional, usa el comando gcloud compute disks create y especifica la región de la captura de origen.

    gcloud compute disks create DISK_NAME \
      --zone=ZONE \
      --source-snapshot=SNAPSHOT_NAME \
      --source-snapshot-region=SOURCE_REGION \
      --kms-key=projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY
    

Haz los cambios siguientes:

  • DISK_NAME: el nombre del nuevo disco
  • SNAPSHOT_NAME: el nombre de la captura cifrada

    Para usar una imagen en lugar de una captura, sustituye --source-snapshot SNAPSHOT_NAME por --image IMAGE_NAME.

  • KMS_PROJECT_ID: opcional. Es el proyecto que contiene la clave de Cloud KMS.

  • REGION: opcional, la región en la que se encuentra la clave de Cloud KMS

  • SOURCE_REGION: la región en la que se encuentra la instantánea de origen

  • ZONE: la zona en la que se ubicará el nuevo disco

  • KEY_RING: opcional, el conjunto de claves que contiene la clave de Cloud KMS.

  • KEY: opcional. Nombre de la clave de Cloud KMS que se va a usar para cifrar el disco nuevo.

    Para cifrar el nuevo disco, puedes hacer lo siguiente:

    • Para especificar una nueva clave de cifrado gestionada por el cliente, usa la marca --kms-key.
    • Para usar el valor predeterminado Google-owned and Google-managed encryption key, no incluyas la marca --kms-key.

REST

  • Para crear un disco a partir de una captura cifrada con ámbito global, crea una solicitud POST al método compute.disks.insert. Use la propiedad sourceSnapshot para especificar la instantánea.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks
    
    {
      "name": "DISK_NAME",
      "sourceSnapshot": "projects/SNAPSHOT_PROJECT_ID/global/snapshots/SNAPSHOT_NAME",
      "diskEncryptionKey": {
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
      }
    }
    
  • Vista previa Para crear un disco a partir de una instantánea cifrada con ámbito regional, crea una solicitud POST al método compute.disks.insert. Use la propiedad sourceSnapshot para especificar la instantánea.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks
    
    {
      "name": "DISK_NAME",
      "sourceSnapshot": "projects/SNAPSHOT_PROJECT_ID/regions/SOURCE_REGION/snapshots/SNAPSHOT_NAME",
      "type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE",
      "zone": "projects/PROJECT_ID/zones/ZONE"
      "diskEncryptionKey": {
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
      }
    }
    

Haz los cambios siguientes:

  • PROJECT_ID: el proyecto en el que se creará el nuevo disco.
  • ZONE: la zona en la que se creará el nuevo disco
  • SOURCE_REGION: la región en la que se encuentra la instantánea de origen
  • DISK_NAME: el nombre del nuevo disco
  • DISK_TYPE: URL completa o parcial del tipo de disco. Por ejemplo, PROJECT_ID/zones/ZONE/diskTypes/pd-ssd.
  • SNAPSHOT_PROJECT_ID: el proyecto que contiene la instantánea
  • SNAPSHOT_NAME: el nombre de la instantánea cifrada

    Para usar una imagen en lugar de una captura, sustituye sourceSnapshot por sourceImage.

  • KMS_PROJECT_ID: opcional. Es el proyecto que contiene la clave de Cloud KMS.

  • REGION: opcional, la región en la que se encuentra la clave de Cloud KMS

  • KEY_RING: opcional, el conjunto de claves que contiene la clave de Cloud KMS.

  • KEY: opcional. Nombre de la clave de Cloud KMS que se va a usar para cifrar el disco nuevo.

    Si incluyes diskEncryptionKey, el disco se cifra con la clave de Cloud KMS especificada. Si no incluyes diskEncryptionKey, el disco se cifra con Google-owned and Google-managed encryption key.

Vincular un disco de arranque encriptado con CMEK a una VM nueva

Consola

  1. En la Google Cloud consola, ve a la página Crear una instancia.

    Ir a Crear una instancia

  2. Especifica los detalles de la VM y, en la sección Disco de arranque, haz clic en Cambiar. A continuación, haz lo siguiente:

    1. Haz clic en Discos disponibles.
    2. En la lista Disco, selecciona un disco que ya tengas para asociarlo a la VM.
    3. Haz clic en Seleccionar.
  3. Continúa con el proceso de creación de la VM.

gcloud

Para adjuntar un disco cifrado al crear una VM, usa el comando gcloud compute instances create. Usa la marca --disk para especificar el disco de arranque cifrado, como se muestra en el siguiente ejemplo:

gcloud compute instances create VM_NAME \
  ...
  --disk name=DISK_NAME,boot=yes

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM que vas a crear
  • DISK_NAME: el nombre del disco cifrado

REST

Crea una solicitud POST para el método compute.instances.insert. Usa la propiedad disks para especificar el disco de arranque cifrado, tal como se muestra en el siguiente ejemplo:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  ...
  "disks": [
    {
      "deviceName": "DISK_ALIAS",
      "source": "projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME"
    }
  ]
}

Haz los cambios siguientes:

  • PROJECT_ID: el proyecto en el que se creará la nueva VM
  • ZONE: la zona en la que se creará la nueva VM
  • DISK_ALIAS: un nombre de dispositivo único que se usará como alias de disco en el directorio /dev/disk/by-id/google-* de la VM que ejecuta un sistema operativo Linux. Este nombre se puede usar para hacer referencia al disco en operaciones como el montaje o el cambio de tamaño desde la instancia. Si no especificas un nombre de dispositivo, la VM elegirá un nombre de dispositivo predeterminado para aplicarlo a este disco, con el formato persistent-disk-x, donde x es un número asignado por Compute Engine. Este campo solo se aplica a los volúmenes de disco persistente.
  • DISK_NAME: el nombre del disco cifrado

Quitar la clave de cifrado de Cloud KMS de un disco persistente

Puedes descifrar el contenido de un disco cifrado y crear otro que utilice el cifrado predeterminado. Google Cloud De forma predeterminada, Google Cloud cifra todos los datos en reposo.

  1. Crea una captura del disco cifrado.
  2. Usa la nueva captura cifrada para crear un disco persistente.

Después de crear el nuevo disco persistente, se usa el cifrado Google Cloud predeterminado para proteger el contenido del disco. Las capturas que crees a partir de ese disco también deben usar el cifrado predeterminado.

Rotar la clave de cifrado de Cloud KMS de un disco

Rota la clave que se usa para cifrar el disco creando un disco que use una nueva versión de la clave de Cloud KMS. La rotación de claves es una práctica recomendada para cumplir las prácticas de seguridad estandarizadas. Para rotar tus claves, sigue estos pasos:

  1. Rota tu clave de Cloud KMS.
  2. Crea una captura del disco cifrado.
  3. Usa la nueva instantánea para crear un disco con la clave que has rotado en el paso anterior.
  4. Sustituye el disco conectado a tu máquina virtual que usa la clave de cifrado antigua.

Cuando creas el nuevo disco, se usa la nueva versión de la clave para el cifrado. Las capturas que crees a partir de ese disco usarán la versión más reciente de la clave principal.

Cuando rotas una clave, los datos que se encriptaron con versiones anteriores no se vuelven a encriptar automáticamente. Para obtener más información, consulta Volver a cifrar datos. Rotar una clave no inhabilita ni destruye automáticamente una versión de clave.

Inhabilitar o eliminar una CMEK

Si ya no necesitas una clave de cifrado gestionada por el cliente o quieres evitar que se use, elimina o inhabilita la clave. Eliminar, inhabilitar o quitar permisos de gestión de identidades y accesos en una clave también se conoce como revocar la clave.

Impacto de la revocación de claves en los recursos cifrados

Cuando revocas una clave de cifrado, los recursos que protege se ven afectados de la siguiente manera:

  • No puedes arrancar una VM si alguno de sus discos conectados tiene claves revocadas.
  • Si un disco que usa la clave está conectado a una VM en ejecución y has habilitado la opción Apagar VM al revocar la clave en la VM, Compute Engine apagará la VM en un plazo de 7 horas.
  • No puedes asociar un disco con una clave revocada a una VM ni crear una instantánea a partir del disco.
  • No puedes usar imágenes ni capturas cifradas con claves revocadas para crear discos.

Si inhabilitas la tecla, puedes revertir los efectos anteriores habilitándola. Si eliminas la clave, no podrás deshacer los efectos anteriores.

Configurar el apagado de la VM al revocar la clave de Cloud KMS

Puedes configurar tu VM para que se apague automáticamente cuando revoques la clave de Cloud KMS que ayuda a proteger un disco conectado a la VM. Puedes revocar una clave inhabilitándola o eliminándola. Si este ajuste está habilitado, la VM se apagará en un plazo de 7 horas tras la revocación de la clave.

Si vuelves a habilitar la clave, puedes reiniciar la VM con el disco adjunto que la clave ayuda a proteger. La VM no se reinicia automáticamente después de habilitar la clave.

Consola

Para configurar una VM de forma que se apague cuando se revoque una clave de Cloud KMS, haz lo siguiente:

  1. Empieza a crear una VM que incluya un disco protegido por una clave de Cloud KMS.
  2. Abre el menú Redes, discos, seguridad, gestión y único cliente.
  3. Despliega la sección Gestión.
  4. En Política de revocación de claves de cifrado gestionadas por el cliente (CMEK), selecciona Apagar.

gcloud

Usa el gcloud compute instances create comando para crear una VM e incluye --key-revocation-action-type=stop.

gcloud compute instances create VM_NAME \
  --image IMAGE \
  --key-revocation-action-type=stop

REST

Usa el método instances.insert para crear una VM y asigna el valor "STOP" a la propiedad "keyRevocationActionType". En el siguiente ejemplo se crea la VM a partir de una imagen pública.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ],
  "keyRevocationActionType": "STOP"
}

También puedes configurar una plantilla de instancia para crear máquinas virtuales que se apaguen cuando se revoque la clave mediante la CLI de Google Cloud o REST.

Consola

Puedes usar una plantilla de instancia para crear VMs que se apaguen cuando se revoque una clave de Cloud KMS.

  1. Empieza a crear una plantilla de instancia que incluya un disco protegido por una clave de Cloud KMS.
  2. Abre el menú Redes, discos, seguridad, gestión y único cliente.
  3. Despliega la sección Gestión.
  4. En Política de revocación de claves de cifrado gestionadas por el cliente (CMEK), selecciona Apagar.

gcloud

Crea una plantilla de instancia con el comando gcloud compute instance-templates create e incluye --key-revocation-action-type=stop.

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
  --key-revocation-action-type=stop

REST

Crea una solicitud POST al método instanceTemplates.insert. En el cuerpo de la solicitud, debe definir explícitamente todos los campos de configuración obligatorios. Si quiere que las VMs creadas a partir de esta plantilla se apaguen cuando se revoque la clave, especifique "keyRevocationActionType":"STOP". Por ejemplo, una plantilla de instancia con los campos mínimos obligatorios que creará VMs que se apaguen al revocar la clave tendría el siguiente aspecto:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceTemplates

{
  "name": "example-template",
  "properties": {
  "machineType": "e2-standard-4",
  "networkInterfaces": [
    {
      "network": "global/networks/default",
      "accessConfigs": [
        {
          "name": "external-IP",
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "disks":
  [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "initializeParams":
      {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-11"
      }
    }
  ],
  "keyRevocationActionType": "STOP"
  }
}

Después de crear una VM configurada para apagarse cuando se revoque una clave de Cloud KMS, crea y asocia un disco persistente cifrado con una clave de Cloud KMS.