Encripta discos con claves de encriptación proporcionadas por el cliente

De manera predeterminada, Compute Engine encripta todos los datos en reposo. Compute Engine controla y administra esta encriptación sin que debas realizar ninguna acción adicional. Sin embargo, si quieres controlar y administrar esta encriptación, puedes proporcionar tus propias claves de encriptación.

Si proporcionas tus propias claves de encriptación, Compute Engine usa tu clave a fin de proteger las claves generadas por Google que se usan para encriptar y desencriptar tus datos. Solo los usuarios que brinden la clave correcta pueden usar los recursos protegidos por una clave de encriptación proporcionada por el cliente.

Google no almacena tus claves en sus servidores ni tiene acceso a tus datos protegidos, a menos que proporciones la clave. Esto también significa que, si olvidas o pierdes la clave, Google no tiene forma de recuperarla ni de recuperar los datos encriptados con la clave perdida.

Cuando borras un disco persistente, Google descarta las claves de encriptación, lo que hace que los datos sean irrecuperables. Este proceso es irreversible.

Antes de comenzar

Especificaciones

Encriptación

Compute Engine usa tu clave de encriptación para proteger las claves de encriptación de Google con la encriptación AES-256.

Restricciones

Existen algunas limitaciones y restricciones para usar esta función:

Restricciones generales

Las claves de encriptación proporcionadas por el cliente no están disponibles en los siguientes países:

  • Brasil
  • India

Restricciones técnicas

  • Solo puedes encriptar discos persistentes nuevos con tu propia clave. No puedes usarla para encriptar discos persistentes 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 conserva.

  • Compute Engine no guarda las claves de encriptación con plantillas de instancias, por lo que no puedes usar tus propias claves para encriptar discos en un grupo de instancias administrado.

Formato de clave requerido

Generar y administrar la clave es tu responsabilidad. Debes proporcionar una clave que sea una string de 256 bits codificada en el formato base64 estándar de la especificación RFC 4648 para Compute Engine.

A continuación, se muestra un ejemplo de una clave codificada en el formato base64, generada con la string “Hello from Google Cloud Platform” ("Google Cloud Platform los saluda").

SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=

Se puede generar con la siguiente secuencia de comandos:

