在 AlloyDB Omni RPM 上啟用透明資料加密 (TDE)

1. 簡介

本程式碼實驗室將示範如何使用 RPM 套件,在 AlloyDB Omni 上設定及啟用透明資料加密 (TDE)。TDE 會加密靜態資料檔案、預先寫入記錄 (WAL) 和暫時性資料檔案,防止未經授權存取基礎實體儲存媒體,確保資料安全。

在本程式碼研究室中,您將瞭解如何佈建儲存空間磁碟區、使用 File KMS 初始化及執行啟用 TDE 的 AlloyDB Omni 叢集,並驗證磁碟檔案的待用資料加密。

必要條件

  • 從 Google Cloud 控制台存取 Google Cloud 專案和 Cloud Shell。
  • 已安裝並設定 Google Cloud SDK (gcloud)。如要瞭解如何安裝 gcloud,請參閱 gcloud-install

課程內容

  • 如何建立具有專屬資料庫、備份和交換磁碟的 Compute Engine VM。
  • 如何格式化儲存空間磁碟區 (XFS)、設定 /etc/fstab,以及準備資料路徑。
  • 如何使用 File KMS 產生及管理金鑰加密金鑰 (KEK)。
  • 如何安裝 AlloyDB Omni RPM 套件和 PostgreSQL 用戶端公用程式。
  • 如何使用 RPM 設定工具 (alloydbomni18-setup) 和 ,啟動啟用 TDE 的 AlloyDB Omni 叢集。--tde-kek-url
  • 如何使用原始檔案檢查 (grep) 驗證磁碟加密。

軟硬體需求

2. 設定和需求條件

專案設定

建立 Google Cloud 專案

  1. 在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案。
  2. 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。

啟動 Cloud Shell

雖然您可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是雲端執行的指令列環境。

啟用 Cloud Shell 的圖示

  1. 開啟 Google Cloud 控制台,然後點選右上角工具列的 Cloud Shell 圖示。您也可以在控制台中依序按下 G 和 S,或前往 shell.cloud.google.com 開啟 Cloud Shell。
  2. 佈建並連至環境預計只需要幾分鐘,完成後,您會看到終端機提示,表示可以輸入內容。

Google Cloud Shell 終端機顯示已連線的環境

3. 建立 Compute Engine VM

在本節中,您將建立執行 Rocky Linux 9 的 Compute Engine (GCE) 虛擬機器 (VM),並為資料庫資料 (/data1)、備份/觀測能力 (/obs) 和交換空間提供專屬的永久磁碟。

  1. 為專案 ID、VM 名稱、可用區和區域定義環境變數。
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-tde-vm"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. 設定預設專案。
    gcloud config set project $PROJECT
    
  3. 為 SSH 流量建立網路防火牆規則。
    gcloud compute firewall-rules create allow-ssh-alloydb-omni-tde \
        --project=$PROJECT \
        --direction=INGRESS \
        --action=allow \
        --rules=tcp:22 \
        --source-ranges="0.0.0.0/0"
    
  4. 由於 VM 是在沒有公開 IP 位址的情況下建立,請設定 Cloud Router 和 Cloud NAT 閘道,提供傳出網際網路存取權,以便下載 RPM 套件。如果專案區域中已有 Cloud NAT,請繼續操作。
    gcloud compute routers create alloydb-omni-tde-router \
        --project=$PROJECT \
        --network=default \
        --region=$REGION 2>/dev/null || true
    
    gcloud compute routers nats create alloydb-omni-tde-nat \
        --project=$PROJECT \
        --router=alloydb-omni-tde-router \
        --region=$REGION \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips 2>/dev/null || true
    
    注意:如果區域中已有 Cloud NAT 閘道,GCP 會傳回訊息,指出所有子網路已設定 NAT。您可以放心忽略這項錯誤,然後繼續操作。
  5. 為資料庫資料、備份和交換空間建立額外的永久磁碟。
    gcloud compute disks create $INSTANCE_NAME-data \
        --project=$PROJECT --zone=$ZONE --size=50GB --type=pd-balanced
    
    gcloud compute disks create $INSTANCE_NAME-obs \
        --project=$PROJECT --zone=$ZONE --size=50GB --type=pd-balanced
    
    gcloud compute disks create $INSTANCE_NAME-swap \
        --project=$PROJECT --zone=$ZONE --size=10GB --type=pd-balanced
    
  6. 佈建 Rocky Linux 9 VM 執行個體,並附加儲存空間磁碟區。
    gcloud compute instances create $INSTANCE_NAME \
        --project=$PROJECT \
        --zone=$ZONE \
        --machine-type=n2-highmem-16 \
        --image-family=rocky-linux-9 \
        --image-project=rocky-linux-cloud \
        --boot-disk-size=30GB \
        --boot-disk-type=pd-balanced \
        --disk=name=$INSTANCE_NAME-data,device-name=db-data,mode=rw \
        --disk=name=$INSTANCE_NAME-obs,device-name=obs,mode=rw \
        --disk=name=$INSTANCE_NAME-swap,device-name=swap,mode=rw \
        --no-address
    

