TDE-fähigen Cluster erstellen

Wählen Sie eine Dokumentationsversion aus:

Der AlloyDB Omni Kubernetes-Operator automatisiert den Lebenszyklus von Clustern mit transparenter Datenverschlüsselung (Transparent Data Encryption, TDE) mithilfe der benutzerdefinierten Ressource TdeConfig. Diese Ressource speichert die Details der Key Management Service-Verbindung (KMS) für HashiCorp Vault oder Thales CipherTrust Manager, sodass der Operator die erforderlichen Anmeldedaten sicher in Datenbank-Pods einfügen kann.

Hinweis

HashiCorp Vault KMS

  • Konfigurieren Sie die KV-V2-Secrets-Engine von HashiCorp Vault, um sicherzustellen, dass der Pfad des Schlüsselverschlüsselungsschlüssels (Key Encryption Key, KEK) und das JSON-Webtoken (JWT) verfügbar sind.
  • Prüfen Sie, ob AlloyDB Omni die Berechtigung hat, die JWT-Datei (JSON Web Token) zu lesen, die das Authentifizierungstoken ist.
  • Optional: Wenn Sie einen TDE-fähigen Cluster in OpenShift bereitstellen möchten, gewähren Sie dem DBCluster-Dienstkonto, auf dem der Datenbankcluster ausgeführt wird, die Sicherheitskontexteinschränkung (Security Context Constraint, SCC) hostmount-anyuid.

    oc adm policy add-scc-to-user hostmount-anyuid -z DBCLUSTER_NAME-sa -n DBCLUSTER_NAMESPACE

    Ersetzen Sie DBCLUSTER_NAME durch den Namen des DBCluster und DBCLUSTER_NAMESPACE durch den Namespace, in dem Sie die DBCluster-Ressource erstellen möchten.

Thales CipherTrust KMS

  • Konfigurieren Sie Thales CipherTrust Manager so, dass Ihr Secret Key Encryption Key (KEK) erstellt und exportiert werden kann.
  • Prüfen Sie, ob Sie ein CipherTrust Manager-Nutzerkonto (username und password) mit der Berechtigung zur Authentifizierung und zum Exportieren des KEK-Secrets haben.
  • Optional: Wenn Sie einen TDE-fähigen Cluster in OpenShift bereitstellen möchten, gewähren Sie dem DBCluster-Dienstkonto, auf dem der Datenbankcluster ausgeführt wird, die Sicherheitskontexteinschränkung (Security Context Constraint, SCC) hostmount-anyuid.

    oc adm policy add-scc-to-user hostmount-anyuid -z DBCLUSTER_NAME-sa -n DBCLUSTER_NAMESPACE

    Ersetzen Sie DBCLUSTER_NAME durch den Namen des DBCluster und DBCLUSTER_NAMESPACE durch den Namespace, in dem Sie die DBCluster-Ressource erstellen möchten.

KMS-Zugriff konfigurieren

Erstellen Sie die Kubernetes-Ressourcen ConfigMap und Secret, die den KEK-Pfad und die KMS-Authentifizierungsdaten enthalten. Erstellen Sie diese Ressourcen im selben Namespace, in dem Sie den DBCluster bereitstellen möchten.

HashiCorp Vault KMS

Erstellen Sie eine ConfigMap-Ressource, die die KEK-URL und den Hostpfad zu Ihrem JWT-Token enthält:

apiVersion: v1
kind: ConfigMap
metadata:
  name: CONFIG_MAP_NAME
data:
  kek_url: "KEK_URL"
  token_path: "JWT_TOKEN_PATH"

Ersetzen Sie Folgendes:

  • CONFIG_MAP_NAME: Name der ConfigMap. Die in kek_url und token_path definierten Werte werden in der TdeConfig-Ressourcendefinition verwendet.
  • KEK_URL: die vollständig qualifizierte URL zum KEK in HashiCorp Vault. Verwenden Sie vault als Protokoll, um HashiCorp Vault als KMS-Anbieter anzugeben, z. B. vault://vault.default.svc:8200/v1/secret/data/alloydb_kek.
  • JWT_TOKEN_PATH: Pfad zum JWT-Token auf dem Knoten, z. B. /tmp/token. Der Zugriffspfad für das JWT-Token muss auf allen Knoten im Cluster gleich sein.

