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 las claves respaldadas por hardware.
En este instructivo, aprenderás a usar las funciones avanzadas de las APIs de seguridad y privacidad de Cloud, incluidas las siguientes:
- Configuración de un bucket seguro de Cloud Storage
- Administración de claves y datos encriptados con Cloud KMS
- Visualización de registros de auditoría en Cloud Storage
Usarás datos resumidos de Enron Corpus, que luego encriptarás y cargarás en Cloud Storage.
Aprenderás lo siguiente:
- Cómo encriptar datos y administrar claves de encriptación con Key Management Service (KMS)
Usarás
- Cloud KMS
- Cloud Storage
- El SDK de Cloud
Configuración del entorno de autoaprendizaje
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:
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, deberás habilitar la facturación en la consola de Cloud 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.
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:
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 indique lo contrario, ejecuta todos los comandos desde este shell.
Para almacenar los 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, antepón el ID de tu proyecto al nombre del bucket:
$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails
Luego, crea 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 forma local:
$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!
Inspecciona el archivo descargado para verificar que, de hecho, sea un correo electrónico:
$ tail 1.
El correo electrónico contendrá 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 tanto los correos electrónicos de texto sin formato como las imágenes.
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.
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"
Abre la IU web de Cryptographic Keys y consulta los recursos recién creados. Esta opción está disponible en IAM y administración en el menú principal.
Puedes ver y administrar llaveros de claves y claves criptográficas en la consola de Cloud.
Encripta el contenido del correo electrónico que descargamos antes con Cloud KMS. En este instructivo, se usa la herramienta de línea de comandos 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
Esto creará un archivo nuevo en el disco 1.enc
, que contendrá el contenido del archivo encriptado. Ahora que los datos están encriptados con Cloud KMS, sube 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). Los roles de IAM de Cloud KMS se dividen principalmente en dos categorías:
- Permiso para administrar claves
- Permiso para usar claves
Por ejemplo, el rol roles/cloudkms.admin
permite que el titular cree llaveros de claves y CryptoKeys, establezca políticas de IAM y realice operaciones relacionadas con la administración. El rol roles/cloudkms.cryptoKeyEncrypterDecrypter
otorga al titular el permiso para encriptar y desencriptar datos, pero no incluye permisos de administración.
Los roles de IAM se heredan de su recurso superior. Si alguien tiene el rol de roles/cloudkms.admin
en el proyecto de Google Cloud, es administrador de todas las claves de ese proyecto. Si tiene roles/cloudkms.admin
en un llavero de claves, es administrador de todas las claves de ese llavero. Si tienen roles/cloudkms.admin
en una sola clave criptográfica, solo son administradores de esa clave.
Para este ejercicio, usa tu identidad:
$ export MY_IDENTITY=you@gmail.com # or you@example.com
Asigna a la identidad la capacidad de administrar recursos de Cloud KMS en el llavero de claves creado anteriormente con la herramienta de línea de comandos gcloud
:
$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \ --location "global" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.admin"
El rol roles/cloudkms.admin
no incluye permiso para usar claves, solo para administrarlas. Para otorgar a tu identidad la capacidad de encriptar y desencriptar datos con la clave criptográfica enron-emails
, haz lo siguiente:
$ 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 el rol roles/cloudkms.admin
en el llavero de claves, que incluiría cualquier recurso de clave criptográfica secundaria. El segundo comando otorga roles/cloudkms.cryptoKeyEncrypterDecrypter
, pero solo en la clave criptográfica enron-emails
.
También puedes ver y asignar roles en la IU de Cloud KMS en la consola de Cloud.
Además de encriptar un solo archivo, también puedes encriptar una colección de archivos con algunas secuencias de comandos. En este ejemplo, se transmiten todos los correos electrónicos para allen-p, se encriptan y se suben 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
Este comando itera todos los archivos del directorio determinado en el bucket de muestra de Cloud Storage, los encripta con Cloud KMS y los sube a tu Google Cloud Storage.
Una vez que se complete la secuencia de comandos, podrás ver los archivos encriptados en la IU de Cloud Storage. Debería ver algo como esto:
Cloud Audit Logging tiene dos flujos de registros (registros de actividad del administrador y registros de acceso a datos) que generan los servicios de Google Cloud para ayudarte a responder 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, haz clic en el llavero de claves y selecciona 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 datos correctamente con Cloud KMS y los almacenaste 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}
Los recursos de Cloud KMS no se pueden borrar. Sin embargo, puedes destruir el material de la 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
- Usa Cloud IAM para administrar los permisos de Cloud KMS
- Usa Cloud KMS para encriptar datos
- Usa Cloud Storage para almacenar datos encriptados
- Uso de Cloud Audit Logging para ver toda la actividad de las claves y los llaveros de claves
Próximos pasos
- Usa Cloud KMS para encriptar una columna en una base de datos como BigQuery
- Configura un programa de rotación automática en tus claves de Cloud KMS
Más información
- Más información acerca de cómo rotar claves de encriptación
- Lea acerca acerca de la encriptación de sobre
- Lee acerca de la encriptación del lado del servidor para los buckets de Cloud Storage
- Publica preguntas y encuentra respuestas en Stack Overflow con la etiqueta google-cloud-kms.
Licencia
Este trabajo cuenta con una licencia Atribución 2.0 Genérica de Creative Commons.