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
DBClusterund DBCLUSTER_NAMESPACE durch den Namespace, in dem Sie dieDBCluster-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 (
usernameundpassword) 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
DBClusterund DBCLUSTER_NAMESPACE durch den Namespace, in dem Sie dieDBCluster-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 inkek_urlundtoken_pathdefinierten Werte werden in derTdeConfig-Ressourcendefinition verwendet.KEK_URL: die vollständig qualifizierte URL zum KEK in HashiCorp Vault. Verwenden Sievaultals 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 inkek_urldefinierte Wert wird in derTdeConfig-Ressourcendefinition verwendet.KEK_URL: die vollständig qualifizierte URL zum KEK in Thales CipherTrust Manager. Verwenden Sieciphertrustals 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-secretoderciphertrust-tls-secret. Sie verwenden diesen Secret-Namen, wenn Sie die benutzerdefinierte RessourceTdeConfigerstellen.CLIENT_CERT_FILE: der Pfad zu Ihrer TLS-Clientzertifikatsdatei, die alstls.crtim Secret gespeichert ist.CLIENT_KEY_FILE: der Pfad zu Ihrer privaten TLS-Client-Schlüsseldatei, die alstls.keyim 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 alsca.crtim 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 derTdeConfig-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 derTdeConfig-Ressource.CONFIG_MAP_NAME: Name der ConfigMap, diekek_urlenthält.CREDENTIALS_SECRET_NAME: Name des Kubernetes-Secrets, das die Schlüsselusernameundpasswordfü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
Erstellen und wenden Sie ein Manifest an, um eine
DBCluster-Ressource zu erstellen, die auf IhreTdeConfig-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_NAMEdurch den Namen IhrerTdeConfig-Ressource undDBCLUSTER_NAMEdurch den Namen desDBCluster, den Sie erstellen möchten.Optional: Wenn Sie
DBClusterin einer OpenShift-Umgebung bereitstellen, müssen Sie dieDBCluster-Ressource mit der Annotationhostmount-anyuidversehen.kubectl annotate dbclusters.alloydbomni.dbadmin.goog DBCLUSTER_NAME -n DBCLUSTER_NAMESPACE openshift.io/scc=anyuidErsetzen Sie
DBCLUSTER_NAMEdurch den Namen IhrerDBClusterRessource undDBCLUSTER_NAMESPACEdurch den Namespace , in dem Sie dieDBClusterRessource 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. |
|
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 |