Der AlloyDB Omni Kubernetes-Operator automatisiert den Lebenszyklus von Clustern mit transparenter Datenverschlüsselung (Transparent Data Encryption, TDE) mithilfe der benutzerdefinierten Ressource TdeConfig. In dieser Ressource werden die Verbindungsdetails für den Key Management Service (KMS) gespeichert, sodass der Operator die erforderlichen Anmeldedaten sicher in Datenbank-Pods einfügen kann.
Hinweis
- Konfigurieren Sie die KV-V2-Secrets-Engine von HashiCorp Vault, damit der KEK-Pfad (Key Encryption Key) und das JSON Web Token (JWT) verfügbar sind.
- Achten Sie darauf, dass 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, das den Datenbankcluster ausführt, 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 der
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 Ihre 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 der RessourcendefinitionTdeConfigverwendet.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 konsistent 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 TdeConfig-Ressource erstellen.
TdeConfig-CRD erstellen
Erstellen Sie eine TdeConfig-Ressource, die definiert, wie AlloyDB Omni mit dem Tresor 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 ob Ihre Vault-Instanz über das Netzwerk erreichbar ist.
So erstellen Sie die TdeConfig-Ressource:
Erstellen Sie ein Manifest für die TdeConfig-Ressource und wenden Sie es 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, unter dem die Authentifizierungs-Engine in HashiCorp Vault bereitgestellt wird, wie in Ihrer Konfiguration definiert. Beispiel: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. VAULT_SECRET_NAME: Name des Secrets, das die Zertifikate für die Vault-Verbindung enthält. Beispiel:vault-secret
DBCluster bereitstellen
Erstellen Sie ein Manifest und wenden Sie es 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.3.0" features: transparentDataEncryption: tdeConfigRef: name: "TDE_CONFIG_NAME" [...]Ersetzen Sie
TDE_CONFIG_NAMEdurch den Namen IhrerTdeConfig-Ressource undDBCLUSTER_NAMEdurch den Namen derDBCluster, die 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.
Wenn Sie TDE für den Spaltencache 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
TDE-Messwertreferenzen
Sie können alle TDE-Messwerte im Monitoring-Agent von AlloyDB Omni ansehen. 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_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, die mit der temporären Blockverschlüsselung verbracht wurde. | 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, die für die Entschlüsselung von WAL-Blöcken aufgewendet wurde. | Nicht zutreffend | Mikrosekunden | Zähler |
alloydb_omni_database_tde_wal_encryption_time_us_total |
Gesamtzeit, die für die WAL-Blockverschlüsselung aufgewendet wurde. | 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, die für die Verschlüsselung von Chill-Cache-Blöcken aufgewendet wurde. | 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 in den SSD-Speicher ausgelagerten Spaltencacheblöcke, die verschlüsselt wurden. | Nicht zutreffend | Zähler | |
tde_ce_cache_ssd_blocks_decrypted |
Anzahl der Spaltencacheblöcke, die auf SSD-Speicher ausgelagert und entschlüsselt wurden. | Nicht zutreffend | Zähler | |
tde_ce_cache_ssd_blocks_total_encryption_time_us |
Gesamtzeit, die für die Verschlüsselung von Spaltencacheblöcken aufgewendet wurde, die auf SSD-Speicher ausgelagert wurden. | Nicht zutreffend | Mikrosekunden | Zähler |
tde_ce_cache_ssd_blocks_total_decryption_time_us |
Gesamtzeit für das Entschlüsseln von Spaltencacheblöcken, die auf SSD-Speicher ausgelagert wurden. | Nicht zutreffend | Mikrosekunden | Zähler |