您可以在 AlloyDB Omni 中啟用透明資料加密 (TDE),確保靜態資料安全無虞,並保護機密資訊。本文說明如何在資料庫初始化期間,透過提供必要的 Vault 環境變數和 POSTGRES_INITDB_ARGS 環境變數中的 --tde-kek-url 旗標,建立啟用 TDE 的叢集。
事前準備
- 請參閱「規劃 AlloyDB Omni 安裝作業」。
- 規劃啟用 TDE 的 AlloyDB Omni 部署作業時,請務必根據預期工作負載和資料量,考量額外的 CPU 使用量。加密和解密作業會耗用大量運算資源。
- 設定 HashiCorp Vault 的 KV-V2 密碼引擎,確保金鑰加密金鑰 (KEK) 路徑和 JSON Web Token (JWT) 可用。
- 確認 AlloyDB Omni 有權讀取 JSON Web Token (JWT) 檔案 (即驗證權杖)。
建立叢集
如要建立啟用 TDE 的叢集,您必須在資料庫初始化期間,傳遞必要的 Key Management Service (KMS) 設定和驗證憑證。目前僅支援 jwt 驗證類型。
使用 RPM 安裝 AlloyDB Omni,準備環境並安裝 AlloyDB Omni RPM 套件。
初始化資料庫。
HashiCorp Vault KMS
請將這種方法用於正式環境工作負載。
執行下列指令,初始化已啟用 TDE 的資料庫:
sudo PGPASSWORD=POSTGRES_PASSWORD \ PGDATA=DATA_DIR \ VAULT_AUTH_TYPE=jwt \ VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \ VAULT_JWT_PATH=JWT_FILE_PATH \ VAULT_ROLE=VAULT_ROLE \ VAULT_CERT_PATH=VAULT_CERT_PATH \ POSTGRES_INITDB_ARGS="--tde-kek-url=KEK_URL" \ /usr/lib/postgresql/18/bin/alloydbomniproduct_major_version_numeric-setup initdb
更改下列內容:
POSTGRES_PASSWORD:資料庫使用者的密碼。DATA_DIR:要掛接為 AlloyDB Omni 資料磁碟區的本機目錄,例如/local/data。JWT_AUTH_ENGINE_MOUNT:HashiCorp Vault 驗證引擎的掛接路徑,例如/auth/jwt。JWT_FILE_PATH:節點上儲存 Vault JWT 的路徑,例如tde-tls/jwt-token。- (選用)
VAULT_ROLE:在保管箱設定中定義的用戶端角色,可讓 HashiCorp Vault 驗證 JWT 憑證的真實性。 VAULT_CERT_PATH:節點上保存金鑰管理服務連線憑證的路徑,例如/tde-tls。如未設定,系統會使用預設信任存放區中的憑證。KEK_URL:HashiCorp Vault 中 KEK 的完整網址。使用vault做為通訊協定,將 HashiCorp Vault 指定為 KMS 提供者,例如vault://127.0.0.1:8200/v1/secrets/data/alloydb_kek。
如要在
/etc/systemd/system/alloydbomni18.service.d/override.conf中為alloydbomni18.service建立覆寫檔案,請在override.conf檔案中新增下列內容:[Service] Environment="VAULT_AUTH_TYPE=VAULT_AUTH_TYPE" Environment="VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT" Environment="VAULT_JWT_PATH=JWT_FILE_PATH" Environment="VAULT_ROLE=VAULT_ROLE" Environment="VAULT_CERT_PATH=VAULT_CERT_PATH"
更改下列內容:
VAULT_AUTH_TYPE:用於 Vault 連線的驗證類型。僅支援jwt。JWT_AUTH_ENGINE_MOUNT:HashiCorp Vault 驗證引擎的掛接路徑,例如/auth/jwt。JWT_FILE_PATH:節點上儲存 Vault JWT 的路徑,例如tde-tls/jwt-token。- (選用)
VAULT_ROLE:在保管箱設定中定義的用戶端角色,可讓 HashiCorp Vault 驗證 JWT 憑證的真實性。 VAULT_CERT_PATH:節點上保存金鑰管理服務連線憑證的路徑,例如/tde-tls。如未設定,系統會使用預設信任存放區中的憑證。
如要套用變更,請重新載入 systemd daemon。
sudo systemctl daemon-reload
以檔案為基礎的 KMS
這種做法僅供測試。
如要使用檔案型金鑰在本機測試 TDE,您必須先在電腦上產生 32 位元組的 KEK。
建立目錄、產生金鑰,並設定適當的權限。
KEK_DIR=KEK_DIR mkdir -p $KEK_DIR sudo chown 999:999 $KEK_DIR openssl rand -base64 32 | sudo tee $KEK_DIR/key sudo chmod 0755 $KEK_DIR/key
將本機檔案 URI 做為 KEK 網址傳遞,藉此初始化資料庫。
sudo PGPASSWORD=POSTGRES_PASSWORD \ PGDATA=DATA_DIR \ POSTGRES_INITDB_ARGS="--tde-kek-url=file:///$KEK_DIR/key" \ /usr/lib/postgresql/18/bin/alloydbomniproduct_major_version_numeric-setup initdb
更改下列內容:
POSTGRES_PASSWORD:資料庫使用者的密碼。DATA_DIR:要掛接為 AlloyDB Omni 資料磁碟區的本機目錄,例如/local/data。KEK_DIR:儲存本機檔案 KEK 的目錄,例如/tmp/alloydb/kms。
資料庫初始化完成後,請按照「使用 RPM 安裝 AlloyDB Omni」中的操作說明準備資料庫、設定主機,並啟動
systemd服務。如要為溢出至 SSD 儲存空間的資料欄引擎快取資料啟用 TDE,請連線至資料庫執行個體,然後執行下列查詢:
ALTER SYSTEM SET google_columnar_engine.enable_tde_for_storage_cache = 'on';重新啟動資料庫伺服器,讓變更生效。
TDE 指標參考資料
您可以在 AlloyDB Omni 的監控代理程式中查看所有 TDE 指標。 下表說明各項指標。
| 名稱 | 說明 | 標籤 | 單位 | 類型 |
|---|---|---|---|---|
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_enabled |
TDE 啟用狀態。 | 不適用 | 取樣 | |
alloydb_omni_database_tde_kek_info |
TDE 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_total |
WAL 區塊加密所花費的總時間。 | 不適用 | 微秒 | 計數器 |
tde_chill_cache_blocks_encrypted |
加密的冷快取區塊數。 | 不適用 | 計數器 | |
tde_chill_cache_blocks_decrypted |
已解密的冷快取區塊數。 | 不適用 | 計數器 | |
tde_chill_cache_blocks_total_encryption_time_us |
在冷快取區塊加密中花費的總時間。 | 不適用 | 微秒 | 計數器 |
tde_chill_cache_blocks_total_decryption_time_us |
解密冷快取區塊的總時間。 | 不適用 | 微秒 | 計數器 |
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 儲存空間的資料欄快取區塊所花費的總時間。 | 不適用 | 微秒 | 計數器 |