read -sp "String:" ; [[ ${#REPLY} == 32 ]] && echo "$(echo -n "$REPLY" | base64)" || (>&2 echo -e "\nERROR:Wrong Size"; false)

Unión de clave RSA

Además de codificar tu clave en el formato base64, puedes unir la clave de forma opcional con un certificado de clave pública RSA proporcionado por Google, codificar la clave en el formato base64 y, luego, usar esa clave en tus solicitudes.

La unión de clave RSA es un proceso en el cual usas una clave pública para encriptar los datos. Una vez que esos datos se encriptan con la clave pública, solo se pueden desencriptar con la clave privada correspondiente. En este caso, solo los servicios de Google Cloud tienen conocimiento de la clave privada. Cuando unes tu clave mediante el certificado RSA, te aseguras de que solo los servicios de Google Cloud puedan desunir la clave y usarla para proteger tus datos.

Para obtener más información, consulta la página sobre la encriptación RSA.

Si deseas crear una clave unida con RSA para Compute Engine, debes realizar los siguientes pasos:

  1. Une tu clave con la clave pública proporcionada en un certificado que administre Compute Engine. Asegúrate de unir tu clave con el relleno OAEP, no con la versión 1.5 del relleno PKCS #1.
  2. Codifica tu clave unida con RSA con la codificación en el formato base64 estándar.

Descarga el certificado público que mantiene Compute Engine desde:

https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem

Existen muchas formas de generar y unir tu clave con RSA. Usa un método que te resulte conocido. A continuación, se muestran dos ejemplos de unión de clave con RSA que podrías usar.

Ejemplo 1

En las siguientes instrucciones, se usa la utilidad de línea de comandos openssl para codificar y unir una clave con RSA.

  1. Opcional: Genera una clave aleatoria de 256­ bits (32 bytes). Si ya tienes una clave que deseas usar, puedes omitir este paso. Existen muchas maneras de generar una clave. A continuación, se muestra un ejemplo de una forma en que puedes hacerlo:

    $ head -c 32 /dev/urandom | LC_CTYPE=C tr '\n' = > mykey.txt
    
  2. Descarga el certificado de clave pública:

    $  curl -s -O -L https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem
  3. Extrae la clave pública del certificado:

    $ openssl x509 -pubkey -noout -in google-cloud-csek-ingress.pem > pubkey.pem
    
  4. Une la clave con RSA y asegúrate de reemplazar mykey.txt por tu propio archivo de claves.

    $ openssl rsautl -oaep -encrypt -pubin -inkey pubkey.pem -in mykey.txt -out rsawrappedkey.txt
    
  5. Codifica la clave unida con RSA en el formato base64.

    $ openssl enc -base64 -in rsawrappedkey.txt | tr -d '\n' | sed -e '$a\' > rsawrapencodedkey.txt
    

Ejemplo 2

A continuación, se muestra una secuencia de comandos de Python de ejemplo que genera una string aleatoria de 256 bits (32 bytes) y crea una clave unida con RSA codificada en el formato base64 con la biblioteca de criptografía:


import argparse
import base64
import os

from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
import requests

GOOGLE_PUBLIC_CERT_URL = (
    'https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem')

def get_google_public_cert_key():
    r = requests.get(GOOGLE_PUBLIC_CERT_URL)
    r.raise_for_status()

    # Load the certificate.
    certificate = x509.load_pem_x509_certificate(
        r.text.encode('utf-8'), default_backend())

    # Get the certicate's public key.
    public_key = certificate.public_key()

    return public_key

def wrap_rsa_key(public_key, private_key_bytes):
    # Use the Google public key to encrypt the customer private key.
    # This means that only the Google private key is capable of decrypting
    # the customer private key.
    wrapped_key = public_key.encrypt(
        private_key_bytes,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA1()),
            algorithm=hashes.SHA1(),
            label=None))
    encoded_wrapped_key = base64.b64encode(wrapped_key)
    return encoded_wrapped_key

def main(key_file):
    # Generate a new 256-bit private key if no key is specified.
    if not key_file:
        customer_key_bytes = os.urandom(32)
    else:
        with open(key_file, 'rb') as f:
            customer_key_bytes = f.read()

    google_public_key = get_google_public_cert_key()
    wrapped_rsa_key = wrap_rsa_key(google_public_key, customer_key_bytes)

    print('Base-64 encoded private key: {}'.format(
        base64.b64encode(customer_key_bytes).decode('utf-8')))
    print('Wrapped RSA key: {}'.format(wrapped_rsa_key.decode('utf-8')))

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument(
        '--key_file', help='File containing your binary private key.')

    args = parser.parse_args()

    main(args.key_file)

Tu clave ya está lista para usar.

Usa una clave unida con RSA

Con la herramienta de línea de comandos de gcloud, puedes proporcionar una clave normal y una clave unida con RSA de la misma forma.

En la API, usa la propiedad sha256 en lugar de rawKey si deseas usar una clave unida con RSA.

Encripta recursos con la herramienta de línea de comandos

Configuración

Las claves de encriptación se pueden usar mediante la herramienta de línea de comandos de gcloud.

Descargar e instalar gcloud.

Archivo de claves

Cuando uses la herramienta de línea de comandos de gcloud compute para configurar las claves, proporciona claves codificadas con un archivo de claves que contenga las claves codificadas como una lista JSON. Un archivo de claves puede contener varias claves, lo que te permite administrar muchas claves en un solo lugar. De manera alternativa, puedes crear archivos de claves únicas para manejar cada clave por separado. Un archivo de claves solo se puede usar con la herramienta de gcloud. Cuando uses la API, deberás proporcionar la clave directamente en la solicitud.

Cada entrada en el archivo de claves debe proporcionar la siguiente información:

  • El URI completo para el recurso que protege la clave
  • La clave correspondiente
  • El tipo de clave, raw o rsa-encrypted

Cuando uses el archivo de claves en las solicitudes, la herramienta buscará recursos coincidentes y usará las claves correspondientes. Si no se encuentran recursos coincidentes, la solicitud fallará.

Un archivo de claves de ejemplo se ve de la siguiente manera:

[
  {
  "uri": "https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/example-disk",
  "key": "acXTX3rxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY-c=",
  "key-type": "raw"
  },
  {
  "uri": "https://compute.googleapis.com/compute/v1/projects/myproject/global/snapshots/my-private-snapshot",
  "key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  "key-type": "rsa-encrypted"
  }
]

Prácticas recomendadas para administrar el archivo de claves

Si usas un archivo de claves, restringe el acceso a él solo a aquellos que lo necesitan. Asegúrate de establecer los permisos adecuados en estos archivos y considera encriptar estos archivos con herramientas adicionales:

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. Proporciona la clave de encriptación del disco en el cuadro de texto y selecciona Clave unida si la clave se unió con la clave pública RSA.

gcloud

En la herramienta de gcloud compute, encripta un disco con la marca --csek-key-file durante la creación de la instancia. Si usas una clave unida con RSA, usa el componente gcloud beta:

gcloud (beta) compute instances create example-instance --csek-key-file example-file.json

Para encriptar un disco persistente independiente, usa este comando:

gcloud (beta) compute disks create example-disk --csek-key-file example-file.json

API

En la API, encripta un disco con la propiedad diskEncryptionKey y solicita a la API v1 una clave sin procesar (no unida con RSA) o a la API Beta una clave unida con RSA. Proporciona una de las siguientes propiedades en la solicitud:

  • rawKey: Si la clave solo está codificada en el formato base64
  • rsaEncryptedKey: Si la clave está unida con RSA y codificada en el formato base64

Por ejemplo, para encriptar un disco nuevo durante la creación de la instancia con una clave unida con RSA, usa este comando:

POST
https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/instances

{
"machineType": "zones/us-central1-a/machineTypes/n1-standard-1",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
  "initializeParams": {
   "sourceImage": "projects/debian-cloud/global/images/debian-9-stretch-v20170619"
  },
  "boot": true
 }
],
...
}

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

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/
us-central1-a/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2F
alpha%2Fprojects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-9-stretch-v20170619

