建立啟用 TDE 的叢集

選取文件版本:

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

事前準備

  • 設定 HashiCorp Vault 的 KV-V2 Secret 引擎,確保金鑰加密金鑰 (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:ConfigMap 的名稱。TdeConfig 資源定義會使用 kek_url 和 token_path 中定義的值。
  • 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.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 已解密的資料區塊數量。 不適用 counter
    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 資料區塊加密作業的總耗時。 不適用 微秒 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 加密的暫時性區塊數量。 不適用 計數器
    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 區塊加密作業的總耗時。 不適用 微秒 計數器