建立啟用 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

  • 請參閱「規劃 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 (使用使用者名稱和密碼驗證)。

  1. 使用 RPM 安裝 AlloyDB Omni,準備環境並安裝 AlloyDB Omni RPM 套件。

  2. 初始化資料庫。

    HashiCorp Vault KMS

    針對使用 HashiCorp Vault 的正式工作負載,請採用這種方法。

    1. 執行下列指令,初始化已啟用 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。
    2. 如要在 /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。如未設定,系統會使用預設信任存放區中的憑證。
    3. 如要套用變更,請重新載入 systemd 精靈。

      sudo systemctl daemon-reload

    Thales CipherTrust KMS

    如要搭配 Thales CipherTrust Manager 處理正式環境工作負載,請採用這個方法。

    1. 執行下列指令,初始化已啟用 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。
    2. 如要在 /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。如未設定,系統會使用預設信任存放區中的憑證。
    3. 如要套用變更,請重新載入 systemd daemon。

      sudo systemctl daemon-reload

    檔案式 KMS

    請僅將此方法用於測試。

    如要使用檔案式金鑰在本機測試 TDE,您必須先在機器上產生 32 位元組的 KEK。

    1. 建立目錄、產生金鑰,並設定適當的權限。

      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
    2. 將本機檔案 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。
  3. 資料庫初始化完成後,請按照「使用 RPM 安裝 AlloyDB Omni」中的操作說明準備資料庫、設定主機,並啟動 systemd 服務。

  4. 如要為溢出至 SSD 儲存空間的資料欄引擎快取資料啟用 TDE,請連線至資料庫執行個體,然後執行下列查詢:

    ALTER SYSTEM SET google_columnar_engine.enable_tde_for_storage_cache = 'on';
    
  5. 重新啟動資料庫伺服器,讓變更生效。

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 資訊。
  • 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 暫時區塊加密所花費的總時間。 不適用 微秒 計數器
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 儲存空間的資料欄快取區塊,所花費的總時間。 不適用 微秒 計數器