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) 驗證磁碟加密。
軟硬體需求
- 填寫 AlloyDB Omni RPM 註冊表單,或參閱「Linux 版 AlloyDB Omni 總覽」,取得 AlloyDB Omni RPM 的網址連結。我們會將存放區網址傳送至您註冊的電子郵件地址。
- 可存取 Google Cloud 的終端機 (建議使用 Cloud Shell)。
2. 設定和需求條件
專案設定
建立 Google Cloud 專案
- 在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案。
- 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。
啟動 Cloud Shell
雖然您可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是雲端執行的指令列環境。

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

3. 建立 Compute Engine VM
在本節中,您將建立執行 Rocky Linux 9 的 Compute Engine (GCE) 虛擬機器 (VM),並為資料庫資料 (/data1)、備份/觀測能力 (/obs) 和交換空間提供專屬的永久磁碟。
- 為專案 ID、VM 名稱、可用區和區域定義環境變數。
export PROJECT="your-project-id" export INSTANCE_NAME="alloydb-omni-tde-vm" export ZONE="us-central1-c" export REGION="us-central1" - 設定預設專案。
gcloud config set project $PROJECT - 為 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" - 由於 VM 是在沒有公開 IP 位址的情況下建立,請設定 Cloud Router 和 Cloud NAT 閘道,提供傳出網際網路存取權,以便下載 RPM 套件。如果專案區域中已有 Cloud NAT,請繼續操作。
注意:如果區域中已有 Cloud NAT 閘道,GCP 會傳回訊息,指出所有子網路已設定 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 - 為資料庫資料、備份和交換空間建立額外的永久磁碟。
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 - 佈建 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)。
- 透過 Identity-Aware Proxy (IAP) 透過 SSH 連線至 VM。
gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap - 格式化並掛接資料磁碟區 (
/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 - 在專用交換磁碟上建立並啟用交換空間。
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 - 定義資料庫目錄和檔案 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>" - 為資料庫和檔案 KMS 金鑰儲存空間建立儲存空間目錄。
sudo mkdir -p $PGDATA sudo mkdir -p $KMS_DIR - 使用 OpenSSL 為 File KMS 產生 32 位元組的加密安全金鑰加密金鑰 (KEK)。
sudo openssl rand -base64 32 | sudo tee $KEK_FILE sudo chmod 700 $KMS_DIR sudo chmod 600 $KEK_FILE - 安裝必要的 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 總覽」。
- 為 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 - 更新 YUM 存放區快取,並安裝 AlloyDB Omni 18 伺服器 RPM 套件。
sudo yum makecache sudo dnf install -y alloydbomni18 - 安裝官方 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 - 將
/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 叢集。
- 將 SELinux 設為寬容模式,並為 PostgreSQL 設定主機防火牆規則。
sudo setenforce 0 sudo firewall-cmd --add-port=5432/tcp --permanent sudo firewall-cmd --reload - 設定 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 - 設定管理員環境變數,並使用
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 - 在
postgresql.conf中設定伺服器通訊埠 5432。sudo sed -i "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5432/" $PGDATA/postgresql.conf - 使用
alloydbomni18-setup preparedb準備系統目錄和擴充功能。sudo PGPORT=5432 PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb - 啟用並啟動
alloydbomni18systemd 服務。 確認輸出內容顯示sudo systemctl enable alloydbomni18 sudo systemctl start alloydbomni18 sudo systemctl status alloydbomni18Active: active (running)。
7. 資料庫作業和 TDE 磁碟加密驗證
連線至 TDE 資料庫、插入範例記錄、執行 CHECKPOINT 強制將資料寫入磁碟,並執行直接磁碟掃描 (grep),證明資料已進行靜態資料加密。
- 使用
psql連線至alloydbadmin資料庫。PGPASSWORD="YourStrongPassword123!" /usr/lib/postgresql/18/bin/psql -h localhost -p 5432 -U postgres -d alloydbadmin - 建立測試資料表、插入機密字串,然後觸發檢查點,將髒緩衝區寫入儲存空間。
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; - 查詢內部 AlloyDB TDE 統計資料檢視畫面
pgsnap.g$tde_stats,驗證有效加密狀態、KEK 位置和區塊指標。 範例輸出內容,確認已啟用 TDE (SELECT is_tde_enabled, tde_kek_url, tde_data_blocks_encrypted, tde_wal_blocks_encrypted FROM pgsnap.g$tde_stats;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) - 結束「
psql」。\q - 在
/data1/18/base/下搜尋原始資料庫儲存空間檔案的密碼字串,驗證磁碟上的 TDE 保護機制。sudo grep -a -rn "UNENCRYPTED_DEMO_SECRET_98765" /data1/18/base/
重點摘要:
- 在 Non-TDE 資料庫執行個體中,對資料表關係檔案執行
grep會在磁碟上顯示純文字字串。 - 在啟用 TDE 的資料庫執行個體上,
grep會傳回零個相符項目,因為所有資料檔案、索引、預寫記錄 (WAL) 和暫時資料都會以 AES 區塊密碼完全加密。
8. 清除
完成練習後,請清理資源,以免產生不必要的運算費用。
- 中斷與 VM 的 SSH 工作階段連線。
exit - 移除 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 - 刪除防火牆規則和 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 說明文件。