Habilita la encriptación de datos transparente (TDE) en AlloyDB Omni RPM

1. Introducción

En este codelab, se muestra cómo configurar y habilitar la Encriptación de datos transparente (TDE) en AlloyDB Omni con paquetes RPM. La TDE encripta los archivos de datos, los registros de escritura anticipada (WAL) y los archivos de datos temporales en reposo, lo que proporciona protección de datos contra el acceso no autorizado a los medios de almacenamiento físico subyacentes.

En este codelab, aprenderás a aprovisionar volúmenes de almacenamiento, inicializar y ejecutar un clúster de AlloyDB Omni habilitado para TDE con File KMS y verificar la encriptación de datos en reposo en archivos de disco.

Requisitos previos

  • Acceso a un proyecto de Google Cloud y a Cloud Shell desde la consola de Google Cloud
  • El SDK de Google Cloud (gcloud) instalado y configurado Para obtener detalles sobre la instalación de gcloud, consulta gcloud-install

Qué aprenderás

  • Cómo crear una VM de Compute Engine con una base de datos, una copia de seguridad y discos de intercambio dedicados
  • Cómo formatear volúmenes de almacenamiento (XFS), configurar /etc/fstab y preparar rutas de acceso de datos
  • Cómo generar y administrar claves de encriptación de claves (KEK) con File KMS
  • Cómo instalar paquetes RPM de AlloyDB Omni y utilidades de cliente de PostgreSQL
  • Cómo iniciar un clúster de AlloyDB Omni habilitado para TDE con herramientas de configuración de RPM (alloydbomni18-setup) y --tde-kek-url
  • Cómo verificar la encriptación en el disco con la inspección de archivos sin procesar (grep)

Requisitos

2. Configuración y requisitos

Configuración del proyecto

Cómo crear un proyecto de Google Cloud

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.

Iniciar Cloud Shell

Si bien puedes operar Google Cloud de forma remota desde tu laptop, en este codelab usarás el Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Ícono para activar Cloud Shell

  1. Abre la consola de Google Cloud y haz clic en el ícono de Cloud Shell en la barra de herramientas en la parte superior derecha. También puedes abrir Cloud Shell presionando G y, luego, S en la consola o visitando shell.cloud.google.com.
  2. El aprovisionamiento y la conexión al entorno demorarán unos minutos. Cuando se complete, verás un mensaje de terminal listo para la entrada.

Terminal de Google Cloud Shell que muestra el entorno conectado

3. Crea la VM de Compute Engine