Thales CipherTrust KMS

Erstellen Sie eine ConfigMap-Ressource, die die KEK-URL enthält, und eine Secret-Ressource, die die Authentifizierungsanmeldedaten für Thales CipherTrust Manager enthält:

apiVersion: v1
kind: ConfigMap
metadata:
  name: CONFIG_MAP_NAME
data:
  kek_url: "KEK_URL"
---
apiVersion: v1
kind: Secret
metadata:
  name: CREDENTIALS_SECRET_NAME
type: Opaque
stringData:
  username: "CIPHERTRUST_USERNAME"
  password: "CIPHERTRUST_PASSWORD"

Ersetzen Sie Folgendes:

  • CONFIG_MAP_NAME: Name der ConfigMap. Der in kek_url definierte Wert wird in der TdeConfig-Ressourcendefinition verwendet.
  • KEK_URL: die vollständig qualifizierte URL zum KEK in Thales CipherTrust Manager. Verwenden Sie ciphertrust als Protokoll, um Thales CipherTrust Manager als KMS-Anbieter anzugeben, z. B. ciphertrust://ciphertrust.default.svc:443/api/v1/vault/secrets/alloydb_kek.
  • CREDENTIALS_SECRET_NAME: Name des Kubernetes-Secrets, in dem die Anmeldedaten für CipherTrust Manager gespeichert sind, z. B. ciphertrust-credentials.
  • CIPHERTRUST_USERNAME: der Nutzername, der für die Authentifizierung bei Thales CipherTrust Manager verwendet wird.
  • CIPHERTRUST_PASSWORD: das Passwort für den Thales CipherTrust Manager-Nutzer.

TLS-Secret erstellen

Führen Sie die folgenden Befehle aus, um ein TLS-Secret zu erstellen, in dem die Zertifikate zum Überprüfen der KMS-Serververbindung (HashiCorp Vault oder Thales CipherTrust Manager) gespeichert werden:

kubectl create secret tls TLS_SECRET_NAME \
    --cert=CLIENT_CERT_FILE \
    --key=CLIENT_KEY_FILE

kubectl patch secret TLS_SECRET_NAME \
    -p '{"data":{"ca.crt":"'$(base64 -w 0 CA_CERT_FILE)'"}}' \
    --type=merge

Ersetzen Sie Folgendes:

  • TLS_SECRET_NAME: ein Name für das TLS-Secret, z. B. vault-secret oder ciphertrust-tls-secret. Sie verwenden diesen Secret-Namen, wenn Sie die benutzerdefinierte Ressource TdeConfig erstellen.
  • CLIENT_CERT_FILE: der Pfad zu Ihrer TLS-Clientzertifikatsdatei, die als tls.crt im Secret gespeichert ist.
  • CLIENT_KEY_FILE: der Pfad zu Ihrer privaten TLS-Client-Schlüsseldatei, die als tls.key im Secret gespeichert ist.
  • CA_CERT_FILE: der Pfad zur Zertifikatsdatei der Zertifizierungsstelle (Certificate Authority, CA), die zum Überprüfen des KMS-Serverzertifikats verwendet wird und als ca.crt im Secret gespeichert ist.

Benutzerdefinierte Ressource TdeConfig erstellen

Erstellen Sie eine TdeConfig-Ressource, die definiert, wie AlloyDB Omni mit Ihrem externen KMS-Anbieter kommuniziert, um den KEK abzurufen. Erstellen Sie die TdeConfig-Ressource im selben Namespace wie die DBCluster-Ressource.

Prüfen Sie, ob Ihre KMS-Instanz über das Netzwerk von Ihren Datenbank-Pods aus erreichbar ist.

HashiCorp Vault KMS

Prüfen Sie, ob der Pfad zu Ihrem JWT-Token auf dem Hostknoten für den postgres-Nutzer zugänglich ist. Erstellen und wenden Sie ein Manifest für die TdeConfig-Ressource an:

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: "TLS_SECRET_NAME"

