Protege recursos con las claves de Cloud KMS

De forma predeterminada, Compute Engine encripta el contenido en reposo del cliente. Compute Engine controla y administra esta encriptación sin que debas realizar ninguna acción adicional. Sin embargo, si deseas controlar y administrar esta encriptación, puedes usar las claves de encriptación de claves. Las claves de encriptación de claves no encriptan tus datos de forma directa, sino que se usan para encriptar las claves de encriptación de datos que encriptan tus datos.

Tienes las siguientes dos opciones para las claves de encriptación de claves en Compute Engine:

Después de crear un recurso de Compute Engine protegido por Cloud KMS, no debes especificar la clave porque Compute Engine sabe qué clave de KMS se usó. Esto se diferencia de la forma en que Compute Engine accede a los recursos protegidos por claves proporcionadas por el cliente. Para ese acceso, debes especificar la clave proporcionada por el cliente.

Obtén más información sobre las opciones de encriptación en Google Cloud.

Antes de comenzar

  1. Obtén información sobre la diferencia entre los discos, las imágenes, las instantáneas de discos persistentes y las instancias.

  2. Decide si ejecutarás Compute Engine y Cloud KMS en el mismo proyecto de Google Cloud o en proyectos distintos. Con el propósito de brindar documentación de ejemplo, se usa la siguiente convención:

    • [PROJECT_ID] es el ID del proyecto que ejecuta Compute Engine.
    • [PROJECT_NUMBER] es el número del proyecto que ejecuta Compute Engine.
    • [KMS_PROJECT_ID] es el ID del proyecto que ejecuta Cloud KMS (incluso si es el mismo proyecto que ejecuta Compute Engine).

    Para obtener información sobre los ID de los proyectos de Google Cloud y los números de proyectos, consulta la sección sobre cómo identificar proyectos.

  3. En el proyecto de Google Cloud que ejecuta Compute Engine, configura el acceso a la API para Compute Engine.

  4. En el proyecto de Google Cloud que ejecuta Cloud KMS, haz lo siguiente:

    1. Habilita la API de Cloud KMS.
    2. Crea un llavero de claves y una clave como se describe en la sección sobre la creación de claves y llaveros de claves.
  5. Asigna la función Cloud KMS CryptoKey Encrypter/Decrypter al agente del servicio de Compute Engine. Esta cuenta tiene el formato siguiente:

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

    Puedes usar la herramienta de línea de comandos de gcloud para asignar la función:

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

    Reemplaza [KMS_PROJECT_ID] por el ID del proyecto de Google Cloud que ejecuta Cloud KMS y reemplaza [PROJECT_NUMBER] por el número del proyecto (no el ID) de Google Cloud que ejecuta los recursos de Compute Engine.

Especificaciones

Encriptación

Las claves de Cloud KMS que se usan para proteger tus datos en Compute Engine son claves AES-256. Estas son claves de encriptación de claves y se usan para encriptar las claves de encriptación de datos que encriptan tus datos.

Restricciones

  • Solo puedes encriptar imágenes, instantáneas y discos persistentes nuevos con tu propia clave. No puedes usarla para encriptar los recursos existentes.

  • No puedes usar tus propias claves con SSD locales dado que los SSD locales no persisten una vez finalizada la vida útil de una máquina virtual. Los SSD locales ya están protegidos con una clave de encriptación efímera que Google no guarda.

Encripta un disco persistente nuevo con tus propias claves

Puedes proporcionar una clave durante la creación de la instancia o el disco para encriptar un disco persistente nuevo.

Console

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

    Ir a la página Discos

  2. Haz clic en Crear disco y, luego, ingresa las propiedades del disco nuevo.
  3. En Encriptación, selecciona Clave administrada por el cliente.
  4. Usa el menú desplegable a fin de seleccionar la clave de Cloud KMS que se usará para encriptar este disco.
  5. Haz clic en Crear para crear el disco.

Línea de comandos

gcloud compute disks \
create encrypted-disk \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

API

Encripta un disco mediante el uso de la propiedad diskEncryptionKey con la propiedad kmsKeyName. Por ejemplo, encripta un disco nuevo durante la creación de la instancia con tu clave de Cloud KMS, como se muestra a continuación:

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

{
"machineType": "zones/[ZONE]/machineTypes/e2-standard-2",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]"
  },
  "initializeParams": {
   "sourceImage": "projects/debian-cloud/global/images/debian-8-jessie-v20160301"
  },
  "boot": true
 }
],
...
}

Del mismo modo, también puedes usar la API para crear un nuevo disco persistente independiente y encriptarlo con tu clave de Cloud KMS:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/
[ZONE]/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2F
projects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-8-jessie-v20160301

{
 "name": "new-encrypted-disk-key",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]"
  },
 "type": "zones/[ZONE]/diskTypes/pd-standard"
}

Crea una instantánea a partir de un disco encriptado

Cuando creas una instantánea desde un disco encriptado con CMEK, debe estar protegida por la misma clave de encriptación que usaste para encriptar el disco.

