Puedes proteger tus datos en reposo y la información sensible habilitando la encriptación de datos transparente (TDE) en AlloyDB Omni. En este documento, se describe cómo crear un clúster habilitado para TDE. Para ello, se proporcionan las variables de entorno de Vault obligatorias y la marca --tde-kek-url en la variable de entorno POSTGRES_INITDB_ARGS durante la inicialización de la base de datos.
Antes de comenzar
- Lee Planifica tu instalación de AlloyDB Omni.
- Cuando planifiques tu implementación de AlloyDB Omni con TDE habilitado, asegúrate de tener en cuenta el uso adicional de CPU en función de tu carga de trabajo y volumen de datos previstos. La encriptación y la desencriptación son operaciones que requieren mucha capacidad de procesamiento.
- Configura el motor de secretos KV-V2 de HashiCorp Vault para asegurarte de que la ruta de acceso de la clave de encriptación de claves (KEK) y el token web JSON (JWT) estén disponibles.
- Verifica que AlloyDB Omni tenga permiso para leer el archivo del token web JSON (JWT), que es el token de autenticación.
Crea el clúster
Para crear un clúster habilitado para TDE, debes pasar la configuración necesaria de Key Management Service (KMS) y las credenciales de autenticación durante la inicialización de la base de datos. El único tipo de autenticación admitido es jwt.
Instala AlloyDB Omni con RPM para preparar tu entorno y el paquete RPM de AlloyDB Omni.
Inicializa la base de datos.
KMS de HashiCorp Vault
Usa este enfoque para cargas de trabajo de producción.
Ejecuta el siguiente comando para inicializar la base de datos con TDE habilitado:
sudo PGPASSWORD=POSTGRES_PASSWORD \ PGDATA=DATA_DIR \ VAULT_AUTH_TYPE=jwt \ VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \ VAULT_JWT_PATH=JWT_FILE_PATH \ VAULT_ROLE=VAULT_ROLE \ VAULT_CERT_PATH=VAULT_CERT_PATH \ POSTGRES_INITDB_ARGS="--tde-kek-url=KEK_URL" \ /usr/lib/postgresql/18/bin/alloydbomniproduct_major_version_numeric-setup initdb
Reemplaza lo siguiente:
POSTGRES_PASSWORD: Es la contraseña del usuario de la base de datos.DATA_DIR: Es el directorio local que se activará como el volumen de datos para AlloyDB Omni, por ejemplo,/local/data.JWT_AUTH_ENGINE_MOUNT: Es la ruta de acceso en la que se activa el motor de autenticación de HashiCorp Vault, por ejemplo,/auth/jwt.JWT_FILE_PATH: Es la ruta de acceso en la que se almacena el JWT de Vault en tus nodos, por ejemplo,tde-tls/jwt-token.- (Opcional)
VAULT_ROLE: Es el rol de cliente definido en la configuración de Vault que permite que HashiCorp Vault verifique la autenticidad del token JWT. VAULT_CERT_PATH: Es la ruta de acceso en la que se encuentran los certificados para la conexión de Vault en tus nodos, por ejemplo,/tde-tls. Si no se configura, se usan los certificados en el almacén de confianza predeterminado.KEK_URL: Es la URL completamente calificada de la KEK en HashiCorp Vault. Usavaultcomo protocolo para especificar HashiCorp Vault como proveedor de KMS, por ejemplo,vault://127.0.0.1:8200/v1/secrets/data/alloydb_kek.
Para crear un archivo de anulación para
alloydbomni18.serviceen/etc/systemd/system/alloydbomni18.service.d/override.conf, agrega lo siguiente al archivooverride.conf:[Service] Environment="VAULT_AUTH_TYPE=VAULT_AUTH_TYPE" Environment="VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT" Environment="VAULT_JWT_PATH=JWT_FILE_PATH" Environment="VAULT_ROLE=VAULT_ROLE" Environment="VAULT_CERT_PATH=VAULT_CERT_PATH"
Reemplaza lo siguiente:
VAULT_AUTH_TYPE: Es el tipo de autenticación que se usará para la conexión de Vault. Solo se admitejwt.JWT_AUTH_ENGINE_MOUNT: Es la ruta de acceso en la que se activa el motor de autenticación de HashiCorp Vault, por ejemplo,/auth/jwt.JWT_FILE_PATH: Es la ruta de acceso en la que se almacena el JWT de Vault en tus nodos, por ejemplo,tde-tls/jwt-token.- (Opcional)
VAULT_ROLE: Es el rol de cliente definido en la configuración de Vault que permite que HashiCorp Vault verifique la autenticidad del token JWT. VAULT_CERT_PATH: Es la ruta de acceso en la que se encuentran los certificados para la conexión de Vault en tus nodos, por ejemplo,/tde-tls. Si no se configura, se usan los certificados en el almacén de confianza predeterminado.
Para aplicar los cambios, vuelve a cargar el daemon de systemd.
sudo systemctl daemon-reload
KMS basado en archivos
Usa este enfoque solo para realizar pruebas.
Para probar TDE de forma local con una clave basada en archivos, primero debes generar una KEK de 32 bytes en tu máquina.
Crea el directorio, genera la clave y establece los permisos adecuados.
KEK_DIR=KEK_DIR mkdir -p $KEK_DIR sudo chown 999:999 $KEK_DIR openssl rand -base64 32 | sudo tee $KEK_DIR/key sudo chmod 0755 $KEK_DIR/key
Inicializa la base de datos pasando el URI del archivo local como tu URL de KEK.
sudo PGPASSWORD=POSTGRES_PASSWORD \ PGDATA=DATA_DIR \ POSTGRES_INITDB_ARGS="--tde-kek-url=file:///$KEK_DIR/key" \ /usr/lib/postgresql/18/bin/alloydbomniproduct_major_version_numeric-setup initdb
Reemplaza lo siguiente:
POSTGRES_PASSWORD: Es la contraseña del usuario de la base de datos.DATA_DIR: Es el directorio local que se activará como el volumen de datos para AlloyDB Omni, por ejemplo,/local/data.KEK_DIR: Es el directorio en el que se almacena la KEK local basada en archivos, por ejemplo,/tmp/alloydb/kms.
Después de inicializar la base de datos, sigue las instrucciones que se indican en Instala AlloyDB Omni con RPM para preparar la base de datos, configurar el host y iniciar el servicio
systemd.Para habilitar TDE para los datos de caché del motor de columnas que se derraman en el almacenamiento SSD, conéctate a tu instancia de base de datos y ejecuta la siguiente consulta:
ALTER SYSTEM SET google_columnar_engine.enable_tde_for_storage_cache = 'on';Reinicia el servidor de la base de datos para que los cambios surtan efecto.
Referencias de métricas de TDE
Puedes ver todas las métricas de TDE en el agente de supervisión de AlloyDB Omni. En la siguiente tabla, se describe cada métrica.
| Nombre | Descripción | Etiqueta | Unidad | Tipo |
|---|---|---|---|---|
alloydb_omni_database_tde_data_blocks_decrypted_count_total |
Cantidad de bloques de datos desencriptados. | No aplicable | contador | |
alloydb_omni_database_tde_data_blocks_encrypted_count_total |
Cantidad de bloques de datos encriptados. | No aplicable | contador | |
alloydb_omni_database_tde_data_decryption_time_us_total |
Tiempo total invertido en la desencriptación de bloques de datos. | No aplicable | microsegundos | contador |
alloydb_omni_database_tde_data_encryption_time_us_total |
Tiempo total invertido en la encriptación de bloques de datos. | No aplicable | microsegundos | contador |
alloydb_omni_database_tde_enabled |
Estado habilitado de TDE. | No aplicable | indicador | |
alloydb_omni_database_tde_kek_info |
Información de KEK de TDE. |
|
indicador | |
alloydb_omni_database_tde_temp_blocks_decrypted_count_total |
Cantidad de bloques temporales desencriptados. | No aplicable | contador | |
alloydb_omni_database_tde_temp_blocks_encrypted_count_total |
Cantidad de bloques temporales encriptados. | No aplicable | contador | |
alloydb_omni_database_tde_temp_decryption_time_us_total |
Tiempo total invertido en la desencriptación de bloques temporales. | No aplicable | microsegundos | contador |
alloydb_omni_database_tde_temp_encryption_time_us_total |
Tiempo total invertido en la encriptación de bloques temporales. | No aplicable | microsegundos | contador |
alloydb_omni_database_tde_wal_blocks_decrypted_count_total |
Cantidad de bloques de WAL desencriptados. | No aplicable | contador | |
alloydb_omni_database_tde_wal_blocks_encrypted_count_total |
Cantidad de bloques de WAL encriptados. | No aplicable | contador | |
alloydb_omni_database_tde_wal_decryption_time_us_total |
Tiempo total invertido en la desencriptación de bloques de WAL. | No aplicable | microsegundos | contador |
alloydb_omni_database_tde_wal_encryption_time_us_total |
Tiempo total invertido en la encriptación de bloques de WAL. | No aplicable | microsegundos | contador |
tde_chill_cache_blocks_encrypted |
Cantidad de bloques de caché inactiva encriptados. | No aplicable | contador | |
tde_chill_cache_blocks_decrypted |
Cantidad de bloques de caché inactiva desencriptados. | No aplicable | contador | |
tde_chill_cache_blocks_total_encryption_time_us |
Tiempo total invertido en la encriptación de bloques de caché inactiva. | No aplicable | microsegundos | contador |
tde_chill_cache_blocks_total_decryption_time_us |
Tiempo total invertido en la desencriptación de bloques de caché inactiva. | No aplicable | microsegundos | contador |
tde_ce_cache_ssd_blocks_encrypted |
Cantidad de bloques de caché columnar derramados en el almacenamiento SSD que se encriptaron. | No aplicable | contador | |
tde_ce_cache_ssd_blocks_decrypted |
Cantidad de bloques de caché columnar derramados en el almacenamiento SSD que se desencriptaron. | No aplicable | contador | |
tde_ce_cache_ssd_blocks_total_encryption_time_us |
Tiempo total invertido en la encriptación de bloques de caché columnar derramados en el almacenamiento SSD. | No aplicable | microsegundos | contador |
tde_ce_cache_ssd_blocks_total_decryption_time_us |
Tiempo total invertido en la desencriptación de bloques de caché columnar derramados en el almacenamiento SSD. | No aplicable | microsegundos | contador |