En esta sección, crearás una máquina virtual (VM) de Compute Engine (GCE) que ejecuta Rocky Linux 9 con discos persistentes dedicados para datos de la base de datos (/data1), copias de seguridad/observabilidad (/obs) y espacio de intercambio.

  1. Define las variables de entorno para el ID del proyecto, el nombre de la VM, la zona y la región.
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-tde-vm"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. Configura tu proyecto predeterminado.
    gcloud config set project $PROJECT
    
  3. Crea reglas de firewall de red para el tráfico SSH.
    gcloud compute firewall-rules create allow-ssh-alloydb-omni-tde \
        --project=$PROJECT \
        --direction=INGRESS \
        --action=allow \
        --rules=tcp:22 \
        --source-ranges="0.0.0.0/0"
    
  4. Como la VM se crea sin una dirección IP pública, configura un Cloud Router y una puerta de enlace de Cloud NAT para proporcionar acceso a Internet saliente para descargar paquetes RPM. Si ya existe un Cloud NAT en la región de tu proyecto, puedes continuar.
    gcloud compute routers create alloydb-omni-tde-router \
        --project=$PROJECT \
        --network=default \
        --region=$REGION 2>/dev/null || true
    
    gcloud compute routers nats create alloydb-omni-tde-nat \
        --project=$PROJECT \
        --router=alloydb-omni-tde-router \
        --region=$REGION \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips 2>/dev/null || true
    
    Nota: Si ya existe una puerta de enlace de Cloud NAT en tu región, GCP mostrará un mensaje que indica que NAT ya está configurado para todas las subredes. Puedes ignorar este error de forma segura y continuar.
  5. Crea discos persistentes adicionales para los datos de la base de datos, las copias de seguridad y el espacio de intercambio.
    gcloud compute disks create $INSTANCE_NAME-data \
        --project=$PROJECT --zone=$ZONE --size=50GB --type=pd-balanced
    
    gcloud compute disks create $INSTANCE_NAME-obs \
        --project=$PROJECT --zone=$ZONE --size=50GB --type=pd-balanced
    
    gcloud compute disks create $INSTANCE_NAME-swap \
        --project=$PROJECT --zone=$ZONE --size=10GB --type=pd-balanced
    
  6. Aprovisiona la instancia de VM de Rocky Linux 9 con los volúmenes de almacenamiento adjuntos.
    gcloud compute instances create $INSTANCE_NAME \
        --project=$PROJECT \
        --zone=$ZONE \
        --machine-type=n2-highmem-16 \
        --image-family=rocky-linux-9 \
        --image-project=rocky-linux-cloud \
        --boot-disk-size=30GB \
        --boot-disk-type=pd-balanced \
        --disk=name=$INSTANCE_NAME-data,device-name=db-data,mode=rw \
        --disk=name=$INSTANCE_NAME-obs,device-name=obs,mode=rw \
        --disk=name=$INSTANCE_NAME-swap,device-name=swap,mode=rw \
        --no-address
    

4. Prepara discos, ajuste del sistema y clave de File KMS

En esta sección, te conectarás a la VM, formatearás y activarás los volúmenes de almacenamiento persistente, configurarás el intercambio, ajustarás SELinux y generarás la clave de encriptación de claves (KEK) de TDE con File KMS.

  1. Establece una conexión SSH a la VM a través de Identity-Aware Proxy (IAP).
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. Formatea y activa el volumen de datos (/data1) y el volumen de observabilidad/copia de seguridad (/obs).
    sudo mkdir -p /data1 /obs
    
    sudo parted /dev/disk/by-id/google-db-data mklabel gpt
    sudo parted /dev/disk/by-id/google-db-data mkpart primary 0% 100%
    
    sudo parted /dev/disk/by-id/google-obs mklabel gpt
    sudo parted /dev/disk/by-id/google-obs mkpart primary 0% 100%
    
    sleep 3
    sudo mkfs.xfs -L data /dev/disk/by-id/google-db-data-part1
    sudo mkfs.xfs -L obs /dev/disk/by-id/google-obs-part1
    
    echo -e "LABEL=data\t/data1\txfs\tdefaults\t0 0" | sudo tee -a /etc/fstab
    echo -e "LABEL=obs\t/obs\txfs\tdefaults\t0 0" | sudo tee -a /etc/fstab
    
    sudo systemctl daemon-reload
    sudo mount /data1
    sudo mount /obs
    
  3. Crea y habilita el espacio de intercambio en el disco de intercambio dedicado.
    SWAP_UUID=$(sudo mkswap /dev/disk/by-id/google-swap 2>/dev/null | awk '$0 ~ "UUID" {print $NF}')
    echo -e "${SWAP_UUID}\tswap\tswap\tdefaults\t0 0" | sudo tee -a /etc/fstab
    sudo swapon -a
    
  4. Define variables de entorno para el directorio de la base de datos y el archivo de claves de File KMS.
    export PGDATA="/data1/18"
    export KMS_DIR="/data1/kms"
    export KEK_FILE="$KMS_DIR/tde_key"
    export ALLOYDB_OMNI_REPOSITORY_URL="<your-repository-url>"
    
  5. Crea directorios de almacenamiento para la base de datos y el almacenamiento de claves de File KMS.
    sudo mkdir -p $PGDATA
    sudo mkdir -p $KMS_DIR
    
  6. Genera una clave de encriptación de claves (KEK) de 32 bytes criptográficamente segura con OpenSSL para File KMS.
    sudo openssl rand -base64 32 | sudo tee $KEK_FILE
    sudo chmod 700 $KMS_DIR
    sudo chmod 600 $KEK_FILE
    
  7. Instala las utilidades de administración de SELinux necesarias.
    sudo dnf install -y policycoreutils-python-utils
    

