在 AlloyDB Omni 啟用透明資料加密 (TDE),即可保護靜態資料和機密資訊。本文說明如何在資料庫初始化期間,提供必要的 Key Management Service (KMS) 環境變數 (適用於 HashiCorp Vault 或 Thales CipherTrust Manager),以及 POSTGRES_INITDB_ARGS 環境變數中的 --tde-kek-url 旗標,建立啟用 TDE 的叢集。
事前準備
HashiCorp Vault KMS
- 請參閱「規劃 AlloyDB Omni 安裝作業」。
- 規劃啟用 TDE 的 AlloyDB Omni 部署作業時,請根據預期的工作負載和資料量,考量額外的 CPU 用量。加密和解密作業會耗用大量運算資源。
- 設定 HashiCorp Vault 的 KV-V2 Secret 引擎,確保金鑰加密金鑰 (KEK) 路徑和 JSON Web Token (JWT) 可用。
- 確認 AlloyDB Omni 有權讀取 JSON Web Token (JWT) 檔案,也就是驗證權杖。
Thales CipherTrust KMS
- 請參閱「規劃 AlloyDB Omni 安裝作業」。
- 規劃啟用 TDE 的 AlloyDB Omni 部署作業時,請根據預期的工作負載和資料量,考量額外的 CPU 用量。加密和解密作業會耗用大量運算資源。
- 設定 Thales CipherTrust Manager,確保建立並匯出私密金鑰加密金鑰 (KEK)。
- 確認您擁有 CipherTrust Manager 使用者帳戶 (
username和password),且具備驗證及匯出 KEK 密鑰的權限。
建立叢集
如要建立啟用 TDE 的叢集,您必須在資料庫初始化期間傳遞必要的 Key Management Service (KMS) 設定和驗證憑證。您可以設定 HashiCorp Vault (使用 jwt 驗證) 或 Thales CipherTrust Manager (使用使用者名稱和密碼驗證)。
使用 RPM 安裝 AlloyDB Omni,準備環境並安裝 AlloyDB Omni RPM 套件。
初始化資料庫。
HashiCorp Vault KMS
針對使用 HashiCorp Vault 的正式工作負載,請採用這種方法。
執行下列指令,初始化已啟用 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/alloydbomni18-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:在 Vault 設定中定義的用戶端角色,可讓 HashiCorp Vault 驗證 JWT 權杖的真實性。 VAULT_CERT_PATH:節點上保管箱連線憑證所在的路徑,例如/tde-tls。如未設定,系統會使用預設信任存放區中的憑證。KEK_URL:HashiCorp Vault 中 KEK 的完整網址。使用vault做為通訊協定,將 HashiCorp Vault 指定為 KMS 供應商,例如vault://127.0.0.1:8200/v1/secret/data/alloydb_kek。
如要在
/etc/systemd/system/alloydbomni18.service.d/override.conf中為alloydbomni18.service建立覆寫檔案,請在override.conf檔案中加入以下內容:[Service] Environment="VAULT_AUTH_TYPE=jwt" 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"
更改下列內容:
JWT_AUTH_ENGINE_MOUNT:HashiCorp Vault 驗證引擎的掛接路徑,例如/auth/jwt。JWT_FILE_PATH:Vault JWT 儲存在節點上的路徑,例如/tde-tls/jwt-token。- 選用:
VAULT_ROLE:在 Vault 設定中定義的用戶端角色,可讓 HashiCorp Vault 驗證 JWT 權杖的真實性。 VAULT_CERT_PATH:節點上 Vault 連線憑證的路徑,例如/tde-tls。如未設定,系統會使用預設信任存放區中的憑證。
如要套用變更,請重新載入 systemd 精靈。
sudo systemctl daemon-reload
Thales CipherTrust KMS
如要搭配 Thales CipherTrust Manager 處理正式環境工作負載,請採用這個方法。
執行下列指令,初始化已啟用 TDE 的資料庫:
sudo PGPASSWORD=POSTGRES_PASSWORD \ PGDATA=DATA_DIR \ CIPHERTRUST_USER=CIPHERTRUST_USERNAME \ CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD \ CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH \ POSTGRES_INITDB_ARGS="--tde-kek-url=KEK_URL" \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
更改下列內容:
POSTGRES_PASSWORD:資料庫使用者的密碼。DATA_DIR:要掛接為 AlloyDB Omni 資料磁碟區的本機目錄,例如/local/data。CIPHERTRUST_USERNAME:用於向 Thales CipherTrust Manager 驗證身分的帳號名稱。CIPHERTRUST_PASSWORD:Thales CipherTrust Manager 使用者的密碼。CIPHERTRUST_CERT_PATH:節點上 CipherTrust Manager 連線憑證 (ca.crt、tls.crt和tls.key) 的路徑,例如/tde-tls。如未設定,系統會使用預設信任存放區中的憑證。KEK_URL:Thales CipherTrust Manager 中 KEK 的完整網址。使用ciphertrust做為通訊協定,將 Thales CipherTrust Manager 指定為 KMS 供應商,例如ciphertrust://10.0.0.1:443/api/v1/vault/secrets/alloydb_kek。
如要在
/etc/systemd/system/alloydbomni18.service.d/override.conf中為alloydbomni18.service建立覆寫檔案,請在override.conf檔案中加入以下內容:[Service] Environment="CIPHERTRUST_USER=CIPHERTRUST_USERNAME" Environment="CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD" Environment="CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH"
更改下列內容:
CIPHERTRUST_USERNAME:用於向 Thales CipherTrust Manager 驗證身分的帳號名稱。CIPHERTRUST_PASSWORD:Thales CipherTrust Manager 使用者的密碼。CIPHERTRUST_CERT_PATH:節點上 CipherTrust Manager 連線憑證 (ca.crt、tls.crt和tls.key) 的路徑,例如/tde-tls。如未設定,系統會使用預設信任存放區中的憑證。
如要套用變更,請重新載入 systemd daemon。
sudo systemctl daemon-reload
檔案式 KMS
請僅將此方法用於測試。
如要使用檔案式金鑰在本機測試 TDE,您必須先在機器上產生 32 位元組的 KEK。
建立目錄、產生金鑰,並設定適當的權限。
KEK_DIR=KEK_DIR sudo mkdir -p $KEK_DIR openssl rand -base64 32 | sudo tee $KEK_DIR/key >/dev/null sudo chown -R postgres:postgres $KEK_DIR sudo chmod 0700 $KEK_DIR sudo chmod 0600 $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/alloydbomni18-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 |
已解密的資料區塊數量。 | 不適用 | counter | |
alloydb_omni_database_tde_data_blocks_encrypted_count_total |
已加密的資料區塊數量。 | 不適用 | 計數器 | |
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 |
解密暫時區塊的總時間。 | 不適用 | 微秒 | counter |
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 區塊數量。 | 不適用 | counter | |
alloydb_omni_database_tde_wal_decryption_time_us_total |
在 WAL 區塊解密中花費的總時間。 | 不適用 | 微秒 | 計數器 |
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 |
解密冷快取區塊的總時間。 | 不適用 | 微秒 | 計數器 |
tde_ce_cache_ssd_blocks_encrypted |
溢出至 SSD 儲存空間的資料欄快取區塊數量 (已加密)。 | 不適用 | counter | |
tde_ce_cache_ssd_blocks_decrypted |
已解密的資料欄快取區塊溢出至 SSD 儲存空間的數量。 | 不適用 | counter | |
tde_ce_cache_ssd_blocks_total_encryption_time_us |
加密溢出至 SSD 儲存空間的資料欄快取區塊,所花費的總時間。 | 不適用 | 微秒 | 計數器 |
tde_ce_cache_ssd_blocks_total_decryption_time_us |
解密溢出至 SSD 儲存空間的資料欄快取區塊,所花費的總時間。 | 不適用 | 微秒 | 計數器 |