建立啟用 TDE 的叢集

您可以在 AlloyDB Omni 中啟用透明資料加密 (TDE),保護靜態資料和機密資訊。本文說明如何在資料庫初始化期間,提供必要的 Key Management Service (KMS) 環境變數 (適用於 HashiCorp Vault 或 Thales CipherTrust Manager),以及 POSTGRES_INITDB_ARGS 環境變數中的 --tde-kek-url 旗標,建立啟用 TDE 的叢集。

事前準備

HashiCorp Vault KMS

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 資訊。
  • 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 已加密的暫時區塊數量。 不適用 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