Crea un clúster habilitado para TDE

Selecciona una versión de la documentación:

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

  • Opcional: Para implementar un clúster habilitado para TDE en OpenShift, otorga la restricción de contexto de seguridad (SCC) hostmount-anyuid a la cuenta de servicio DBCluster que 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 DBCluster y DBCLUSTER_NAMESPACE por el espacio de nombres en el que deseas crear el recurso DBCluster.

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 en kek_url y token_path se usan en la definición del recurso TdeConfig.
  • KEK_URL: Es la URL completamente calificada de la KEK en HashiCorp Vault. Usa vault como 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 recurso TdeConfig.
  • 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

  1. Crea y aplica un manifiesto para crear un recurso DBCluster que haga referencia a tu recurso TdeConfig. 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_NAME por el nombre de tu recurso TdeConfig y DBCLUSTER_NAME por el nombre del DBCluster que deseas crear.

  2. Opcional: Si implementas DBCluster en un entorno de OpenShift, debes anotar el recurso DBCluster con la anotación hostmount-anyuid.

    kubectl annotate dbclusters.alloydbomni.dbadmin.goog `DBCLUSTER_NAME` -n `DBCLUSTER_NAMESPACE` openshift.io/scc=anyuid
    

    Reemplaza DBCLUSTER_NAME por el nombre de tu recurso DBCluster y DBCLUSTER_NAMESPACE por el espacio de nombres en el que deseas crear el recurso DBCluster.

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.
  • kek_version: Es la versión de la KEK
    que se usa para la protección de claves.
  • kek_url: Ruta de acceso completamente calificada
    a la KEK en KMS
  • kek_creation_timestamp:
    Fecha y hora de creación de la versión de KEK en uso.
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