AlloyDB Omni Kubernetes 運算子會使用 TdeConfig 自訂資源,自動管理透明資料加密 (TDE) 叢集的生命週期。這個資源會儲存金鑰管理服務 (KMS) 連線詳細資料,讓運算子安全地將必要憑證注入資料庫 Pod。
事前準備
- 設定 HashiCorp Vault 的 KV-V2 Secret 引擎,確保金鑰加密金鑰 (KEK) 路徑和 JSON Web Token (JWT) 可用。
- 確認 AlloyDB Omni 有權讀取 JSON 網頁權杖 (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:ConfigMap 的名稱。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 自訂資源時,您會用到這個 Secret 名稱。
建立 TdeConfig CRD
建立 TdeConfig 資源,定義 AlloyDB Omni 如何與 Vault 通訊,以擷取 KEK。唯一支援的驗證類型是 jwt。請務必在與 DbCluster 資源相同的命名空間中建立 TdeConfig 資源。
請確認 postgres 使用者可以存取 JWT 權杖的路徑,且可透過網路連上 Vault 執行個體。
如要建立 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 名稱。例如:vault-secret。
部署 DBCluster
建立並套用資訊清單,建立參照
TdeConfig資源的DBCluster資源。如要進一步瞭解如何建立資料庫叢集,請參閱「建立資料庫叢集」。apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: "DBCLUSTER_NAME" spec: databaseVersion: "18.3.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資源的命名空間。
如要為溢出至 SSD 的資料欄快取啟用 TDE,請按照下列方式修補 DBCluster:
kubectl patch dbcluster `DBCLUSTER_NAME` \
-n `DBCLUSTER_NAMESPACE` \
-p '{"spec":{"primarySpec":{"parameters": {"google_columnar_engine.enable_tde_for_storage_cache": "on"}}}}' \
--type=merge
TDE 指標參考資料
您可以在 AlloyDB Omni 的監控代理程式中,查看所有 TDE 指標。下表說明各項指標。
| 名稱 | 說明 | 標籤 | 單位 | 類型 |
|---|---|---|---|---|
alloydb_omni_database_tde_data_blocks_decrypted_count_total |
已解密的資料區塊數量。 | 不適用 | 計數器 | |
alloydb_omni_database_tde_data_blocks_encrypted_count_total |
已加密的資料區塊數量。 | 不適用 | counter | |
alloydb_omni_database_tde_data_decryption_time_us_total |
資料區塊解密所花費的總時間。 | 不適用 | 微秒 | counter |
alloydb_omni_database_tde_data_encryption_time_us_total |
資料區塊加密作業的總耗時。 | 不適用 | 微秒 | counter |
alloydb_omni_database_tde_enabled |
TDE 啟用狀態。 | 不適用 | 取樣 | |
alloydb_omni_database_tde_kek_info |
TDE KEK 資訊。 |
|
取樣 | |
alloydb_omni_database_tde_temp_blocks_decrypted_count_total |
已解密的暫時區塊數量。 | 不適用 | counter | |
alloydb_omni_database_tde_temp_blocks_encrypted_count_total |
加密的暫時性區塊數量。 | 不適用 | counter | |
alloydb_omni_database_tde_temp_decryption_time_us_total |
解密暫時區塊的總時間。 | 不適用 | 微秒 | 計數器 |
alloydb_omni_database_tde_temp_encryption_time_us_total |
暫時區塊加密的總時間。 | 不適用 | 微秒 | counter |
alloydb_omni_database_tde_wal_blocks_decrypted_count_total |
解密的 WAL 區塊數量。 | 不適用 | 計數器 | |
alloydb_omni_database_tde_wal_blocks_encrypted_count_total |
已加密的 WAL 區塊數量。 | 不適用 | counter | |
alloydb_omni_database_tde_wal_decryption_time_us_total |
在 WAL 區塊解密中花費的總時間。 | 不適用 | 微秒 | counter |
alloydb_omni_database_tde_wal_encryption_time_us_total |
在 WAL 區塊加密中花費的總時間。 | 不適用 | 微秒 | counter |
tde_chill_cache_blocks_encrypted |
加密的冷快取區塊數量。 | 不適用 | counter | |
tde_chill_cache_blocks_decrypted |
已解密的冷快取區塊數量。 | 不適用 | counter | |
tde_chill_cache_blocks_total_encryption_time_us |
在冷快取區塊加密中花費的總時間。 | 不適用 | 微秒 | counter |
tde_chill_cache_blocks_total_decryption_time_us |
解密冷快取區塊的總時間。 | 不適用 | 微秒 | counter |
tde_ce_cache_ssd_blocks_encrypted |
溢出至 SSD 儲存空間並經過加密的資料欄快取區塊數量。 | 不適用 | 計數器 | |
tde_ce_cache_ssd_blocks_decrypted |
已解密並溢出至 SSD 儲存空間的資料欄快取區塊數量。 | 不適用 | 計數器 | |
tde_ce_cache_ssd_blocks_total_encryption_time_us |
加密溢出至 SSD 儲存空間的資料欄快取區塊,所花費的總時間。 | 不適用 | 微秒 | 計數器 |
tde_ce_cache_ssd_blocks_total_decryption_time_us |
解密溢出至 SSD 儲存空間的資料欄快取區塊,所花費的總時間。 | 不適用 | 微秒 | counter |