Encripta y desencripta datos con Cloud KMS

1. Descripción general

Cloud KMS es un servicio de administración de claves alojado en la nube que te permite administrar las claves criptográficas de tus servicios de nube de la misma manera que lo haces en tus instalaciones locales. Incluye compatibilidad con la encriptación, la desencriptación, la firma y la verificación con una variedad de tipos y fuentes de claves, incluido Cloud HSM para claves respaldadas por hardware. En este instructivo, aprenderás a encriptar y desencriptar datos mediante claves simétricas de Cloud KMS.

Aprenderás

  • Cómo habilitar la API de Cloud KMS
  • Cómo crear un llavero de claves de Cloud KMS
  • Cómo crear una clave criptográfica de Cloud KMS para la encriptación y desencriptación simétricas
  • Cómo rotar una clave simétrica de Cloud KMS CryptoKey

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a la consola de Cloud y crea un proyecto nuevo o reutiliza uno existente. (Si todavía no tienes una cuenta de Gmail o de G Suite, debes crear una).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Recuerde el ID de proyecto, un nombre único en todos los proyectos de Google Cloud (el nombre anterior ya se encuentra en uso y no lo podrá usar). Se mencionará más adelante en este codelab como PROJECT_ID.

  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud recursos.

Ejecutar este codelab no debería costar mucho, tal vez nada. Asegúrate de seguir las instrucciones de la sección “Realiza una limpieza”, en la que se aconseja cómo cerrar recursos para que no se te facture más allá de este instructivo. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.

Inicia Cloud Shell

En este codelab, usarás Cloud Shell, un entorno virtualizado gratuito que se ejecuta en Google Cloud. En GCP Console, haga clic en el ícono de Cloud Shell en la barra de herramientas superior derecha:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

El aprovisionamiento y la conexión al entorno deberían tomar solo unos minutos. Cuando termine el proceso, debería ver algo como lo siguiente:

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. A menos que se indique lo contrario, ejecuta todos los comandos desde este shell.

3. Habilita el servicio de Cloud KMS

Antes de usar Cloud KMS, primero debes habilitar el servicio en tu proyecto. Solo debes hacerlo una vez por proyecto. Para habilitar el servicio de Cloud KMS, ejecuta el siguiente comando:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

La habilitación puede tardar hasta un minuto. El comando informará que se completó correctamente cuando finalice.

4. Crea una clave de KMS

Crea un llavero de claves de Cloud KMS. En Cloud KMS, un llavero de claves es una colección lógica de claves criptográficas. El llavero de claves contiene metadatos sobre las claves, como su ubicación. Crea un llavero de claves llamado my-keyring en la región global:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

Ahora crea una clave criptográfica llamada my-symmetric-key con el propósito encryption dentro del llavero de claves que acabas de crear.

$ gcloud kms keys create "my-symmetric-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

5. Encriptar datos

Crea un archivo con datos para encriptar y usa la herramienta de línea de comandos de gcloud para encriptar los datos del archivo:

$ echo "my-contents" > ./data.txt
$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file ./data.txt \
    --ciphertext-file ./data.txt.enc

Los datos encriptados (también conocidos como "texto cifrado") se guardan en data.txt.enc en el disco. Si abres el archivo data.txt.enc, notarás que tiene caracteres extraños que no se pueden imprimir. Esto se debe a que los datos resultantes están en formato binario.

Cuando almacenes el texto cifrado en una base de datos o lo transmitas como parte de una solicitud HTTP, es posible que debas codificar los datos. Un mecanismo de codificación común es base64.

Cloud KMS no almacena ningún texto sin formato que proporciones. Debes guardar este texto cifrado en una ubicación segura, ya que se requerirá para recuperar el valor del texto sin cifrar.

6. Desencriptar datos

Descifra el texto cifrado del archivo con la herramienta de línea de comandos de gcloud:

$ gcloud kms decrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

La herramienta de línea de comandos gcloud lee el texto cifrado del archivo y lo descifra con Cloud KMS. Ten en cuenta que en este ejemplo se especifica el argumento --plaintext-file como -. Esto le indica a gcloud que imprima el resultado en la terminal.

La consola imprimirá my-contents, que es el mismo valor de texto sin formato del archivo anterior.

7. Rota las claves

En Cloud KMS, una CryptoKey es, en realidad, una colección de versiones de CryptoKey. Puedes crear versiones de claves criptográficas nuevas para realizar la rotación de claves. Cloud KMS también puede rotar claves automáticamente según un programa.

Para rotar una clave de forma manual, crea una nueva versión de CryptoKey y configúrala como la versión principal:

$ gcloud kms keys versions create \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --primary

Todas las solicitudes futuras para encriptar datos usarán esta clave nueva. Las claves anteriores siguen disponibles para desencriptar los datos que se encriptaron previamente con esas claves. Cloud KMS determina automáticamente la clave de desencriptación adecuada en función del texto cifrado proporcionado. No es necesario que especifiques qué versión de clave criptográfica usar para la desencriptación.

Para evitar que los valores de texto cifrado que se encriptaron con una versión anterior de la clave criptográfica se desencripten con Cloud KMS, puedes inhabilitar o destruir esa versión de la clave criptográfica. La inhabilitación es una operación reversible, mientras que la destrucción es permanente. Para inhabilitar una versión, haz lo siguiente:

$ gcloud kms keys versions disable "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key"

8. ¡Felicitaciones!

Habilitaste la API de Cloud KMS, creaste una clave de encriptación simétrica y encriptaste y desencriptaste datos. Cloud KMS es un producto potente, y la encriptación y desencriptación solo son una pequeña parte de sus capacidades.

Realiza una limpieza

Si terminaste de explorar, considera borrar tu proyecto.

  • Ve a Cloud Platform Console.
  • Selecciona el proyecto que deseas cerrar y, luego, haz clic en “Borrar” en la parte superior. Con esta acción, se programa la eliminación del proyecto.

Más información

Licencia

Este trabajo cuenta con una licencia Atribución 2.0 Genérica de Creative Commons.