4. 準備磁碟、系統調整和檔案 KMS 金鑰

在本節中,您會連線至 VM、格式化及掛接永久儲存空間磁碟區、設定交換空間、調整 SELinux,並使用 File KMS 產生 TDE 金鑰加密金鑰 (KEK)。

  1. 透過 Identity-Aware Proxy (IAP) 透過 SSH 連線至 VM。
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. 格式化並掛接資料磁碟區 (/data1) 和可觀測性/備份磁碟區 (/obs)。
    sudo mkdir -p /data1 /obs
    
    sudo parted /dev/disk/by-id/google-db-data mklabel gpt
    sudo parted /dev/disk/by-id/google-db-data mkpart primary 0% 100%
    
    sudo parted /dev/disk/by-id/google-obs mklabel gpt
    sudo parted /dev/disk/by-id/google-obs mkpart primary 0% 100%
    
    sleep 3
    sudo mkfs.xfs -L data /dev/disk/by-id/google-db-data-part1
    sudo mkfs.xfs -L obs /dev/disk/by-id/google-obs-part1
    
    echo -e "LABEL=data\t/data1\txfs\tdefaults\t0 0" | sudo tee -a /etc/fstab
    echo -e "LABEL=obs\t/obs\txfs\tdefaults\t0 0" | sudo tee -a /etc/fstab
    
    sudo systemctl daemon-reload
    sudo mount /data1
    sudo mount /obs
    
  3. 在專用交換磁碟上建立並啟用交換空間。
    SWAP_UUID=$(sudo mkswap /dev/disk/by-id/google-swap 2>/dev/null | awk '$0 ~ "UUID" {print $NF}')
    echo -e "${SWAP_UUID}\tswap\tswap\tdefaults\t0 0" | sudo tee -a /etc/fstab
    sudo swapon -a
    
  4. 定義資料庫目錄和檔案 KMS 金鑰檔案的環境變數。
    export PGDATA="/data1/18"
    export KMS_DIR="/data1/kms"
    export KEK_FILE="$KMS_DIR/tde_key"
    export ALLOYDB_OMNI_REPOSITORY_URL="<your-repository-url>"
    
  5. 為資料庫和檔案 KMS 金鑰儲存空間建立儲存空間目錄。
    sudo mkdir -p $PGDATA
    sudo mkdir -p $KMS_DIR
    
  6. 使用 OpenSSL 為 File KMS 產生 32 位元組的加密安全金鑰加密金鑰 (KEK)。
    sudo openssl rand -base64 32 | sudo tee $KEK_FILE
    sudo chmod 700 $KMS_DIR
    sudo chmod 600 $KEK_FILE
    
  7. 安裝必要的 SELinux 管理公用程式。
    sudo dnf install -y policycoreutils-python-utils
    

5. 安裝 AlloyDB Omni RPM 套件

設定套件存放區,並安裝 AlloyDB Omni 資料庫伺服器和標準 PostgreSQL 18 工具。

注意:填寫 AlloyDB Omni RPM 註冊表單後,您會收到內含存放區網址的電子郵件,請將 $ALLOYDB_OMNI_REPOSITORY_URL 替換為該網址。詳情請參閱「Linux 版 AlloyDB Omni 總覽」。

  1. 為 AlloyDB Omni 建立 YUM 存放區設定檔。
    sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF
    [alloydbomni]
    name=alloydbomni
    baseurl=$ALLOYDB_OMNI_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=1
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
  2. 更新 YUM 存放區快取,並安裝 AlloyDB Omni 18 伺服器 RPM 套件。
    sudo yum makecache
    sudo dnf install -y alloydbomni18
    
  3. 安裝官方 PostgreSQL PGDG RPM 存放區,並安裝標準 PostgreSQL 18 用戶端套件 (psql)。
    sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    sudo dnf install -y postgresql18
    
  4. 將 /data1 和 KMS 金鑰目錄的擁有權指派給 postgres 使用者。
    sudo chown -R postgres:postgres /data1 $KMS_DIR
    sudo chmod 755 /data1 $PGDATA
    

6. 啟動啟用 TDE 的叢集