{
 "name": "new-encrypted-disk-key",
 "diskEncryptionKey": {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
 "type": "zones/us-central1-a/diskTypes/pd-standard"
}

Crea una instantánea a partir de un disco encriptado

Si creas una instantánea desde un disco encriptado, la instantánea también debe estar encriptada. Debes especificar una clave para encriptar la instantánea. No puedes convertir instantáneas o discos 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.

Las instantáneas de los discos encriptados son siempre instantáneas completas, cuyo almacenamiento es más costoso que las instantáneas incrementales.

Para crear una instantánea de disco persistente desde un disco encriptado, la solicitud de creación de la instantánea debe proporcionar la clave de encriptación que usaste para encriptar el disco persistente.

Consulta Prácticas recomendadas para las instantáneas de discos persistentes antes de crear la instantánea.

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 encriptado del que deseas crear una instantánea.
  4. Proporciona la clave de encriptación del disco en el cuadro de texto y selecciona Clave unida si la clave se unió con la clave pública RSA.
  5. Proporciona una clave de encriptación adicional en la sección Encriptación para encriptar la instantánea nueva.

API

En la API, proporciona la propiedad sourceDiskEncryptionKey para acceder al disco persistente de origen. De manera opcional, puedes encriptar la instantánea nueva con la propiedad snapshotEncryptionKey.

Solicita a la API v1 una clave sin procesar (no unida con RSA) o a la API Beta una clave unida con RSA.

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks/example-disk/createSnapshot

{
 "snapshotEncryptionKey":  {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
 },
 "sourceDiskEncryptionKey": {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
 "name": "snapshot-encrypted-disk"
}

La propiedad sourceDiskEncryptionKey debe coincidir con la clave usada para encriptar el disco persistente. De lo contrario, la solicitud fallará.

La propiedad snapshotEncryptionKey opcional te permite proporcionar una clave para encriptar la instantánea, de modo que, si esta se usa con el fin de crear discos persistentes nuevos, se necesite proporcionar una clave coincidente. Esta clave debe seguir el mismo formato de clave que se describió antes. También puedes optar por dejar esta propiedad sin definir y la instantánea se puede usar para crear discos persistentes nuevos sin requerir una clave.

Crea una imagen nueva desde un disco encriptado o una imagen personalizada encriptada

Puedes crear imágenes personalizadas desde los discos persistentes encriptados o copiar imágenes encriptadas. No puedes usar Console para copiar imágenes. Usa la herramienta de línea de comandos de gcloud o la API para copiar imágenes.

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, elige el disco encriptado del que deseas crear una imagen.
  4. En Encriptación, selecciona una solución de administración de claves de encriptación.
  5. Si se unió la clave con la clave RSA pública, selecciona Clave unida.

gcloud

Sigue las instrucciones para crear una imagen y agrega la marca --csek-key-file con una ruta de acceso al archivo de claves de encriptación para el objeto de origen encriptado. Usa el componente gcloud beta si usas una clave unida con RSA:

gcloud (beta) compute images create .... --csek-key-file example-file.json

Si también deseas encriptar la imagen nueva con tu clave, agrega la clave al archivo de claves, p. ej.:

[
  {
  "uri": "https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/source-disk",
  "key": "acX3RqzxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY-c=",
  "key-type": "raw"
  },
  {
  "uri": "https://compute.googleapis.com/compute/v1/projects/myproject/global/snapshots/the-new-image",
  "key": "TF0t-cSfl7CT7xRF1LTbAgi7U6XXUNC4zU_dNgx0nQc=",
  "key-type": "raw"
  }
]

API

La solicitud de creación de la API debe contener la propiedad de la clave de encriptación del objeto de origen. Por ejemplo, incluye una de las siguientes propiedades según el tipo de objeto de origen:

  • Disco persistente: sourceDiskEncryptionKey
  • Imagen: sourceImageEncryptionKey

También incluye las propiedades rawKey o rsaEncryptedKey según el tipo de clave. Solicita a la API v1 una clave sin procesar (no unida con RSA) o a la API Beta una clave unida con RSA. En el siguiente ejemplo, un disco persistente encriptado y unido con RSA se convierte en una imagen que usa la misma clave de encriptación.

POST https://compute.googleapis.com/compute/beta/projects/myproject/global/images

{
 "name": "image-encrypted-disk",
 "sourceDiskEncryptionKey": {
    "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
 "imageEncryptionKey": {
    "rsaEncryptedKey":  "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
    },
 "sourceDisk": "projects/myproject/zones/us-central1-a/disks/source-disks"
}

La propiedad imageEncryptionKey opcional te permite proporcionar una clave para encriptar la imagen, de modo que se deba proporcionar una clave coincidente cuando esta se use con el fin de crear discos persistentes nuevos. Esta clave debe seguir el mismo formato de clave que se describió antes. También puedes optar por dejar esta propiedad sin definir y la imagen se puede usar para crear discos persistentes nuevos sin requerir una clave.

Encripta una imagen importada

Puedes encriptar una imagen nueva si importas una imagen personalizada de forma manual 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.

Importa la imagen personalizada de Compute Engine que deseas encriptar. Especifica el URI para el archivo comprimido y selecciona una ruta para el archivo de claves de encriptación.

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 Fuente, elige Archivo de Cloud Storage.
  4. En Archivo de Cloud Storage, ingresa el URI de Cloud Storage.
  5. En Encriptación, elige Clave administrada por el cliente y proporciona la clave de encriptación para encriptar la imagen en el cuadro de texto.

gcloud

Usa el comando compute images create para crear una imagen nueva y especifica la marca --csek-key-file con un archivo de claves de encriptación. Si usas una clave unida con RSA, usa el componente gcloud beta:

gcloud (beta) compute images create [IMAGE_NAME] \
  --source-uri gs://[BUCKET_NAME]/[COMPRESSED_FILE] \
  --csek-key-file [KEY_FILE]

En el ejemplo anterior, se ilustra lo siguiente:

  • [IMAGE_NAME] es el nombre de la imagen personalizada nueva.
  • [BUCKET_NAME] es el nombre del depósito de Cloud Storage que contiene el archivo de imagen comprimido.
  • [COMPRESSED_FILE] es el nombre del archivo de imagen comprimido.
  • [KEY_FILE] es la ruta a un archivo de claves de encriptación en la estación de trabajo local.

API

Si deseas encriptar una imagen nueva creada a partir de un archivo RAW, agrega la propiedad imageEncryptionKey nueva a la solicitud de creación de la imagen, seguida de rawKey o rsaEncryptedKey. Solicita a la API v1 una clave sin procesar (no unida con RSA) o a la API Beta una clave unida con RSA.

POST https://compute.googleapis.com/compute/beta/projects/myproject/global/images

{
"rawDisk": {
 "source": "http://storage.googleapis.com/example-image/example-image.tar.gz"
},
"name": "new-encrypted-image",
"sourceType": "RAW",
"imageEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
}

Crea un disco persistente desde un recurso encriptado

Crea un disco desde una instantánea encriptada

Console

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

    Ir a la página Discos

  2. Haz clic en Crear disco.
  3. En Tipo de origen, selecciona Instantánea.
  4. En Encriptación, selecciona una solución de administración de claves de encriptación.
  5. Si se unió la clave con la clave RSA pública, selecciona Clave unida.

gcloud

En la herramienta de gcloud compute, proporciona la clave de encriptación para la instantánea con la marca --csek-key-file cuando crees el disco. Si usas una clave unida con RSA, usa el componente gcloud beta:

gcloud (beta) compute disks create ... --source-snapshot example-snapshot --csek-key-file example-file.json

API

Para usar una instantánea encriptada, proporciona la propiedad sourceSnapshotEncryptionKey en la solicitud, seguida de rawKey o rsaEncryptedKey. Solicita a la API v1 una clave sin procesar (no unida con RSA) o a la API Beta una clave unida con RSA. Por ejemplo, para un nuevo disco persistente independiente que usa una instantánea encriptada:

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks

{
"name": "disk-from-encrypted-snapshot",
"sourceSnapshot": "global/snapshots/encrypted-snapshot",
"sourceSnapshotEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
}

Crea un disco desde una imagen encriptada

Console

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

    Ir a la página Discos

  2. Haz clic en Crear disco.
  3. En Tipo de origen, selecciona Imagen.
  4. En Encriptación, selecciona una solución de administración de claves de encriptación.
  5. Si se unió la clave con la clave RSA pública, selecciona Clave unida.

gcloud

En la herramienta de gcloud compute, proporciona la clave de encriptación para la imagen con la marca --csek-key-file cuando crees el disco. Si usas una clave unida con RSA, usa el componente gcloud beta:

gcloud (beta) compute disks create ... --image example-image --csek-key-file example-file.json

API

Para usar una imagen encriptada, proporciona sourceImageEncryptionKey, seguida de rawKey o rsaEncryptedKey. Solicita a la API v1 una clave sin procesar (no unida con RSA) o a la API Beta una clave unida con RSA.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks

{
"name": "disk-from-encrypted-image",
"sourceImageEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
"sourceImage": "global/images/encrypted-image"
}

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. Selecciona Disco existente.
  5. Elige un disco existente para conectar a la instancia.
  6. Proporciona la clave de encriptación en el cuadro de texto y selecciona Clave unida si la clave se unió con la clave pública RSA.
  7. Continúa con el proceso de creación de la instancia.

gcloud

Para crear una instancia y adjuntar un disco encriptado, crea un archivo de claves y proporciona la clave con la marca --csek-key-file cuando crees la instancia. Si usas una clave unida con RSA, usa el componente gcloud beta:

gcloud (beta) compute instances create example-instance \
  --disk name=example-disk,boot=yes \
  --csek-key-file example-file.json

API

Crea una instancia con la API de Compute Engine y proporciona rawKey o rsaEncryptedKey con la especificación del disco. Solicita a la API v1 una clave sin procesar (no unida con RSA) o a la API Beta una clave unida con RSA.

Aquí se muestra un fragmento de una especificación del disco de ejemplo:

"disks": [
{
  "deviceName": "encrypted-disk",
  "source": "projects/myproject/zones/us-central1-f/disks/encrypted-disk",
  "diskEncryptionKey": {
    "rawKey": "SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0="
  }
 }
]

Inicia o reinicia las instancias que tienen discos encriptados

Para obtener información sobre cómo detener o iniciar una instancia que tiene discos encriptados, lee la documentación sobre cómo reiniciar una instancia con un disco encriptado.

Usa la línea de comandos para crear recursos combinados

Si deseas crear una combinación de recursos encriptados por el cliente y encriptados de forma estándar en una solicitud única con la herramienta de línea de comandos de gcloud, puedes usar la marca --csek-key-file con un archivo de claves y la marca --no-require-csek-key-create en tu solicitud. Si proporcionas ambas marcas, la herramienta de gcloud crea los recursos encriptados por el cliente que se definen de forma explícita en el archivo de claves y, también, crea los recursos estándar que especifiques.

Por ejemplo, supongamos que un archivo de claves contiene lo siguiente:

[
  {
  "uri": "https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks/example-disk",
  "key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==",
  "key-type": "rsa-encrypted"
  }
]

Si deseas crear una instancia con un disco encriptado por el cliente con el archivo de claves y, al mismo tiempo, crear una instancia con un disco encriptado de forma estándar en la misma solicitud, puedes hacerlo de la siguiente manera:

gcloud beta compute instances create example-disk example-disk-2 \
    --csek-key-file mykeyfile.json --no-require-csek-key-create

Por lo general, no se puede crear example-disk-2 si solo especificaste la marca --csek-key-file, ya que el disco no está definido de manera explícita en el archivo de claves. Si agregas --no-require-csek-key-create, se crearán ambos discos, uno encriptado con el archivo de claves y el otro encriptado con la encriptación de Google.

Quita la clave de encriptación proporcionada por el cliente de un disco persistente

Puedes desencriptar el contenido de un disco encriptado por el cliente 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.

Una vez creado 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.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Compute Engine