Console

  1. En Google Cloud Console, ve a la página Instantáneas.

    Ir a la página Instantáneas

  2. Haz clic en Crear instantánea.
  3. En Disco de origen, elige el disco de origen para la instantánea. La instantánea se encriptará de forma automática con la misma clave que usó el disco de origen.

Línea de comandos

gcloud compute \
disks snapshot encrypted-disk \
--zone [ZONE]

API

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/example-disk/createSnapshot

{
 "snapshotEncryptionKey":  {
   "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[SNAPSHOT_KEY]"
 },
 "name": "snapshot-encrypted-disk"
}

No se puede crear una instantánea protegida por CMEK, a menos que el disco ya esté protegido por CMEK. Además, no se pueden convertir discos ni instantáneas encriptados para usar la encriptación predeterminada de Compute Engine, a menos que crees una imagen de disco completamente nueva y un disco persistente nuevo.

Encripta una imagen importada

Puedes encriptar una imagen nueva si importas una imagen personalizada a Compute Engine. Antes de importar una imagen, debes crear y comprimir un archivo de imagen de disco y subirlo a Google Cloud Storage.

Console

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

    Ir a la página Imágenes

  2. Haz clic en Crear imagen.
  3. En Disco de origen, selecciona el disco del que deseas crear una imagen.
  4. En Encriptación, selecciona Clave administrada por el cliente.
  5. Usa el menú desplegable a fin de seleccionar la clave de Cloud KMS que se usará para encriptar esta imagen.
  6. Continúa con el proceso de creación de imágenes.

Línea de comandos

gcloud compute \
images create [...] \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

API

Si deseas encriptar una imagen importada, especifica el URI del archivo comprimido, agrega la propiedad imageEncryptionKey a la solicitud de creación de la imagen y especifica la clave a fin de encriptar la imagen en la propiedad kmsKeyName, como se muestra a continuación:

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": "new-encrypted-image",
"sourceType": "RAW",
"imageEncryptionKey": {
  "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[IMAGE_KEY]"
  }
}

Crea un disco persistente desde un recurso encriptado

Crea un disco desde una instantánea encriptada

Para crear un nuevo disco persistente independiente con una instantánea encriptada, sigue estos pasos:

Console

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

    Ir a la página Discos

  2. Haz clic en Crear disco y, luego, ingresa las propiedades del disco nuevo.
  3. En Tipo de fuente, selecciona la instantánea o imagen deseada.
  4. Continua con el proceso de creación del disco persistente.

Línea de comandos

gcloud compute \
disks create [...] \
--source-snapshot example-snapshot \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

Para usar una imagen en lugar de una instantánea, reemplaza --source-snapshot example-snapshot por --image example-image.

API

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks

{
"name": "disk-from-encrypted-snapshot",
"sourceSnapshot": "global/snapshots/encrypted-snapshot"
}

Conecta un disco encriptado a una instancia nueva

Console

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en Crear instancia.
  3. En Disco de arranque, haz clic en Cambiar.
  4. Haz clic en Discos existentes.
  5. Selecciona un disco existente para adjuntar a la instancia.
  6. Continúa con el proceso de creación de la instancia.

Línea de comandos

gcloud compute instances \
create example-instance \
--disk name=encrypted-disk,boot=yes

API

"disks": [
{
  "deviceName": "encrypted-disk",
  "source": "projects/[PROJECT_ID]/zones/[ZONE]/disks/encrypted-disk"
  }
 }
]

Quita la clave de encriptación de Cloud KMS de un disco persistente

Puedes desencriptar el contenido de un disco encriptado y crear un disco nuevo que use la encriptación predeterminada de Compute Engine.

  1. Crea una imagen del disco encriptado y especifica la encriptación automática para la imagen nueva.
  2. Usa la imagen nueva para crear un disco persistente nuevo.

Después de crear el disco persistente nuevo, usa la encriptación predeterminada de Compute Engine para proteger el contenido del disco. Las instantáneas que creas desde ese disco también deben usar la encriptación predeterminada.

El impacto de inhabilitar o habilitar claves de encriptación

Inhabilitar o borrar una clave de encriptación tendrá los siguientes efectos en el contenido protegido por esa clave:

  • Las VM con discos adjuntos que están protegidos por la clave no se pueden iniciar.
  • Los discos protegidos por la clave no se pueden adjuntar a máquinas virtuales, ni se pueden crear instantáneas para ellos.
  • Las instantáneas protegidas por la clave no se pueden usar para crear un disco.
  • Las imágenes protegidas por la clave no se pueden usar para crear un disco.

Si inhabilitas la clave, los efectos anteriores se pueden revertir mediante su habilitación. Si borras la clave, los efectos anteriores son irreversibles.

Limitaciones

  • Los recursos regionales (discos) se pueden encriptar mediante claves en la misma ubicación o en global. Por ejemplo, un disco en la zona us-west1-a se puede encriptar mediante una clave en us-west1 o global. Los recursos globales (imágenes, instantáneas) se pueden encriptar mediante claves en cualquier ubicación.