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), sodass der Operator die erforderlichen Anmeldedaten sicher in Datenbank-Pods einfügen kann.
Hinweis
- 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 (das Authentifizierungstoken) zu lesen.
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.
Vault-Zugriff konfigurieren
Erstellen Sie eine Secret-Ressource, die den KEK-Pfad und die Authentifizierungsanmeldedaten 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 den KMS-Anbieter anzugeben, z. B.vault://vault.default.svc:8200/v1/secrets/data/alloydb_kek.JWT_TOKEN_PATH: Pfad zum JWT-Token auf dem Knoten. Beispiel:/tmp/token. Der Zugriffspfad für das JWT-Token muss auf allen Knoten im Cluster identisch sein.
TLS-Secret erstellen
Führen Sie die folgenden Befehle aus, um ein TLS-Secret zum Speichern Ihrer Zertifikate zu erstellen:
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
Ersetzen Sie VAULT_SECRET_NAME durch einen Namen für das TLS-Secret.
Sie verwenden diesen Secret-Namen, wenn Sie die benutzerdefinierte Ressource TdeConfig erstellen.
TdeConfig CRD erstellen
Erstellen Sie eine TdeConfig-Ressource, die definiert, wie AlloyDB Omni mit dem Vault kommuniziert, um den KEK abzurufen. Der einzige unterstützte Authentifizierungstyp ist jwt. Achten Sie darauf, dass Sie die TdeConfig-Ressource im selben Namespace wie die DbCluster-Ressource erstellen.
Prüfen Sie, ob der Pfad zu Ihrem JWT-Token für den postgres-Nutzer zugänglich ist und Ihre Vault-Instanz über das Netzwerk erreichbar ist.
So erstellen Sie die TdeConfig-Ressource:
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: "VAULT_SECRET_NAME"
Ersetzen Sie Folgendes:
TDE_CONFIG_NAME: Name derTdeConfig-Ressource.JWT_AUTH_MOUNT_PATH: Pfad, in dem die Authentifizierungs Engine in HashiCorp Vault eingebunden ist, wie in Ihrer Konfiguration definiert. Beispiel:auth/kms.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.VAULT_SECRET_NAME: Name des Secrets, das die Zertifikate für die Vault-Verbindung enthält. Beispiel:vault-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.3.0" 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 wurde, patchen Sie Ihren DBCluster wie folgt:
kubectl patch dbcluster `DBCLUSTER_NAME` \
-n `DBCLUSTER_NAMESPACE` \
-p '{"spec":{"primarySpec":{"parameters": {"google_columnar_engine.enable_tde_for_storage_cache": "on"}}}}' \
--type=merge
Referenzen zu TDE-Messwerten
Sie können alle TDE-Messwerte im Monitoring-Agent von AlloyDB Omni ansehen. In der folgenden Tabelle wird jeder Messwert 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 der TDE-Aktivierung. | 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-Speicher ausgelagert wurden. | Nicht zutreffend | Zähler | |
tde_ce_cache_ssd_blocks_decrypted |
Anzahl der entschlüsselten spaltenbasierten Cache-Blöcke, die auf SSD-Speicher ausgelagert wurden. | Nicht zutreffend | Zähler | |
tde_ce_cache_ssd_blocks_total_encryption_time_us |
Gesamtzeit für die Verschlüsselung von Spaltencache-Blöcken, die auf SSD-Speicher 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-Speicher ausgelagert wurden. | Nicht zutreffend | Mikrosekunden | Zähler |