建立啟用 TDE 的叢集

選取文件版本:

AlloyDB Omni Kubernetes 運算子會使用 TdeConfig 自訂資源,自動執行透明資料加密 (TDE) 叢集的生命週期。這個資源會儲存 Key Management Service (KMS) 連線詳細資料,讓運算子安全地將必要憑證注入資料庫 Pod。

事前準備

  • 設定 HashiCorp Vault 的 KV-V2 密碼引擎,確保金鑰加密金鑰 (KEK) 路徑和 JSON Web Token (JWT) 可用。
  • 確認 AlloyDB Omni 有權讀取 JWT 權杖檔案。
  • 選用:如要在 OpenShift 上部署啟用 TDE 的叢集,請將 hostmount-anyuid 安全性環境限制 (SCC) 授予執行資料庫叢集的 DBCluster 服務帳戶。

    oc adm policy add-scc-to-user hostmount-anyuid -z DBCLUSTER_NAME-sa -n DBCLUSTER_NAMESPACE

    DBCLUSTER_NAME 替換為 DBCluster 的名稱,並將 DBCLUSTER_NAMESPACE 替換為您要建立 DBCluster 資源的命名空間。

設定保管箱存取權

建立包含 KEK 路徑和驗證憑證的密鑰資源。

apiVersion: v1
kind: ConfigMap
metadata:
  name: CONFIG_MAP_NAME
data:
  kek_url: "KEK_URL"
  token_path: "JWT_TOKEN_PATH"

更改下列內容:

  • CONFIG_MAP_NAME:設定對應的名稱。kek_urltoken_path 中定義的值會用於 TdeConfig 資源定義。
  • KEK_URL:HashiCorp Vault 中 KEK 的完整網址。使用 vault 做為通訊協定,將 HashiCorp Vault 指定為 KMS 提供者,例如 vault://vault.default.svc:8200/v1/secrets/data/alloydb_kek
  • JWT_TOKEN_PATH:節點上 JWT 權杖的路徑。例如:/tmp/token。叢集中的所有節點都必須使用相同的 JWT 權杖存取路徑。

建立 TLS 密鑰

如要建立 TLS 密鑰來儲存憑證,請執行下列指令:

kubectl create secret tls VAULT_SECRET_NAME \
    --cert=vault.crt \
    --key=vault.key

kubectl patch secret VAULT_SECRET_NAME \
    -p '{"data":{"ca.crt":"'$(base64 -w 0 vault.crt)'"}}' \
    --type=merge

VAULT_SECRET_NAME 替換為 TLS 密鑰的名稱。建立 TdeConfig 自訂資源時,請使用這個密碼名稱。

建立 TdeConfig CRD

建立 TdeConfig 資源,定義 AlloyDB Omni 如何與保存庫通訊,以擷取 KEK。系統僅支援 jwt 驗證類型。請務必在與 DbCluster 資源相同的命名空間中建立 TdeConfig 資源。

確認 postgres 使用者可以存取 JWT 權杖的路徑,且保管箱執行個體可透過網路連線。

如要建立 TdeConfig 資源,請按照下列步驟操作:

建立並套用 TdeConfig 資源的資訊清單。

  apiVersion: alloydbomni.dbadmin.goog/v1
  kind: TdeConfig
  metadata:
    name: TDE_CONFIG_NAME
  spec:
    kekUrlRef:
      name: CONFIG_MAP_NAME
      key: kek_url
    kmsProvider:
      vault:
        authType: "jwt"
        authMount: "JWT_AUTH_MOUNT_PATH"
        jwt:
          pathRef:
            name: "CONFIG_MAP_NAME"
            key: "token_path"
          role: "VAULT_ROLE"
    tls:
      certSecret:
        name: "VAULT_SECRET_NAME"

更改下列內容:

  • TDE_CONFIG_NAMETdeConfig 資源的名稱。
  • JWT_AUTH_MOUNT_PATH:驗證引擎在 HashiCorp Vault 內掛接的路徑,由您的設定定義。例如:auth/kms
  • (選用) VAULT_ROLE:在保管箱設定中定義的用戶端角色。用戶端角色會驗證 JWT,並反映角色在 HashiCorp Vault 中獲得的特定存取權和身分。
  • VAULT_SECRET_NAME:包含保存庫連線憑證的密鑰名稱。例如:vault-secret

部署 DBCluster

  1. 建立並套用資訊清單,建立參照 TdeConfig 資源的 DBCluster 資源。如要進一步瞭解如何建立資料庫叢集,請參閱「建立資料庫叢集」。

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: "DBCLUSTER_NAME"
    spec:
      databaseVersion: "18.1.0"
      features:
        transparentDataEncryption:
          tdeConfigRef:
            name: "TDE_CONFIG_NAME"
    
    [...]
    

    TDE_CONFIG_NAME 替換為您的TdeConfig資源名稱,並將 DBCLUSTER_NAME 替換為您要建立的DBCluster名稱。

  2. 選用:如果您要在 Openshift 環境中部署 DBCluster,請使用 hostmount-anyuid 註解標註 DBCluster 資源。

    kubectl annotate dbclusters.alloydbomni.dbadmin.goog `DBCLUSTER_NAME` -n `DBCLUSTER_NAMESPACE` openshift.io/scc=anyuid
    

    DBCLUSTER_NAME 替換為 DBCluster 資源的名稱,並將 DBCLUSTER_NAMESPACE 替換為要建立 DBCluster 資源的命名空間。

查看 TDE 指標

叢集初始化後,請完成下列步驟,確認 TDE 已啟用並查看相關 TDE 指標。

  1. 使用 psql 或偏好的用戶端連線至資料庫。如需連線至執行個體的詳細操作說明,請參閱「執行並連線至 AlloyDB Omni」。
  2. 執行下列指令:

    select * FROM pgsnap.g$tde_stats;
    

    如果成功啟用 TDE,輸出內容會顯示 TDE 指標,例如是否已啟用 TDE、KEK 網址、KEK 版本和 KEK 建立時間戳記。

    下表說明各項指標的意義。

    名稱 說明 標籤 單位 類型
    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 資訊。
    • kek_version:用於金鑰包裝的 KEK
      版本。
    • kek_url:KMS 中 KEK 的完整路徑
    • kek_creation_timestamp
      目前使用的 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 區塊加密的總時間。 不適用 微秒 計數器