5. Instala paquetes RPM de AlloyDB Omni

Configura repositorios de paquetes y, luego, instala el servidor de base de datos de AlloyDB Omni junto con las herramientas estándar de PostgreSQL 18.

Nota: Reemplaza $ALLOYDB_OMNI_REPOSITORY_URL por la URL del repositorio que recibiste por correo electrónico después de completar el formulario de registro de RPM de AlloyDB Omni. Para obtener más información, consulta la Descripción general de AlloyDB Omni en Linux.

  1. Crea el archivo de configuración del repositorio de YUM para AlloyDB Omni.
    sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF
    [alloydbomni]
    name=alloydbomni
    baseurl=$ALLOYDB_OMNI_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=1
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
  2. Actualiza la caché del repositorio de YUM y, luego, instala los paquetes RPM del servidor de AlloyDB Omni 18.
    sudo yum makecache
    sudo dnf install -y alloydbomni18
    
  3. Instala el repositorio oficial de RPM de PGDG de PostgreSQL y el paquete de cliente estándar de PostgreSQL 18 (psql).
    sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    sudo dnf install -y postgresql18
    
  4. Asigna la propiedad de /data1 y el directorio de claves de KMS al usuario postgres.
    sudo chown -R postgres:postgres /data1 $KMS_DIR
    sudo chmod 755 /data1 $PGDATA
    

6. Inicia un clúster habilitado para TDE

