AlloyDB Omni Kubernetes 運算子會使用 TdeConfig 自訂資源,自動執行透明資料加密 (TDE) 叢集的生命週期。這個資源會儲存 Key Management Service (KMS) 連線詳細資料,讓運算子安全地將必要憑證注入資料庫 Pod。
事前準備
- 設定 HashiCorp Vault 的 KV-V2 密碼引擎,確保金鑰加密金鑰 (KEK) 路徑和 JSON Web Token (JWT) 可用。
- 確認 AlloyDB Omni 有權讀取 JWT 權杖檔案。
選用:如要在 OpenShift 上部署啟用 TDE 的叢集,請將
hostmount-anyuid安全性環境限制 (SCC) 授予執行資料庫叢集的DBCluster服務帳戶。oc adm policy add-scc-to-user hostmount-anyuid -z DBCLUSTER_NAME-sa -n DBCLUSTER_NAMESPACE
將 DBCLUSTER_NAME 替換為
DBCluster的名稱,並將 DBCLUSTER_NAMESPACE 替換為您要建立DBCluster資源的命名空間。
設定保管箱存取權
建立包含 KEK 路徑和驗證憑證的密鑰資源。
apiVersion: v1
kind: ConfigMap
metadata:
name: CONFIG_MAP_NAME
data:
kek_url: "KEK_URL"
token_path: "JWT_TOKEN_PATH"
更改下列內容:
CONFIG_MAP_NAME:設定對應的名稱。kek_url和token_path中定義的值會用於TdeConfig資源定義。KEK_URL:HashiCorp Vault 中 KEK 的完整網址。使用vault做為通訊協定,將 HashiCorp Vault 指定為 KMS 提供者,例如vault://vault.default.svc:8200/v1/secrets/data/alloydb_kek。JWT_TOKEN_PATH:節點上 JWT 權杖的路徑。例如:/tmp/token。叢集中的所有節點都必須使用相同的 JWT 權杖存取路徑。
建立 TLS 密鑰
如要建立 TLS 密鑰來儲存憑證,請執行下列指令:
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
將 VAULT_SECRET_NAME 替換為 TLS 密鑰的名稱。建立 TdeConfig 自訂資源時,請使用這個密碼名稱。
建立 TdeConfig CRD
建立 TdeConfig 資源,定義 AlloyDB Omni 如何與保存庫通訊,以擷取 KEK。系統僅支援 jwt 驗證類型。請務必在與 DbCluster 資源相同的命名空間中建立 TdeConfig 資源。
確認 postgres 使用者可以存取 JWT 權杖的路徑,且保管箱執行個體可透過網路連線。
如要建立 TdeConfig 資源,請按照下列步驟操作:
建立並套用 TdeConfig 資源的資訊清單。
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"
更改下列內容:
TDE_CONFIG_NAME:TdeConfig資源的名稱。JWT_AUTH_MOUNT_PATH:驗證引擎在 HashiCorp Vault 內掛接的路徑,由您的設定定義。例如:auth/kms。- (選用)
VAULT_ROLE:在保管箱設定中定義的用戶端角色。用戶端角色會驗證 JWT,並反映角色在 HashiCorp Vault 中獲得的特定存取權和身分。 VAULT_SECRET_NAME:包含保存庫連線憑證的密鑰名稱。例如:vault-secret。
部署 DBCluster
建立並套用資訊清單,建立參照
TdeConfig資源的DBCluster資源。如要進一步瞭解如何建立資料庫叢集,請參閱「建立資料庫叢集」。apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: "DBCLUSTER_NAME" spec: databaseVersion: "18.1.0" features: transparentDataEncryption: tdeConfigRef: name: "TDE_CONFIG_NAME" [...]將
TDE_CONFIG_NAME替換為您的TdeConfig資源名稱,並將DBCLUSTER_NAME替換為您要建立的DBCluster名稱。選用:如果您要在 Openshift 環境中部署
DBCluster,請使用hostmount-anyuid註解標註DBCluster資源。kubectl annotate dbclusters.alloydbomni.dbadmin.goog `DBCLUSTER_NAME` -n `DBCLUSTER_NAMESPACE` openshift.io/scc=anyuid將
DBCLUSTER_NAME替換為DBCluster資源的名稱,並將DBCLUSTER_NAMESPACE替換為要建立DBCluster資源的命名空間。
查看 TDE 指標
叢集初始化後,請完成下列步驟,確認 TDE 已啟用並查看相關 TDE 指標。
- 使用
psql或偏好的用戶端連線至資料庫。如需連線至執行個體的詳細操作說明,請參閱「執行並連線至 AlloyDB Omni」。 執行下列指令:
select * FROM pgsnap.g$tde_stats;如果成功啟用 TDE,輸出內容會顯示 TDE 指標,例如是否已啟用 TDE、KEK 網址、KEK 版本和 KEK 建立時間戳記。
下表說明各項指標的意義。
名稱 說明 標籤 單位 類型 alloydb_omni_database_tde_data_blocks_decrypted_count_total已解密的資料區塊數。 不適用 計數器 alloydb_omni_database_tde_data_blocks_encrypted_count_total加密的資料區塊數。 不適用 計數器 alloydb_omni_database_tde_data_decryption_time_us_total資料區塊解密所花費的總時間。 不適用 微秒 計數器 alloydb_omni_database_tde_data_encryption_time_us_total資料區塊加密所花費的總時間。 不適用 微秒 計數器 alloydb_omni_database_tde_enabledTDE 啟用狀態。 不適用 取樣 alloydb_omni_database_tde_kek_infoTDE KEK 資訊。 kek_version:用於金鑰包裝的 KEK
版本。kek_url:KMS 中 KEK 的完整路徑kek_creation_timestamp:
目前使用的 KEK 版本建立時間。
取樣 alloydb_omni_database_tde_temp_blocks_decrypted_count_total已解密的暫時性區塊數。 不適用 計數器 alloydb_omni_database_tde_temp_blocks_encrypted_count_total加密的臨時區塊數。 不適用 計數器 alloydb_omni_database_tde_temp_decryption_time_us_total解密暫時區塊的總時間。 不適用 微秒 計數器 alloydb_omni_database_tde_temp_encryption_time_us_total暫時性區塊加密的總時間。 不適用 微秒 計數器 alloydb_omni_database_tde_wal_blocks_decrypted_count_total已解密的 WAL 區塊數。 不適用 計數器 alloydb_omni_database_tde_wal_blocks_encrypted_count_total加密的 WAL 區塊數。 不適用 計數器 alloydb_omni_database_tde_wal_decryption_time_us_total解密 WAL 區塊的總時間。 不適用 微秒 計數器 alloydb_omni_database_tde_wal_encryption_time_us_totalWAL 區塊加密的總時間。 不適用 微秒 計數器