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:
Usar Cloud Key Management Service para crear y administrar claves de encriptación de claves. Para obtener más información, consulta Administración de claves. En este tema, se proporcionan detalles sobre esta opción, conocida como claves de encriptación administradas por el cliente (CMEK).
Crea y administra tus propias claves de encriptación de claves. Para obtener información sobre esta opción, conocida como claves de encriptación proporcionadas por el cliente (CSEK), consulta Encripta discos con claves de encriptación proporcionadas por el cliente.
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
Obtén información sobre imágenes, instantáneas de discos persistentes, instancias y discos.
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 números y los ID de los proyectos de Google Cloud, consulta la sección Identifica proyectos.
En el proyecto de Google Cloud que ejecuta Compute Engine, configura el acceso a la API para Compute Engine.
En el proyecto de Google Cloud que ejecuta Cloud KMS, haz lo siguiente:
- Habilita la API de Cloud KMS.
- Crea un llavero de claves y una clave como se describe en Crea llavero de claves y claves.
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
- En Google Cloud Console, ve a la página Discos.
- Haz clic en Crear disco y, luego, ingresa las propiedades del disco nuevo.
- En Encriptación, selecciona Clave administrada por el cliente.
- Usa el menú desplegable a fin de seleccionar la clave de Cloud KMS que se usará para encriptar este disco.
- 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
- En Google Cloud Console, ve a la página Instantáneas.
- Haz clic en Crear instantánea.
- 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
- En Google Cloud Console, ve a la página Imágenes.
- Haz clic en Crear imagen.
- En Disco de origen, selecciona el disco del que deseas crear una imagen.
- En Encriptación, selecciona Clave administrada por el cliente.
- Usa el menú desplegable a fin de seleccionar la clave de Cloud KMS que se usará para encriptar esta imagen.
- 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
- En Google Cloud Console, ve a la página Discos.
- Haz clic en Crear disco y, luego, ingresa las propiedades del disco nuevo.
- En Tipo de fuente, selecciona la instantánea o imagen deseada.
- 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
- En Google Cloud Console, ve a la página Instancias de VM.
- Haz clic en Crear instancia.
- En Disco de arranque, haz clic en Cambiar.
- Haz clic en Discos existentes.
- Selecciona un disco existente para adjuntar a la instancia.
- 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.
- Crea una imagen del disco encriptado y especifica la encriptación automática para la imagen nueva.
- 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 zonaus-west1-a
se puede encriptar mediante una clave enus-west1
oglobal
. Los recursos globales (imágenes, instantáneas) se pueden encriptar mediante claves en cualquier ubicación.