Comienza a usar Cloud KMS

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 de forma local. Incluye compatibilidad para encriptación, desencriptación, firma y verificación mediante una variedad de tipos y fuentes de claves, incluido Cloud HSM para claves respaldadas por hardware.

En este instructivo, aprenderás a usar las funciones avanzadas de las API de Cloud Security y Privacy, incluidas las siguientes:

  • Configuración de un bucket seguro de Cloud Storage
  • Administra claves y datos encriptados con Cloud KMS
  • Visualización de registros de auditorías en Cloud Storage

Tomará datos resumidos del Enron Corpus, los encriptará y los cargará en Cloud Storage.

Aprenderás

  • Cómo encriptar datos y administrar claves de encriptación con Key Management Service (KMS)

Usarás

  • Cloud KMS
  • Cloud Storage
  • SDK de Cloud

Configuración del entorno a su propio ritmo

Si aún no tienes una Cuenta de Google (Gmail o Google Apps), debes crear una. Accede a Google Cloud Platform Console (console.cloud.google.com) y crea un proyecto nuevo:

Captura de pantalla de 2016-02-10 12:45:26.png

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.

A continuación, debes habilitar la facturación en Cloud Console para usar los recursos de Google Cloud.

Ejecutar este codelab debería costar solo unos pocos dólares, pero su costo podría aumentar si decides usar más recursos o si los dejas en ejecución (consulta la sección “Limpiar” al final de este documento).

Los usuarios nuevos de Google Cloud Platform son aptos para obtener una prueba gratuita de USD 300.

Iniciar 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:

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:

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 le indique lo contrario, ejecute todos los comandos desde este shell.

Para almacenar datos de este instructivo, crea un bucket de Cloud Storage. Dado que los nombres de los buckets de Cloud Storage deben ser únicos a nivel global, agrega el prefijo del nombre del bucket al ID del proyecto:

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

Luego, cree el bucket:

$ gsutil mb gs://${BUCKET_NAME}

El Enron Corpus es una gran base de datos que cuenta con más de 600,000 correos electrónicos provenientes de 158 empleados de Enron Corporation. Estos datos se copiaron en el bucket de Cloud Storage llamado gs://enron_emails/.

Descarga uno de los archivos de correo electrónico de manera local:

$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!

Inspecciona el archivo descargado para verificar que sea, de hecho, un correo electrónico:

$ tail 1.

El correo electrónico tendrá un mensaje como el siguiente:

Attached is the Delta position for 1/18...
# ...

Además de los correos electrónicos, el bucket también contiene imágenes. En este instructivo, se usan imágenes y correos electrónicos con texto simple.

Para poder usar Cloud KMS, primero debes habilitar el servicio en tu proyecto. Esto solo se debe hacer una vez por proyecto. Para habilitar el servicio de Cloud KMS, ejecute 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.

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 enron-emails con el propósito encryption dentro del llavero de claves que acabas de crear.

$ gcloud kms keys create "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

Abra la IU web de claves criptográficas y observe los recursos creados recientemente. Esta opción está disponible en Administrador de IAM, en el menú principal.

Puede ver y administrar llaveros de claves y claves criptográficas en Cloud Console.

Encriptar el contenido del correo electrónico que descargaste antes con Cloud KMS En este instructivo, se usa la herramienta de línea de comandos de gcloud, pero también puedes encriptar datos con la API de Cloud KMS.

$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file ./1. \
    --ciphertext-file ./1.enc

Se creará un archivo nuevo en el disco 1.enc, que incluye el contenido del archivo encriptado. Ahora que los datos están encriptados con Cloud KMS, suba el archivo encriptado al bucket de Cloud Storage.

$ gsutil cp ./1.enc gs://${BUCKET_NAME}

Cloud KMS está integrado en Google Cloud Identity and Access Management (IAM). Las funciones de IAM de Cloud KMS se dividen en gran medida en dos categorías:

  • Permiso para administrar claves
  • Permiso para usar claves

