El operador de Kubernetes de AlloyDB Omni automatiza el ciclo de vida de los clústeres de encriptación de datos transparente (TDE) con el recurso personalizado TdeConfig. Este recurso almacena los detalles de conexión del servicio de administración de claves (KMS), lo que permite que el operador inserte de forma segura las credenciales requeridas en los Pods de la base de datos.
Antes de comenzar
- 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.
Opcional: Para implementar un clúster habilitado para TDE en OpenShift, otorga la restricción de contexto de seguridad (SCC)
hostmount-anyuida la cuenta de servicioDBClusterque ejecuta el clúster de la base de datos.oc adm policy add-scc-to-user hostmount-anyuid -z DBCLUSTER_NAME-sa -n DBCLUSTER_NAMESPACE
Reemplaza DBCLUSTER_NAME por el nombre del
DBClustery DBCLUSTER_NAMESPACE por el espacio de nombres en el que deseas crear el recursoDBCluster.
Configura el acceso a la bóveda
Crea un recurso secreto que contenga la ruta de acceso a la KEK y las credenciales de autenticación.
apiVersion: v1
kind: ConfigMap
metadata:
name: CONFIG_MAP_NAME
data:
kek_url: "KEK_URL"
token_path: "JWT_TOKEN_PATH"
Reemplaza lo siguiente:
CONFIG_MAP_NAME: Es el nombre del mapa de configuración. Los valores definidos enkek_urlytoken_pathse usan en la definición del recursoTdeConfig.KEK_URL: Es la URL completamente calificada de la KEK en HashiCorp Vault. Usavaultcomo el protocolo para especificar HashiCorp Vault como el proveedor de KMS; por ejemplo,vault://vault.default.svc:8200/v1/secrets/data/alloydb_kek.JWT_TOKEN_PATH: Es la ruta de acceso al token JWT en el nodo. Por ejemplo,/tmp/token. La ruta de acceso del token JWT debe ser coherente en todos los nodos del clúster.
Crea un secreto de TLS
Para crear un secreto de TLS que almacene tus certificados, ejecuta los siguientes comandos:
kubectl create secret tls VAULT_SECRET_NAME \
--cert=vault.crt \
--key=vault.key
kubectl patch secret VAULT_SECRET_NAME \
-p '{"data":{"ca.crt":"'$(base64 -w 0 vault.crt)'"}}' \
--type=merge
Reemplaza VAULT_SECRET_NAME por un nombre para el secreto de TLS.
Usarás este nombre secreto cuando crees el recurso personalizado TdeConfig.
Crea el CRD de TdeConfig
Crea un recurso TdeConfig que defina cómo AlloyDB Omni se comunica con la bóveda para recuperar la KEK. El único tipo de autenticación admitido es jwt. Asegúrate de crear el recurso TdeConfig en el mismo espacio de nombres que el recurso DbCluster.
Asegúrate de que el usuario postgres pueda acceder a la ruta de acceso a tu token JWT y de que se pueda acceder a tu instancia de Vault a través de la red.
Para crear el recurso TdeConfig, sigue estos pasos:
Crea y aplica un manifiesto para el recurso TdeConfig.
apiVersion: alloydbomni.dbadmin.goog/v1
kind: TdeConfig
metadata:
name: TDE_CONFIG_NAME
spec:
kekUrlRef:
name: CONFIG_MAP_NAME
key: kek_url
kmsProvider:
vault:
authType: "jwt"
authMount: "JWT_AUTH_MOUNT_PATH"
jwt:
pathRef:
name: "CONFIG_MAP_NAME"
key: "token_path"
role: "VAULT_ROLE"
tls:
certSecret:
name: "VAULT_SECRET_NAME"
Reemplaza lo siguiente:
TDE_CONFIG_NAME: Es el nombre del recursoTdeConfig.JWT_AUTH_MOUNT_PATH: Es la ruta de acceso en la que se activa el motor de autenticación dentro de HashiCorp Vault, según lo define tu configuración. Por ejemplo,auth/kms- (Opcional)
VAULT_ROLE: Es el rol del cliente definido en la configuración de tu bóveda. El rol del cliente valida el JWT y refleja los derechos de acceso y la identidad específicos que se le otorgan al rol dentro de HashiCorp Vault. VAULT_SECRET_NAME: Es el nombre del secreto que contiene los certificados para la conexión de la bóveda. Por ejemplo:vault-secret
Implementa el DBCluster
Crea y aplica un manifiesto para crear un recurso
DBClusterque haga referencia a tu recursoTdeConfig. Para obtener más información sobre cómo crear un clúster de base de datos, consulta Crea un clúster de base de datos.apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: "DBCLUSTER_NAME" spec: databaseVersion: "18.3.0" features: transparentDataEncryption: tdeConfigRef: name: "TDE_CONFIG_NAME" [...]Reemplaza
TDE_CONFIG_NAMEpor el nombre de tu recursoTdeConfigyDBCLUSTER_NAMEpor el nombre delDBClusterque deseas crear.Opcional: Si implementas
DBClusteren un entorno de OpenShift, debes anotar el recursoDBClustercon la anotaciónhostmount-anyuid.kubectl annotate dbclusters.alloydbomni.dbadmin.goog `DBCLUSTER_NAME` -n `DBCLUSTER_NAMESPACE` openshift.io/scc=anyuidReemplaza
DBCLUSTER_NAMEpor el nombre de tu recursoDBClusteryDBCLUSTER_NAMESPACEpor el espacio de nombres en el que deseas crear el recursoDBCluster.
Para habilitar la TDE para la caché de columnas que se vuelca en SSD, aplica el siguiente parche a tu DBCluster:
kubectl patch dbcluster `DBCLUSTER_NAME` \
-n `DBCLUSTER_NAMESPACE` \
-p '{"spec":{"primarySpec":{"parameters": {"google_columnar_engine.enable_tde_for_storage_cache": "on"}}}}' \
--type=merge
Referencias de métricas del TDE
Puedes ver todas las métricas del 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 que se desencriptaron. | 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 |
Es el tiempo total dedicado a la desencriptación de bloques de datos. | No aplicable | microsegundos | contador |
alloydb_omni_database_tde_data_encryption_time_us_total |
Tiempo total dedicado a la encriptación de bloques de datos. | No aplicable | microsegundos | contador |
alloydb_omni_database_tde_enabled |
Es el estado de habilitación de la TDE. | No aplicable | indicador | |
alloydb_omni_database_tde_kek_info |
Es la información de la KEK de la TDE. |
|
indicador | |
alloydb_omni_database_tde_temp_blocks_decrypted_count_total |
Cantidad de bloques temporales que se desencriptaron. | 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 |
Es el tiempo total dedicado a la desencriptación de bloques temporales. | No aplicable | microsegundos | contador |
alloydb_omni_database_tde_temp_encryption_time_us_total |
Es el tiempo total dedicado a la encriptación de bloques temporales. | No aplicable | microsegundos | contador |
alloydb_omni_database_tde_wal_blocks_decrypted_count_total |
Cantidad de bloques de WAL que se desencriptaron. | 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 |
Es el tiempo total dedicado a la desencriptación de bloques de WAL. | No aplicable | microsegundos | contador |
alloydb_omni_database_tde_wal_encryption_time_us_total |
Es el tiempo total dedicado a la encriptación de bloques de WAL. | No aplicable | microsegundos | contador |
tde_chill_cache_blocks_encrypted |
Cantidad de bloques de caché de Chill encriptados. | No aplicable | contador | |
tde_chill_cache_blocks_decrypted |
Cantidad de bloques de caché de Chill que se desencriptaron. | No aplicable | contador | |
tde_chill_cache_blocks_total_encryption_time_us |
Tiempo total dedicado a la encriptación de bloques de caché inactiva. | No aplicable | microsegundos | contador |
tde_chill_cache_blocks_total_decryption_time_us |
Tiempo total dedicado a la desencriptación del bloque de caché de Chill. | No aplicable | microsegundos | contador |
tde_ce_cache_ssd_blocks_encrypted |
Es la cantidad de bloques de caché de columnas que se volcaron en el almacenamiento SSD y que estaban encriptados. | No aplicable | contador | |
tde_ce_cache_ssd_blocks_decrypted |
Cantidad de bloques de caché de columnas volcados en el almacenamiento SSD que se desencriptaron. | No aplicable | contador | |
tde_ce_cache_ssd_blocks_total_encryption_time_us |
Tiempo total dedicado a encriptar los bloques de caché de columnas volcados al almacenamiento SSD. | No aplicable | microsegundos | contador |
tde_ce_cache_ssd_blocks_total_decryption_time_us |
Tiempo total dedicado a descifrar los bloques de caché de columnas que se volcaron al almacenamiento SSD. | No aplicable | microsegundos | contador |