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

  1. Encriptación Simétrica: Utiliza la misma clave para encriptar y desencriptar los datos.
  2. 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

  1. Crear una Clave en Google Cloud KMS:

    gcloud kms keys create my-key --location=global --keyring=my-keyring --purpose=encryption
    
  2. 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
    
  3. 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

INSERT INTO my_dataset.my_table (credit_card_number)
VALUES ('<encrypted_data>');

Ejercicios Prácticos

Ejercicio 1: Crear y Usar una Clave de Encriptación en BigQuery

  1. Crear una clave en Google Cloud KMS.
  2. Asignar los permisos necesarios a la clave.
  3. Crear una tabla en BigQuery utilizando la clave de encriptación.

Ejercicio 2: Encriptar y Desencriptar Datos

  1. Escribir un script en Python para encriptar datos sensibles.
  2. Almacenar los datos encriptados en una tabla de BigQuery.
  3. Escribir un script para desencriptar los datos almacenados.

Soluciones a los Ejercicios

Solución al Ejercicio 1

  1. Crear una clave en Google Cloud KMS:

    gcloud kms keys create my-key --location=global --keyring=my-keyring --purpose=encryption
    
  2. 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
    
  3. 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

  1. 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}")
    
  2. Almacenar los datos encriptados en BigQuery:

    INSERT INTO my_dataset.my_table (credit_card_number)
    VALUES ('<encrypted_data>');
    
  3. 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

Módulo 2: SQL Básico en BigQuery

Módulo 3: SQL Intermedio en BigQuery

Módulo 4: SQL Avanzado en BigQuery

Módulo 5: Gestión de Datos en BigQuery

Módulo 6: Optimización del Rendimiento de BigQuery

Módulo 7: Seguridad y Cumplimiento en BigQuery

Módulo 8: Integración y Automatización de BigQuery

Módulo 9: Machine Learning en BigQuery (BQML)

Módulo 10: Casos de Uso de BigQuery en el Mundo Real

© Copyright 2024. Todos los derechos reservados