Ersetzen Sie Folgendes:

  • TDE_CONFIG_NAME: Name der TdeConfig-Ressource.
  • CONFIG_MAP_NAME: Name der ConfigMap, die im vorherigen Schritt erstellt wurde.
  • JWT_AUTH_MOUNT_PATH: Pfad, in dem die Authentifizierungs-Engine in HashiCorp Vault eingebunden ist, wie in Ihrer Konfiguration definiert, z. B. auth/kms.
  • Optional: VAULT_ROLE: die in Ihrer Vault-Einrichtung definierte Clientrolle. Die Clientrolle validiert das JWT und spiegelt die spezifischen Zugriffsrechte und die Identität wider, die der Rolle in HashiCorp Vault gewährt werden.
  • TLS_SECRET_NAME: Name des Secrets, das die TLS-Zertifikate für die Vault-Verbindung enthält, z. B. vault-secret.

Thales CipherTrust KMS

Erstellen und wenden Sie ein Manifest für die TdeConfig-Ressource mit dem ciphertrust-Anbieter an:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: TdeConfig
metadata:
  name: TDE_CONFIG_NAME
spec:
  kekUrlRef:
    name: CONFIG_MAP_NAME
    key: kek_url
  kmsProvider:
    ciphertrust:
      authType: "password"
      credentialsSecretRef:
        name: "CREDENTIALS_SECRET_NAME"
  tls:
    certSecret:
      name: "TLS_SECRET_NAME"

Ersetzen Sie Folgendes:

  • TDE_CONFIG_NAME: Name der TdeConfig-Ressource.
  • CONFIG_MAP_NAME: Name der ConfigMap, die kek_url enthält.
  • CREDENTIALS_SECRET_NAME: Name des Kubernetes-Secrets, das die Schlüssel username und password für CipherTrust Manager enthält, z. B. ciphertrust-credentials.
  • TLS_SECRET_NAME: Name des Secrets, das die TLS-Zertifikate für die CipherTrust Manager-Verbindung enthält, z. B. ciphertrust-tls-secret.

DBCluster bereitstellen

  1. Erstellen und wenden Sie ein Manifest an, um eine DBCluster-Ressource zu erstellen, die auf Ihre TdeConfig-Ressource verweist. Weitere Informationen zum Erstellen eines Datenbank clusters finden Sie unter Datenbankcluster erstellen.

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: "DBCLUSTER_NAME"
    spec:
      databaseVersion: "18.4.0"
      primarySpec:
        features:
          transparentDataEncryption:
            tdeConfigRef:
              name: "TDE_CONFIG_NAME"
    
    [...]
    

    Ersetzen Sie TDE_CONFIG_NAME durch den Namen Ihrer TdeConfig-Ressource und DBCLUSTER_NAME durch den Namen des DBCluster, den Sie erstellen möchten.

  2. Optional: Wenn Sie DBCluster in einer OpenShift-Umgebung bereitstellen, müssen Sie die DBCluster-Ressource mit der Annotation hostmount-anyuid versehen.

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

    Ersetzen Sie DBCLUSTER_NAME durch den Namen Ihrer DBCluster Ressource und DBCLUSTER_NAMESPACE durch den Namespace , in dem Sie die DBCluster Ressource erstellen möchten.

Wenn Sie TDE für den spaltenbasierten Cache aktivieren möchten, der auf SSD ausgelagert wird, patchen Sie Ihren DBCluster so:

kubectl patch dbcluster DBCLUSTER_NAME \
  -n DBCLUSTER_NAMESPACE \
  -p '{"spec":{"primarySpec":{"parameters": {"google_columnar_engine.enable_tde_for_storage_cache": "on"}}}}' \
  --type=merge

Referenz zu TDE-Messwerten

Sie können alle TDE-Messwerte im Monitoring-Agent von AlloyDB Omni ansehen. In der folgenden Tabelle werden die einzelnen Messwerte beschrieben.

