Der AlloyDB Omni Kubernetes-Operator automatisiert den Lebenszyklus von TDE-Clustern (Transparent Data Encryption) 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 KEK-Pfad (Key Encryption Key) und das JWT (JSON Web Token) verfügbar sind.
- Prüfen Sie, ob AlloyDB Omni die Berechtigung zum Lesen der JWT-Tokendatei hat.
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 SCC (Security Context Constraint)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 Ihren KEK-Pfad und die Anmeldedaten für die Authentifizierung 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/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 für alle Knoten im Cluster gleich 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 Datenbankclusters finden Sie unter Datenbankcluster erstellen.apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: "DBCLUSTER_NAME" spec: databaseVersion: "18.1.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 IhrerDBCluster-Ressource undDBCLUSTER_NAMESPACEdurch den Namespace, in dem Sie dieDBCluster-Ressource erstellen möchten.
TDE-Messwerte ansehen
Nachdem der Cluster initialisiert wurde, führen Sie die folgenden Schritte aus, um zu prüfen, ob TDE aktiviert ist, und um zugehörige TDE-Messwerte anzusehen.
- Stellen Sie mit
psqloder Ihrem bevorzugten Client eine Verbindung zu Ihrer Datenbank her. Eine detaillierte Anleitung zum Herstellen einer Verbindung zu Ihren Instanzen finden Sie unter AlloyDB Omni ausführen und eine Verbindung herstellen. Führen Sie dazu diesen Befehl aus:
select * FROM pgsnap.g$tde_stats;Die Ausgabe enthält TDE-Messwerte, z. B. ob TDE aktiviert ist, die KEK-URL, die KEK-Version und den Zeitstempel der KEK-Erstellung.
In der folgenden Tabelle wird die Bedeutung der einzelnen Messwerte erläutert.
Name Beschreibung Label Einheit Typ alloydb_omni_database_tde_data_blocks_decrypted_count_totalAnzahl der entschlüsselten Datenblöcke. Nicht zutreffend Zähler alloydb_omni_database_tde_data_blocks_encrypted_count_totalAnzahl der verschlüsselten Datenblöcke. Nicht zutreffend Zähler alloydb_omni_database_tde_data_decryption_time_us_totalGesamtzeit für die Entschlüsselung von Datenblöcken. Nicht zutreffend Mikrosekunden Zähler alloydb_omni_database_tde_data_encryption_time_us_totalGesamtzeit für die Verschlüsselung von Datenblöcken. Nicht zutreffend Mikrosekunden Zähler alloydb_omni_database_tde_enabledStatus von TDE. Nicht zutreffend Gauge alloydb_omni_database_tde_kek_infoTDE-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 KMSkek_creation_timestamp:
Erstellungszeit des verwendeten KEK.
Gauge alloydb_omni_database_tde_temp_blocks_decrypted_count_totalAnzahl der entschlüsselten temporären Blöcke. Nicht zutreffend Zähler alloydb_omni_database_tde_temp_blocks_encrypted_count_totalAnzahl der verschlüsselten temporären Blöcke. Nicht zutreffend Zähler alloydb_omni_database_tde_temp_decryption_time_us_totalGesamtzeit für die Entschlüsselung temporärer Blöcke. Nicht zutreffend Mikrosekunden Zähler alloydb_omni_database_tde_temp_encryption_time_us_totalGesamtzeit für die Verschlüsselung temporärer Blöcke. Nicht zutreffend Mikrosekunden Zähler alloydb_omni_database_tde_wal_blocks_decrypted_count_totalAnzahl der entschlüsselten WAL-Blöcke. Nicht zutreffend Zähler alloydb_omni_database_tde_wal_blocks_encrypted_count_totalAnzahl der verschlüsselten WAL-Blöcke. Nicht zutreffend Zähler alloydb_omni_database_tde_wal_decryption_time_us_totalGesamtzeit für die Entschlüsselung von WAL-Blöcken. Nicht zutreffend Mikrosekunden Zähler alloydb_omni_database_tde_wal_encryption_time_us_totalGesamtzeit für die Verschlüsselung von WAL-Blöcken. Nicht zutreffend Mikrosekunden Zähler