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


En este tema, se proporciona información para encriptar discos con claves de encriptación proporcionadas por el cliente.

Para obtener información sobre la encriptación de discos, consulta Información sobre la encriptación de discos.

Para obtener información sobre la encriptación de discos con claves de encriptación administradas por el cliente (CMEK), consulta Protege recursos mediante claves de Cloud KMS.

Usar CSEKs significa que proporcionas tus propias claves de encriptación y Compute Engine usa tus claves para 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

  • Consulta la información sobre imágenes, instantáneas de discos y discos.
  • Si aún no lo hiciste, configura la autenticación. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Python

      Para usar las muestras de Python de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Para obtener más información, consulta Set up authentication for a local development environment.

      REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.

Restricciones

En CSEK, se aplican las siguientes restricciones:

Restricciones generales

La disponibilidad de las claves de encriptación proporcionadas por el cliente depende de la ubicación de tu cuenta de facturación, no de la ubicación del recurso.

Las claves de encriptación proporcionadas por el cliente no están disponibles para las cuentas de facturación que se encuentran 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 discos SSD locales porque la infraestructura de Google Cloud administra las claves y se borran cuando se finaliza la VM.

  • Compute Engine no almacena claves de encriptación con plantillas de instancias, por lo que debes almacenar tus propias claves en KMS para encriptar discos en un grupo de instancias administrado.

  • No puedes suspender instancias que tengan discos adjuntos protegidos por CSEK.

Especificaciones

En esta sección, se describe la especificación de encriptación y el formato de CSEK.

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.

Formato de clave requerido

Depende de ti generar y administrar la clave. Debes proporcionar una clave que sea una cadena 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, tienes la opción de unir la clave con un certificado de clave pública RSA que proporcione 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 Encriptación RSA.

Si deseas crear una clave unida con RSA para Compute Engine, haz lo siguiente:

  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 a 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 formas de generar una clave. Por ejemplo:

    $ 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 ejemplo de Python que genera una string aleatoria de 256 bits (32 bytes) y crea una clave unida a RSA codificada en el formato base64 con la biblioteca de criptografía:

import argparse
import base64
import os
from typing import Optional

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


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


def get_google_public_cert_key() -> RSAPublicKey:
    """
    Downloads the Google public certificate.

    Returns:
        RSAPublicKey object with the Google public certificate.
    """
    r = requests.get(GOOGLE_PUBLIC_CERT_URL)
    r.raise_for_status()

    # Load the certificate.
    certificate = x509.load_pem_x509_certificate(r.content, default_backend())

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

    return public_key


def wrap_rsa_key(public_key: RSAPublicKey, private_key_bytes: bytes) -> 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.

    Args:
        public_key: The public key to use for encrypting.
        private_key_bytes: The private key to be encrypted.

    Returns:
        private_key_bytes encrypted using the public_key. Encoded using
        base64.
    """
    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: Optional[str]) -> None:
    """
    This script will encrypt a private key with Google public key.

    Args:
        key_file: path to a file containing your private key. If not
            provided, a new key will be generated (256 bit).
    """
    # 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)

    b64_key = base64.b64encode(customer_key_bytes).decode("utf-8")

    print(f"Base-64 encoded private key: {b64_key}")
    print(f"Wrapped RSA key: {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 a RSA

Con la CLI de Google Cloud, 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 CSEK mediante la herramienta de línea de comandos

Configuración

Las claves de encriptación se pueden usar mediante Google Cloud CLI.

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 CLI de gcloud. Cuando uses REST, debes proporcionar la clave directamente en la solicitud.

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

  • El URI completamente calificado 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://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/example-disk",
  "key": "acXTX3rxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY+c=",
  "key-type": "raw"
  },
  {
  "uri": "https://www.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 CSEK

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

Console

  1. Ir a la página Discos

    Ir a Discos

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

  3. En Encriptación, selecciona Clave 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

REST

Puedes encriptar un disco si usas la propiedad diskEncryptionKey y solicitas 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 VM 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/e2-standard-2",
"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 REST 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 de un disco encriptado con CSEK

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 con CSEK siempre son instantáneas completas. Esto difiere de las instantáneas de discos encriptados con claves de encriptación administradas por el cliente (CMEK), que son incrementales. Las instantáneas se cobran según el tamaño total de la instantánea, por lo que una instantánea completa puede costar más que una instantánea incremental.

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.

Revisa las recomendaciones para instantáneas de discos persistentes antes de crear la instantánea.

Console

  1. Ir a la página Instantáneas

    Ir a 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.

REST

Para realizar la solicitud, proporciona la propiedad sourceDiskEncryptionKey para acceder al disco persistente de origen. Debes 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 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 formato de clave anterior. También puedes optar por dejar esta propiedad sin definir y la instantánea se puede usar para crear discos persistentes nuevos sin la necesidad de usar una clave.

Crea una imagen nueva de un disco o una imagen personalizada encriptada con CSEK

Puedes crear imágenes personalizadas desde los discos persistentes encriptados o copiar imágenes encriptadas. No puedes usar la consola para copiar imágenes. Usa Google Cloud CLI o REST para copiar imágenes.

Console

  1. Ve a la página Images (Imágenes).

    Ir a Imágenes

  2. Haga 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 deseas encriptar la imagen nueva con tu clave, agrega la clave al archivo de claves:

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

REST

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 la necesidad de usar una clave.

Encripta una imagen importada con CSEK

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. Ve a la página Images (Imágenes).

    Ir a Imágenes

  2. Haga 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 proporcionadas 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]

Reemplaza lo siguiente:

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

REST

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 de un recurso encriptado con CSEK

Crea un disco de una instantánea encriptada con CSEK

Console

  1. Ir a la página Discos

    Ir a 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

REST

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, realiza lo siguiente:

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 de una imagen encriptada con CSEK

Console

  1. Ir a la página Discos

    Ir a 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

REST

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 con CSEK a una VM nueva

Console

  1. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. En la sección Disco de arranque, haz clic en Cambiar y, luego, haz lo siguiente:

    1. En la página Disco de arranque, haz clic en la pestaña Discos existentes.
    2. En la lista Disco, elige un disco encriptado existente para conectarlo a la VM.
    3. 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.

    4. Haz clic en Seleccionar.

  3. Continúa con el proceso de creación de VM.

gcloud

Para crear una VM y adjuntar un disco encriptado, crea un archivo de claves y proporciona la clave mediante la marca --csek-key-file cuando crees la VM. 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

REST

Crea una VM 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 VM que tienen discos encriptados con CSEK

Si deseas obtener información para detener o iniciar una VM que tiene discos encriptados, lee Reinicia una VM 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 Google Cloud CLI, 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 CLI 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://www.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 VM con un disco encriptado por el cliente mediante el archivo de claves y, al mismo tiempo, crear una VM 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 CSEK 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.