建立啟用 TDE 的叢集

選取文件版本:

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

事前準備

  • 選用:如要在 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:ConfigMap 的名稱。kek_url 和 token_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 自訂資源時,您會用到這個 Secret 名稱。

建立 TdeConfig CRD

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

請確認 postgres 使用者可以存取 JWT 權杖的路徑,且可透過網路連上 Vault 執行個體。

如要建立 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_NAME:TdeConfig 資源的名稱。
  • JWT_AUTH_MOUNT_PATH:驗證引擎在 HashiCorp Vault 中掛接的路徑,由您的設定定義。例如:auth/kms。
  • (選用) VAULT_ROLE:在保管箱設定中定義的用戶端角色。用戶端角色會驗證 JWT,並反映該角色在 HashiCorp Vault 中獲得的特定存取權和身分。
  • VAULT_SECRET_NAME:含有 vault 連線憑證的 Secret 名稱。例如:vault-secret。

部署 DBCluster

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

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: "DBCLUSTER_NAME"
    spec:
      databaseVersion: "18.3.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 資源的命名空間。

如要為溢出至 SSD 的資料欄快取啟用 TDE,請按照下列方式修補 DBCluster:

kubectl patch dbcluster `DBCLUSTER_NAME` \
  -n `DBCLUSTER_NAMESPACE` \
  -p '{"spec":{"primarySpec":{"parameters": {"google_columnar_engine.enable_tde_for_storage_cache": "on"}}}}' \
  --type=merge

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 解密暫時區塊的總時間。 不適用 微秒 計數器
alloydb_omni_database_tde_temp_encryption_time_us_total 暫時區塊加密的總時間。 不適用 微秒 counter
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 區塊解密中花費的總時間。 不適用 微秒 counter
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 解密冷快取區塊的總時間。 不適用 微秒 counter
tde_ce_cache_ssd_blocks_encrypted 溢出至 SSD 儲存空間並經過加密的資料欄快取區塊數量。 不適用 計數器
tde_ce_cache_ssd_blocks_decrypted 已解密並溢出至 SSD 儲存空間的資料欄快取區塊數量。 不適用 計數器
tde_ce_cache_ssd_blocks_total_encryption_time_us 加密溢出至 SSD 儲存空間的資料欄快取區塊,所花費的總時間。 不適用 微秒 計數器
tde_ce_cache_ssd_blocks_total_decryption_time_us 解密溢出至 SSD 儲存空間的資料欄快取區塊,所花費的總時間。 不適用 微秒 counter