AlloyDB Omni Kubernetes 運算子會使用 TdeConfig 自訂資源,自動執行透明資料加密 (TDE) 叢集的生命週期。這項資源會儲存金鑰管理服務 (KMS) 連線詳細資料,讓 operator 能安全地將必要憑證插入資料庫 Pod。
事前準備
- 設定 HashiCorp Vault 的 KV-V2 Secret 引擎,確保金鑰加密金鑰 (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:ConfigMap 的名稱。TdeConfig資源定義會使用kek_url和token_path中定義的值。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.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已解密的資料區塊數量。 不適用 counter 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資料區塊加密作業的總耗時。 不適用 微秒 counter 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已解密的暫時區塊數量。 不適用 counter 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暫時區塊加密所花費的總時間。 不適用 微秒 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_totalWAL 區塊加密作業的總耗時。 不適用 微秒 計數器