La encriptación de datos es una técnica esencial para proteger la información sensible almacenada y procesada en BigQuery. En este tema, aprenderás sobre los conceptos básicos de la encriptación, cómo BigQuery maneja la encriptación de datos y las mejores prácticas para asegurar tus datos.
Conceptos Básicos de Encriptación
¿Qué es la Encriptación?
La encriptación es el proceso de convertir datos legibles (texto plano) en un formato codificado (texto cifrado) que solo puede ser leído por alguien que tenga la clave de desencriptación adecuada.
Tipos de Encriptación
- Encriptación Simétrica: Utiliza la misma clave para encriptar y desencriptar los datos.
- Encriptación Asimétrica: Utiliza un par de claves, una pública para encriptar y una privada para desencriptar.
Algoritmos de Encriptación Comunes
- AES (Advanced Encryption Standard): Un estándar de encriptación simétrica ampliamente utilizado.
- RSA (Rivest-Shamir-Adleman): Un algoritmo de encriptación asimétrica.
Encriptación en BigQuery
Encriptación en Reposo
BigQuery encripta automáticamente los datos en reposo utilizando AES-256, un estándar de encriptación simétrica robusto. Esto incluye datos almacenados en discos y copias de seguridad.
Encriptación en Tránsito
BigQuery también asegura que los datos estén encriptados mientras se transfieren entre tu red y los servidores de Google, utilizando protocolos como TLS (Transport Layer Security).
Claves de Encriptación Gestionadas por el Cliente (CMEK)
Además de las claves gestionadas por Google, BigQuery permite a los usuarios gestionar sus propias claves de encriptación a través de Google Cloud Key Management Service (KMS).
Configuración de CMEK
-
Crear una Clave en Google Cloud KMS:
gcloud kms keys create my-key --location=global --keyring=my-keyring --purpose=encryption
-
Asignar Permisos a la Clave:
gcloud kms keys add-iam-policy-binding my-key --location=global --keyring=my-keyring --member=serviceAccount:[email protected] --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
-
Usar la Clave en BigQuery:
CREATE TABLE my_dataset.my_table OPTIONS ( kms_key_name="projects/my-project/locations/global/keyRings/my-keyring/cryptoKeys/my-key" );
Ejemplo Práctico: Encriptación de Datos Sensibles
Supongamos que tienes una tabla con información sensible como números de tarjetas de crédito. Puedes encriptar estos datos antes de almacenarlos en BigQuery.
Encriptar Datos con AES-256 en Python
from Crypto.Cipher import AES import base64 def encrypt_data(key, data): cipher = AES.new(key, AES.MODE_EAX) nonce = cipher.nonce ciphertext, tag = cipher.encrypt_and_digest(data.encode('utf-8')) return base64.b64encode(nonce + ciphertext).decode('utf-8') key = b'Sixteen byte key' # Clave de 16 bytes para AES-128 data = "1234-5678-9012-3456" encrypted_data = encrypt_data(key, data) print(f"Encrypted Data: {encrypted_data}")
Almacenar Datos Encriptados en BigQuery
Ejercicios Prácticos
Ejercicio 1: Crear y Usar una Clave de Encriptación en BigQuery
- Crear una clave en Google Cloud KMS.
- Asignar los permisos necesarios a la clave.
- Crear una tabla en BigQuery utilizando la clave de encriptación.
Ejercicio 2: Encriptar y Desencriptar Datos
- Escribir un script en Python para encriptar datos sensibles.
- Almacenar los datos encriptados en una tabla de BigQuery.
- Escribir un script para desencriptar los datos almacenados.
Soluciones a los Ejercicios
Solución al Ejercicio 1
-
Crear una clave en Google Cloud KMS:
gcloud kms keys create my-key --location=global --keyring=my-keyring --purpose=encryption
-
Asignar permisos a la clave:
gcloud kms keys add-iam-policy-binding my-key --location=global --keyring=my-keyring --member=serviceAccount:[email protected] --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
-
Crear una tabla en BigQuery utilizando la clave de encriptación:
CREATE TABLE my_dataset.my_table OPTIONS ( kms_key_name="projects/my-project/locations/global/keyRings/my-keyring/cryptoKeys/my-key" );
Solución al Ejercicio 2
-
Script en Python para encriptar datos:
from Crypto.Cipher import AES import base64 def encrypt_data(key, data): cipher = AES.new(key, AES.MODE_EAX) nonce = cipher.nonce ciphertext, tag = cipher.encrypt_and_digest(data.encode('utf-8')) return base64.b64encode(nonce + ciphertext).decode('utf-8') key = b'Sixteen byte key' # Clave de 16 bytes para AES-128 data = "1234-5678-9012-3456" encrypted_data = encrypt_data(key, data) print(f"Encrypted Data: {encrypted_data}")
-
Almacenar los datos encriptados en BigQuery:
INSERT INTO my_dataset.my_table (credit_card_number) VALUES ('<encrypted_data>');
-
Script para desencriptar los datos:
from Crypto.Cipher import AES import base64 def decrypt_data(key, encrypted_data): encrypted_data = base64.b64decode(encrypted_data) nonce = encrypted_data[:16] ciphertext = encrypted_data[16:] cipher = AES.new(key, AES.MODE_EAX, nonce=nonce) data = cipher.decrypt(ciphertext).decode('utf-8') return data key = b'Sixteen byte key' encrypted_data = '<encrypted_data>' decrypted_data = decrypt_data(key, encrypted_data) print(f"Decrypted Data: {decrypted_data}")
Conclusión
En esta sección, hemos cubierto los conceptos básicos de la encriptación, cómo BigQuery maneja la encriptación de datos en reposo y en tránsito, y cómo puedes utilizar claves de encriptación gestionadas por el cliente (CMEK) para tener un control adicional sobre la seguridad de tus datos. También hemos proporcionado ejemplos prácticos y ejercicios para reforzar tu comprensión. Con estos conocimientos, estarás mejor preparado para proteger la información sensible en tus proyectos de BigQuery.
Curso de BigQuery
Módulo 1: Introducción a BigQuery
- ¿Qué es BigQuery?
- Configuración de tu Entorno de BigQuery
- Entendiendo la Arquitectura de BigQuery
- Visión General de la Consola de BigQuery
Módulo 2: SQL Básico en BigQuery
Módulo 3: SQL Intermedio en BigQuery
Módulo 4: SQL Avanzado en BigQuery
- Joins Avanzados
- Campos Anidados y Repetidos
- Funciones Definidas por el Usuario (UDFs)
- Particionamiento y Agrupamiento
Módulo 5: Gestión de Datos en BigQuery
- Cargando Datos en BigQuery
- Exportando Datos desde BigQuery
- Transformación y Limpieza de Datos
- Gestión de Conjuntos de Datos y Tablas
Módulo 6: Optimización del Rendimiento de BigQuery
- Técnicas de Optimización de Consultas
- Entendiendo los Planes de Ejecución de Consultas
- Uso de Vistas Materializadas
- Optimización del Almacenamiento
Módulo 7: Seguridad y Cumplimiento en BigQuery
- Control de Acceso y Permisos
- Encriptación de Datos
- Auditoría y Monitoreo
- Cumplimiento y Mejores Prácticas
Módulo 8: Integración y Automatización de BigQuery
- Integración con Servicios de Google Cloud
- Uso de BigQuery con Dataflow
- Automatización de Flujos de Trabajo con Cloud Functions
- Programación de Consultas con Cloud Scheduler
Módulo 9: Machine Learning en BigQuery (BQML)
- Introducción a BigQuery ML
- Creación y Entrenamiento de Modelos
- Evaluación y Predicción con Modelos
- Características Avanzadas de BQML