Name Beschreibung Label Einheit Typ
alloydb_omni_database_tde_data_blocks_decrypted_count_total Anzahl der entschlüsselten Datenblöcke. Nicht zutreffend Zähler
alloydb_omni_database_tde_data_blocks_encrypted_count_total Anzahl der verschlüsselten Datenblöcke. Nicht zutreffend Zähler
alloydb_omni_database_tde_data_decryption_time_us_total Gesamtzeit für die Entschlüsselung von Datenblöcken. Nicht zutreffend Mikrosekunden Zähler
alloydb_omni_database_tde_data_encryption_time_us_total Gesamtzeit für die Verschlüsselung von Datenblöcken. Nicht zutreffend Mikrosekunden Zähler
alloydb_omni_database_tde_enabled Status „TDE aktiviert“. Nicht zutreffend Gauge
alloydb_omni_database_tde_kek_info TDE-KEK-Informationen.
  • kek_version: Version des KEK, der für die Schlüsselverschlüsselung verwendet wird.
  • kek_url: Vollständig qualifizierter Pfad zum KEK in KMS.
  • kek_creation_timestamp: Erstellungszeit des verwendeten KEK.
Gauge
alloydb_omni_database_tde_temp_blocks_decrypted_count_total Anzahl der entschlüsselten temporären Blöcke. Nicht zutreffend Zähler
alloydb_omni_database_tde_temp_blocks_encrypted_count_total Anzahl der verschlüsselten temporären Blöcke. Nicht zutreffend Zähler
alloydb_omni_database_tde_temp_decryption_time_us_total Gesamtzeit für die Entschlüsselung temporärer Blöcke. Nicht zutreffend Mikrosekunden Zähler
alloydb_omni_database_tde_temp_encryption_time_us_total Gesamtzeit für die Verschlüsselung temporärer Blöcke. Nicht zutreffend Mikrosekunden Zähler
alloydb_omni_database_tde_wal_blocks_decrypted_count_total Anzahl der entschlüsselten WAL-Blöcke. Nicht zutreffend Zähler
alloydb_omni_database_tde_wal_blocks_encrypted_count_total Anzahl der verschlüsselten WAL-Blöcke. Nicht zutreffend Zähler
alloydb_omni_database_tde_wal_decryption_time_us_total Gesamtzeit für die Entschlüsselung von WAL-Blöcken. Nicht zutreffend Mikrosekunden Zähler
alloydb_omni_database_tde_wal_encryption_time_us_total Gesamtzeit für die Verschlüsselung von WAL-Blöcken. Nicht zutreffend Mikrosekunden Zähler
tde_chill_cache_blocks_encrypted Anzahl der verschlüsselten Chill-Cache-Blöcke. Nicht zutreffend Zähler
tde_chill_cache_blocks_decrypted Anzahl der entschlüsselten Chill-Cache-Blöcke. Nicht zutreffend Zähler
tde_chill_cache_blocks_total_encryption_time_us Gesamtzeit für die Verschlüsselung von Chill-Cache-Blöcken. Nicht zutreffend Mikrosekunden Zähler
tde_chill_cache_blocks_total_decryption_time_us Gesamtzeit für die Entschlüsselung von Chill-Cache-Blöcken. Nicht zutreffend Mikrosekunden Zähler
tde_ce_cache_ssd_blocks_encrypted Anzahl der verschlüsselten spaltenbasierten Cache-Blöcke, die auf SSD ausgelagert wurden. Nicht zutreffend Zähler
tde_ce_cache_ssd_blocks_decrypted Anzahl der entschlüsselten spaltenbasierten Cache-Blöcke, die auf SSD ausgelagert wurden. Nicht zutreffend Zähler
tde_ce_cache_ssd_blocks_total_encryption_time_us Gesamtzeit für die Verschlüsselung von spaltenbasierten Cache-Blöcken, die auf SSD ausgelagert wurden. Nicht zutreffend Mikrosekunden Zähler
tde_ce_cache_ssd_blocks_total_decryption_time_us Gesamtzeit für die Entschlüsselung von spaltenbasierten Cache-Blöcken, die auf SSD ausgelagert wurden. Nicht zutreffend Mikrosekunden Zähler