Por ejemplo, la función roles/cloudkms.admin permite al titular crear llaveros de claves, claves criptográficas, establecer políticas de IAM y realizar operaciones relacionadas con la administración. El roles/cloudkms.cryptoKeyEncrypterDecrypter otorga al titular los datos de encriptación y desencriptación, pero no incluye permisos de administración.

El recurso superior hereda las funciones de IAM. Si alguien tiene la función roles/cloudkms.admin en el proyecto de Google Cloud, es el administrador de todas las claves de ese proyecto. Si tienen roles/cloudkms.admin en un llavero de claves, son administradores de todas las claves de ese llavero. Si tienen roles/cloudkms.admin en una sola clave criptográfica, solo serán administradores de esa clave.

Para este ejercicio, use su identidad:

$ export MY_IDENTITY=you@gmail.com # or you@example.com

Asigna a la identidad la capacidad para administrar los recursos de Cloud KMS en el llavero de claves creado anteriormente con la herramienta de línea de comandos de gcloud:

$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \
    --location "global" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.admin"

La función roles/cloudkms.admin no incluye permiso para usar claves, sino solo para administrarlas. A fin de otorgar a tu identidad la capacidad de encriptar y desencriptar datos con la clave criptográfica enron-emails, sigue estos pasos:

$ gcloud kms keys add-iam-policy-binding "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Ten en cuenta que el primer comando otorga la función roles/cloudkms.admin en el llavero de claves, que incluye cualquier recurso secundario de clave criptográfica. El segundo comando otorga roles/cloudkms.cryptoKeyEncrypterDecrypter, pero solo en la clave criptográfica enron-emails.

También puedes ver y asignar funciones en la IU de Cloud KMS en Cloud Console.

Además de encriptar un solo archivo, también puede encriptar una colección de archivos con algunas secuencias de comandos. Este ejemplo transmite todos los correos electrónicos para allen-p, los encripta y sube los valores encriptados resultantes al bucket de Cloud Storage:

DIR="gs://enron_emails/allen-p"
for file in $(gsutil ls ${DIR}/**); do
  ENC_NAME="$(basename ${file}).enc"
  gsutil cat ${file} \
  | \

  gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file - \
    --ciphertext-file - \
    | \

    gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME}
    echo "Copied ${ENC_NAME}"
done

Esto itera en todos los archivos del directorio especificado en el bucket de Cloud Storage de muestra, los encripta con Cloud KMS y los sube a su instancia de Google Cloud Storage.

Cuando se complete la secuencia de comandos, podrá ver los archivos encriptados en la IU de Cloud Storage. Debería ver algo como esto:

Cloud Audit Logging tiene dos transmisiones de registros: registros de actividad del administrador y registros de acceso a los datos, que se generan con los servicios de Google Cloud para ayudarte a responder a la pregunta “¿quién hizo qué, dónde y cuándo?” en tus proyectos de Google Cloud Platform.

Para ver la actividad de cualquier recurso en KMS, haga clic en el llavero de claves y seleccione Ver actividad. Esto lo dirigirá a la IU de Cloud Activity, donde debería ver la creación del llavero de claves y todas las modificaciones que se le realizaron.

Encriptaste correctamente los datos con Cloud KMS y almacenaste los datos encriptados en Cloud Storage.

Haz limpieza

Libera los recursos creados durante este instructivo. Borra el bucket de Cloud Storage que creaste antes:

$ gsutil rm -r gs://${BUCKET_NAME}

No se pueden borrar los recursos de Cloud KMS. Sin embargo, puedes destruir el material de clave para que no se pueda volver a usar:

$ gcloud kms keys versions destroy "1" \
    --location "global" \
    --key "enron-emails" \
    --keyring "my-keyring"

Temas abordados

  • Usar Cloud IAM para administrar los permisos de Cloud KMS
  • Usar Cloud KMS para encriptar datos
  • Usa Cloud Storage para almacenar datos encriptados
  • Usa Cloud Audit Logging para ver toda la actividad de las claves y los llaveros de claves

Próximos pasos

  • Usar Cloud KMS para encriptar una columna en una base de datos como BigQuery
  • Establece un programa de rotación automática en tus claves de Cloud KMS

Más información

Licencia

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