Configura las cuotas de recursos, abre los puertos de firewall del host y, luego, inicializa el clúster de AlloyDB Omni con la Encriptación de datos transparente habilitada a través de la clave de File KMS (POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE").

  1. Configura SELinux en modo permisivo y configura las reglas de firewall del host para PostgreSQL.
    sudo setenforce 0
    sudo firewall-cmd --add-port=5432/tcp --permanent
    sudo firewall-cmd --reload
    
  2. Configura los parámetros de anulación del servicio systemd para asignar límites de recursos de memoria y CPU.
    sudo mkdir -p /etc/systemd/system/alloydbomni18.service.d
    sudo tee /etc/systemd/system/alloydbomni18.service.d/override.conf << EOF
    [Service]
    CPUQuota=90%
    MemoryMax=80%
    EOF
    sudo chown root:root /etc/systemd/system/alloydbomni18.service.d/override.conf
    sudo chmod 644 /etc/systemd/system/alloydbomni18.service.d/override.conf
    sudo systemctl daemon-reload
    
  3. Configura las variables de entorno del administrador y, luego, inicializa el clúster de base de datos de TDE con alloydbomni18-setup initdb.
    export PGPASSWORD="YourStrongPassword123!"
    export POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE"
    
    sudo POSTGRES_INITDB_ARGS="$POSTGRES_INITDB_ARGS" PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \
        /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  4. Configura el puerto del servidor 5432 en postgresql.conf.
    sudo sed -i "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5432/" $PGDATA/postgresql.conf
    
  5. Prepara los catálogos y las extensiones del sistema con alloydbomni18-setup preparedb.
    sudo PGPORT=5432 PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \
        /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  6. Habilita y ejecuta el servicio systemd alloydbomni18.
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    Verifica que el resultado muestre Active: active (running).

7. Operaciones de la base de datos y verificación de la encriptación de disco de TDE

Conéctate a la base de datos de TDE, inserta registros de muestra, ejecuta un CHECKPOINT para forzar la escritura de datos en el disco y ejecuta análisis directos del disco (grep) para demostrar la encriptación de datos en reposo.

  1. Conéctate a la base de datos alloydbadmin con psql.
    PGPASSWORD="YourStrongPassword123!" /usr/lib/postgresql/18/bin/psql -h localhost -p 5432 -U postgres -d alloydbadmin
    
  2. Crea una tabla de prueba, inserta una cadena confidencial y activa un punto de control para escribir búferes no sincronizados en el almacenamiento.
    CREATE TABLE customer_credentials (
        id SERIAL PRIMARY KEY,
        username TEXT,
        secret_passcode TEXT
    );
    
    INSERT INTO customer_credentials (username, secret_passcode)
    VALUES ('alice_user', 'UNENCRYPTED_DEMO_SECRET_98765');
    
    CHECKPOINT;
    
  3. Consulta la vista interna de estadísticas de TDE de AlloyDB pgsnap.g$tde_stats para verificar el estado de encriptación activo, la ubicación de KEK y las métricas de bloque.
    SELECT is_tde_enabled, tde_kek_url, tde_data_blocks_encrypted, tde_wal_blocks_encrypted
    FROM pgsnap.g$tde_stats;
    
    Ejemplo de resultado que confirma la TDE activa (is_tde_enabled = t), la ruta de acceso del archivo KEK y los contadores de bloques encriptados:
     is_tde_enabled |        tde_kek_url        | tde_data_blocks_encrypted | tde_wal_blocks_encrypted 
    ----------------+---------------------------+---------------------------+--------------------------
     t              | file:///data1/kms/tde_key |                      2023 |                     2717
    (1 row)
    
  4. Sal de psql.
    \q
    
  5. Busca archivos de almacenamiento de base de datos sin procesar en /data1/18/base/ para la cadena de contraseña y verificar la protección en el disco de TDE.
    sudo grep -a -rn "UNENCRYPTED_DEMO_SECRET_98765" /data1/18/base/
    

Conclusión clave de la verificación:

  • En una instancia de base de datos no TDE, ejecutar grep en archivos de relación de tablas muestra la cadena de texto sin formato en el disco.
  • En una instancia de base de datos habilitada para TDE , grep muestra cero coincidencias porque todos los archivos de datos, los índices, los registros de escritura anticipada (WAL) y los datos temporales están completamente encriptados con cifrados de bloque AES en reposo.

8. Limpieza

Después de completar los ejercicios, limpia los recursos para evitar cargos de procesamiento no deseados.

  1. Desconéctate de tu sesión SSH de la VM.
    exit
    
  2. Quita la máquina virtual de GCE y los discos persistentes adjuntos.
    gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet
    gcloud compute disks delete $INSTANCE_NAME-data $INSTANCE_NAME-obs $INSTANCE_NAME-swap --zone=$ZONE --project=$PROJECT --quiet
    
  3. Borra las reglas de firewall y los recursos de la puerta de enlace de Cloud NAT.
    gcloud compute firewall-rules delete allow-ssh-alloydb-omni-tde --project=$PROJECT --quiet
    gcloud compute routers nats delete alloydb-omni-tde-nat --router=alloydb-omni-tde-router --region=$REGION --project=$PROJECT --quiet
    gcloud compute routers delete alloydb-omni-tde-router --region=$REGION --project=$PROJECT --quiet
    

9. Felicitaciones

¡Felicitaciones! Completaste correctamente el codelab de TDE en AlloyDB Omni RPM.

Temas abordados

  • Cómo aprovisionar discos de almacenamiento (/data1, /obs), configurar el intercambio y formatear sistemas de archivos XFS
  • Cómo generar y administrar claves de encriptación de claves con File KMS
  • Cómo inicializar e iniciar un clúster de AlloyDB Omni habilitado para TDE con herramientas de RPM
  • Cómo verificar la encriptación de datos en reposo con la inspección directa de discos sin procesar (grep)

Para obtener más información, consulta la documentación de AlloyDB Omni.

10. Encuesta

¿Cómo usarás este instructivo?

Solo lo leeré Lo leeré y completaré los ejercicios