設定資源配額、開啟主機防火牆連接埠,然後透過檔案 KMS 金鑰 (POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE") 初始化啟用透明資料加密的 AlloyDB Omni 叢集。

  1. 將 SELinux 設為寬容模式,並為 PostgreSQL 設定主機防火牆規則。
    sudo setenforce 0
    sudo firewall-cmd --add-port=5432/tcp --permanent
    sudo firewall-cmd --reload
    
  2. 設定 systemd 服務覆寫參數,指派記憶體和 CPU 資源限制。
    sudo mkdir -p /etc/systemd/system/alloydbomni18.service.d
    sudo tee /etc/systemd/system/alloydbomni18.service.d/override.conf << EOF
    [Service]
    CPUQuota=90%
    MemoryMax=80%
    EOF
    sudo chown root:root /etc/systemd/system/alloydbomni18.service.d/override.conf
    sudo chmod 644 /etc/systemd/system/alloydbomni18.service.d/override.conf
    sudo systemctl daemon-reload
    
  3. 設定管理員環境變數,並使用 alloydbomni18-setup initdb 初始化 TDE 資料庫叢集。
    export PGPASSWORD="YourStrongPassword123!"
    export POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE"
    
    sudo POSTGRES_INITDB_ARGS="$POSTGRES_INITDB_ARGS" PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \
        /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  4. 在 postgresql.conf 中設定伺服器通訊埠 5432。
    sudo sed -i "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5432/" $PGDATA/postgresql.conf
    
  5. 使用 alloydbomni18-setup preparedb 準備系統目錄和擴充功能。
    sudo PGPORT=5432 PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \
        /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  6. 啟用並啟動 alloydbomni18 systemd 服務。
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    確認輸出內容顯示 Active: active (running)。

7. 資料庫作業和 TDE 磁碟加密驗證

連線至 TDE 資料庫、插入範例記錄、執行 CHECKPOINT 強制將資料寫入磁碟,並執行直接磁碟掃描 (grep),證明資料已進行靜態資料加密。

  1. 使用 psql 連線至 alloydbadmin 資料庫。
    PGPASSWORD="YourStrongPassword123!" /usr/lib/postgresql/18/bin/psql -h localhost -p 5432 -U postgres -d alloydbadmin
    
  2. 建立測試資料表、插入機密字串,然後觸發檢查點,將髒緩衝區寫入儲存空間。
    CREATE TABLE customer_credentials (
        id SERIAL PRIMARY KEY,
        username TEXT,
        secret_passcode TEXT
    );
    
    INSERT INTO customer_credentials (username, secret_passcode)
    VALUES ('alice_user', 'UNENCRYPTED_DEMO_SECRET_98765');
    
    CHECKPOINT;
    
  3. 查詢內部 AlloyDB TDE 統計資料檢視畫面 pgsnap.g$tde_stats,驗證有效加密狀態、KEK 位置和區塊指標。
    SELECT is_tde_enabled, tde_kek_url, tde_data_blocks_encrypted, tde_wal_blocks_encrypted
    FROM pgsnap.g$tde_stats;
    
    範例輸出內容,確認已啟用 TDE (is_tde_enabled = t)、KEK 檔案路徑和加密區塊計數器:
     is_tde_enabled |        tde_kek_url        | tde_data_blocks_encrypted | tde_wal_blocks_encrypted 
    ----------------+---------------------------+---------------------------+--------------------------
     t              | file:///data1/kms/tde_key |                      2023 |                     2717
    (1 row)
    
  4. 結束「psql」。
    \q
    
  5. 在 /data1/18/base/ 下搜尋原始資料庫儲存空間檔案的密碼字串,驗證磁碟上的 TDE 保護機制。
    sudo grep -a -rn "UNENCRYPTED_DEMO_SECRET_98765" /data1/18/base/
    

重點摘要:

  • 在 Non-TDE 資料庫執行個體中,對資料表關係檔案執行 grep 會在磁碟上顯示純文字字串。
  • 在啟用 TDE 的資料庫執行個體上,grep 會傳回零個相符項目,因為所有資料檔案、索引、預寫記錄 (WAL) 和暫時資料都會以 AES 區塊密碼完全加密。

8. 清除

完成練習後,請清理資源,以免產生不必要的運算費用。

  1. 中斷與 VM 的 SSH 工作階段連線。
    exit
    
  2. 移除 GCE 虛擬機器和連結的永久磁碟。
    gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet
    gcloud compute disks delete $INSTANCE_NAME-data $INSTANCE_NAME-obs $INSTANCE_NAME-swap --zone=$ZONE --project=$PROJECT --quiet
    
  3. 刪除防火牆規則和 Cloud NAT 閘道資源。
    gcloud compute firewall-rules delete allow-ssh-alloydb-omni-tde --project=$PROJECT --quiet
    gcloud compute routers nats delete alloydb-omni-tde-nat --router=alloydb-omni-tde-router --region=$REGION --project=$PROJECT --quiet
    gcloud compute routers delete alloydb-omni-tde-router --region=$REGION --project=$PROJECT --quiet
    

9. 恭喜

恭喜!您已順利完成 AlloyDB Omni RPM 的 TDE 程式碼研究室。

涵蓋內容

  • 如何佈建儲存空間磁碟 (/data1、/obs)、設定交換空間,以及格式化 XFS 檔案系統。
  • 如何使用 File KMS 產生及管理金鑰加密金鑰。
  • 如何使用 RPM 工具初始化及啟動啟用 TDE 的 AlloyDB Omni 叢集。
  • 如何使用直接原始磁碟檢查 (grep) 驗證靜態資料加密。

詳情請參閱 AlloyDB Omni 說明文件。

10. 問卷調查

您會如何使用本教學課程?

僅閱讀內容 閱讀內容並完成練習