您可以在 AlloyDB Omni 中啟用透明資料加密 (TDE),保護靜態資料和機密資訊。本文說明如何在資料庫初始化期間,提供必要的 Key Management Service (KMS) 環境變數 (適用於 HashiCorp Vault 或 Thales CipherTrust Manager),以及 POSTGRES_INITDB_ARGS 環境變數中的 --tde-kek-url 旗標,建立啟用 TDE 的叢集。
事前準備
HashiCorp Vault KMS
- 設定 HashiCorp Vault 的 KV-V2 Secret 引擎,確保金鑰加密金鑰 (KEK) 路徑和 JSON Web Token (JWT) 可用。
- 確認 AlloyDB Omni 有權讀取 JSON Web Token (JWT) 檔案,也就是驗證權杖。
Thales CipherTrust KMS
- 設定 Thales CipherTrust Manager,確保系統建立並可匯出機密金鑰加密金鑰 (KEK)。
- 確認您擁有 CipherTrust Manager 使用者帳戶 (
username和password),且具備驗證及匯出 KEK 密鑰的權限。
建立叢集
如要建立啟用 TDE 的叢集,您必須在初始化資料庫時,傳遞必要的 Key Management Service (KMS) 設定和驗證憑證。請按照「HashiCorp Vault KMS」一節 (使用 jwt 驗證) 或「Thales CipherTrust KMS」一節 (使用使用者名稱和密碼驗證) 的操作說明進行。
HashiCorp Vault KMS
選取容器執行階段的分頁標籤,使用 HashiCorp Vault 初始化 AlloyDB Omni。
Docker
docker run -d --name CONTAINER_NAME \ --network host \ -v DATA_DIR:/var/lib/postgresql/data \ -v VAULT_CERT_PATH_ON_DISK:VAULT_CERT_PATH \ -e VAULT_AUTH_TYPE=jwt \ -e VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \ -e VAULT_JWT_PATH=JWT_FILE_PATH \ -e VAULT_ROLE=VAULT_ROLE \ -e VAULT_CERT_PATH=VAULT_CERT_PATH \ -e POSTGRES_INITDB_ARGS=" \ --tde-kek-url=KEK_URL" \ google/alloydbomni:IMAGE_TAG
Docker
docker run -d --name CONTAINER_NAME \ --network host \ -v DATA_DIR:/var/lib/postgresql/data \ -v VAULT_CERT_PATH_ON_DISK:VAULT_CERT_PATH \ -e VAULT_AUTH_TYPE=jwt \ -e VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \ -e VAULT_JWT_PATH=JWT_FILE_PATH \ -e VAULT_ROLE=VAULT_ROLE \ -e VAULT_CERT_PATH=VAULT_CERT_PATH \ -e POSTGRES_INITDB_ARGS=" \ --tde-kek-url=KEK_URL" \ google/alloydbomni:IMAGE_TAG
Podman
podman run -d --name CONTAINER_NAME \ --network host \ -v DATA_DIR:/var/lib/postgresql/data \ -v VAULT_CERT_PATH_ON_DISK:VAULT_CERT_PATH \ -e VAULT_AUTH_TYPE=jwt \ -e VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \ -e VAULT_JWT_PATH=JWT_FILE_PATH \ -e VAULT_ROLE=VAULT_ROLE \ -e VAULT_CERT_PATH=VAULT_CERT_PATH \ -e POSTGRES_INITDB_ARGS=" \ --tde-kek-url=KEK_URL" \ google/alloydbomni:IMAGE_TAG
Podman
podman run -d --name CONTAINER_NAME \ --network host \ -v DATA_DIR:/var/lib/postgresql/data \ -v VAULT_CERT_PATH_ON_DISK:VAULT_CERT_PATH \ -e VAULT_AUTH_TYPE=jwt \ -e VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \ -e VAULT_JWT_PATH=JWT_FILE_PATH \ -e VAULT_ROLE=VAULT_ROLE \ -e VAULT_CERT_PATH=VAULT_CERT_PATH \ -e POSTGRES_INITDB_ARGS=" \ --tde-kek-url=KEK_URL" \ google/alloydbomni:IMAGE_TAG
更改下列內容:
CONTAINER_NAME:要建立的容器名稱。例如:alloydb-tde。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_ON_DISK:主機上的 Vault 憑證路徑。例如:/local/vault/config。VAULT_CERT_PATH:Vault 連線憑證在容器中的路徑。例如:/tde-tls。如未設定,系統會使用預設信任存放區中的憑證。KEK_URL:HashiCorp Vault 中 KEK 的完整網址。使用vault通訊協定將 HashiCorp Vault 指定為 KMS 提供者,例如vault://127.0.0.1:8200/v1/secret/data/alloydb_kek。IMAGE_TAG:使用18.4.0取得最新 Debian 映像檔,或使用18.4.0-ubi取得最新 UBI 映像檔。
Thales CipherTrust KMS
選取容器執行階段的分頁,使用 Thales CipherTrust Manager 初始化 AlloyDB Omni。
Docker
docker run -d --name CONTAINER_NAME \ --network host \ -v DATA_DIR:/var/lib/postgresql/data \ -v CIPHERTRUST_CERT_PATH_ON_DISK:CIPHERTRUST_CERT_PATH \ -e CIPHERTRUST_USER=CIPHERTRUST_USERNAME \ -e CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD \ -e CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH \ -e POSTGRES_INITDB_ARGS=" \ --tde-kek-url=KEK_URL" \ google/alloydbomni:IMAGE_TAG
Docker
docker run -d --name CONTAINER_NAME \ --network host \ -v DATA_DIR:/var/lib/postgresql/data \ -v CIPHERTRUST_CERT_PATH_ON_DISK:CIPHERTRUST_CERT_PATH \ -e CIPHERTRUST_USER=CIPHERTRUST_USERNAME \ -e CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD \ -e CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH \ -e POSTGRES_INITDB_ARGS=" \ --tde-kek-url=KEK_URL" \ google/alloydbomni:IMAGE_TAG
Podman
podman run -d --name CONTAINER_NAME \ --network host \ -v DATA_DIR:/var/lib/postgresql/data \ -v CIPHERTRUST_CERT_PATH_ON_DISK:CIPHERTRUST_CERT_PATH \ -e CIPHERTRUST_USER=CIPHERTRUST_USERNAME \ -e CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD \ -e CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH \ -e POSTGRES_INITDB_ARGS=" \ --tde-kek-url=KEK_URL" \ google/alloydbomni:IMAGE_TAG
Podman
podman run -d --name CONTAINER_NAME \ --network host \ -v DATA_DIR:/var/lib/postgresql/data \ -v CIPHERTRUST_CERT_PATH_ON_DISK:CIPHERTRUST_CERT_PATH \ -e CIPHERTRUST_USER=CIPHERTRUST_USERNAME \ -e CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD \ -e CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH \ -e POSTGRES_INITDB_ARGS=" \ --tde-kek-url=KEK_URL" \ google/alloydbomni:IMAGE_TAG
更改下列內容:
CONTAINER_NAME:要建立的容器名稱。例如:alloydb-tde。DATA_DIR:要裝載為 AlloyDB Omni 資料磁碟區的本機目錄。例如:/local/data。CIPHERTRUST_USERNAME:用於向 Thales CipherTrust Manager 驗證身分的使用者名稱。CIPHERTRUST_PASSWORD:Thales CipherTrust Manager 使用者的密碼。CIPHERTRUST_CERT_PATH_ON_DISK:主體機器上的 CipherTrust Manager TLS 憑證路徑。例如:/local/ciphertrust/certs。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。IMAGE_TAG:使用18.4.0取得最新 Debian 映像檔,或使用18.4.0-ubi取得最新 UBI 映像檔。
如要為溢出至 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 |
加密的資料區塊數量。 | 不適用 | 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 |
解密暫時區塊的總時間。 | 不適用 | 微秒 | counter |
alloydb_omni_database_tde_temp_encryption_time_us_total |
暫時區塊加密的總時間。 | 不適用 | 微秒 | counter |
alloydb_omni_database_tde_wal_blocks_decrypted_count_total |
解密的 WAL 區塊數量。 | 不適用 | counter | |
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 區塊加密作業的總耗時。 | 不適用 | 微秒 | 計數器 |
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 儲存空間的資料欄快取區塊數量。 | 不適用 | counter | |
tde_ce_cache_ssd_blocks_total_encryption_time_us |
加密溢出至 SSD 儲存空間的資料欄快取區塊,所花費的總時間。 | 不適用 | 微秒 | counter |
tde_ce_cache_ssd_blocks_total_decryption_time_us |
解密溢出至 SSD 儲存空間的資料欄快取區塊,所花費的總時間。 | 不適用 | 微秒 | counter |