1. บทนำ
Codelab นี้แสดงวิธีกำหนดค่าและเปิดใช้ Transparent Data Encryption (TDE) ใน AlloyDB Omni โดยใช้แพ็กเกจ RPM TDE จะเข้ารหัสไฟล์ข้อมูล, บันทึกการเขียนล่วงหน้า (WAL) และไฟล์ข้อมูลชั่วคราวที่จัดเก็บไว้ เพื่อให้การคุ้มครองข้อมูลจากการเข้าถึงสื่อบันทึกข้อมูลจริงที่อยู่เบื้องหลังโดยไม่ได้รับอนุญาต
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีจัดสรรโวลุ่มพื้นที่เก็บข้อมูล, เริ่มต้นและเรียกใช้คลัสเตอร์ AlloyDB Omni ที่เปิดใช้ TDE โดยใช้ File KMS และยืนยันการเข้ารหัสข้อมูลที่จัดเก็บไว้ในไฟล์ดิสก์
ข้อกำหนดเบื้องต้น
- สิทธิ์เข้าถึงโปรเจ็กต์ Google Cloud และ Cloud Shell จากคอนโซล Google Cloud
- ติดตั้งและกำหนดค่า Google Cloud SDK (
gcloud) ดูรายละเอียดเกี่ยวกับการติดตั้ง gcloud ได้ที่ gcloud-install
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้าง VM ของ Compute Engine ที่มีดิสก์เฉพาะสำหรับฐานข้อมูล, ข้อมูลสำรอง และดิสก์ Swap
- วิธีจัดรูปแบบโวลุ่มพื้นที่เก็บข้อมูล (XFS), กำหนดค่า
/etc/fstabและเตรียมเส้นทางข้อมูล - วิธีสร้างและจัดการคีย์การเข้ารหัสคีย์ (KEK) โดยใช้ File KMS
- วิธีติดตั้งแพ็กเกจ AlloyDB Omni RPM และยูทิลิตีไคลเอ็นต์ PostgreSQL
- วิธีเริ่มต้นคลัสเตอร์ AlloyDB Omni ที่เปิดใช้ TDE โดยใช้เครื่องมือการตั้งค่า RPM (
alloydbomni18-setup) และ--tde-kek-url - วิธียืนยันการเข้ารหัสบนดิสก์โดยใช้การตรวจสอบไฟล์ดิบ (
grep)
สิ่งที่คุณต้องมี
- รับลิงก์ URL ไปยัง AlloyDB Omni RPM โดยกรอกแบบฟอร์มลงชื่อสมัครใช้ AlloyDB Omni RPM หรือดูภาพรวมของ AlloyDB Omni บน Linux ระบบจะส่ง URL ของที่เก็บไปยังอีเมลที่คุณลงทะเบียนไว้
- เทอร์มินัลที่ใช้งานได้ซึ่งมีสิทธิ์เข้าถึง Google Cloud (แนะนำให้ใช้ Cloud Shell)
2. การตั้งค่าและข้อกำหนด
การตั้งค่าโปรเจ็กต์
สร้างโปรเจ็กต์ Google Cloud
- ใน คอนโซล Google Cloud บนหน้าตัวเลือกโปรเจ็กต์ ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud
- ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้ว
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

- เปิดคอนโซล Google Cloud แล้วคลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน นอกจากนี้ คุณยังเปิด Cloud Shell ได้โดยกด
Gแล้วตามด้วยSในคอนโซล หรือไปที่ shell.cloud.google.com - โดยปกติแล้วระบบจะใช้เวลาสักครู่ในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม เมื่อเสร็จแล้ว คุณจะเห็นข้อความแจ้งของเทอร์มินัลที่พร้อมรับอินพุต

3. สร้าง VM ของ Compute Engine
ในส่วนนี้ คุณจะสร้างเครื่องเสมือน (VM) ของ Compute Engine (GCE) ที่ใช้ Rocky Linux 9 พร้อมดิสก์ถาวรเฉพาะสำหรับข้อมูลฐานข้อมูล (/data1), ข้อมูลสำรอง/การตรวจสอบ (/obs) และพื้นที่ Swap
- กำหนดตัวแปรสภาพแวดล้อมสำหรับรหัสโปรเจ็กต์, ชื่อ 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 - สร้างดิสก์ถาวรเพิ่มเติมสำหรับข้อมูลฐานข้อมูล, ข้อมูลสำรอง และพื้นที่ Swap
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 - จัดสรรอินสแตนซ์ VM ของ Rocky Linux 9 พร้อมโวลุ่มพื้นที่เก็บข้อมูลที่แนบไว้
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. เตรียมดิสก์, การปรับแต่งระบบ และคีย์ File KMS
ในส่วนนี้ คุณจะเชื่อมต่อกับ VM, จัดรูปแบบและติดตั้งโวลุ่มพื้นที่เก็บข้อมูลถาวร, กำหนดค่า Swap, ปรับแต่ง SELinux และสร้างคีย์การเข้ารหัสคีย์ (KEK) ของ TDE โดยใช้ File KMS
- SSH เข้าสู่ VM ผ่าน Identity-Aware Proxy (IAP)
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 ในดิสก์ Swap เฉพาะ
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 - กำหนดตัวแปรสภาพแวดล้อมสำหรับไดเรกทอรีฐานข้อมูลและไฟล์คีย์ File 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>" - สร้างไดเรกทอรีพื้นที่เก็บข้อมูลสำหรับฐานข้อมูลและพื้นที่เก็บข้อมูลคีย์ File KMS
sudo mkdir -p $PGDATA sudo mkdir -p $KMS_DIR - สร้างคีย์การเข้ารหัสคีย์ (KEK) ขนาด 32 ไบต์ที่ปลอดภัยด้วยการเข้ารหัสโดยใช้ OpenSSL สำหรับ File KMS
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_REPOSITORY_URL ด้วย URL ของที่เก็บที่ได้รับทางอีเมลหลังจากกรอกแบบฟอร์มลงชื่อสมัครใช้ AlloyDB Omni RPM ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมของ AlloyDB Omni บน Linux
- สร้างไฟล์การกำหนดค่าที่เก็บ YUM สำหรับ AlloyDB Omni
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 Server RPM
sudo yum makecache sudo dnf install -y alloydbomni18 - ติดตั้งที่เก็บ RPM ของ PGDG PostgreSQL อย่างเป็นทางการและติดตั้งแพ็กเกจไคลเอ็นต์ 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 ให้กับผู้ใช้postgressudo chown -R postgres:postgres /data1 $KMS_DIR sudo chmod 755 /data1 $PGDATA
6. เริ่มต้นคลัสเตอร์ที่เปิดใช้ TDE
กำหนดค่าโควต้าทรัพยากร, เปิดพอร์ตไฟร์วอลล์ของโฮสต์ และเริ่มต้นคลัสเตอร์ AlloyDB Omni โดยเปิดใช้ Transparent Data Encryption ผ่านคีย์ File KMS (POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE")
- ตั้งค่า 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 - ตั้งค่าตัวแปรสภาพแวดล้อมของผู้ดูแลระบบและเริ่มต้นคลัสเตอร์ฐานข้อมูล TDE โดยใช้
alloydbomni18-setup initdbexport 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 - กำหนดค่าพอร์ตเซิร์ฟเวอร์ 5432 ใน
postgresql.confsudo sed -i "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5432/" $PGDATA/postgresql.conf - เตรียมแคตตาล็อกและส่วนขยายของระบบโดยใช้
alloydbomni18-setup preparedbsudo 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) เพื่อพิสูจน์การเข้ารหัสเมื่อไม่มีการเคลื่อนไหว
- เชื่อมต่อกับฐานข้อมูล
alloydbadminโดยใช้psqlPGPASSWORD="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; - ค้นหาข้อมูลสถิติ TDE ภายในของ AlloyDB ในมุมมอง
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/
ประเด็นสำคัญในการยืนยันคีย์
- ในอินสแตนซ์ฐานข้อมูลที่ไม่ใช่ TDE การเรียกใช้
grepกับไฟล์ความสัมพันธ์ของตารางจะแสดงสตริงข้อความธรรมดาบนดิสก์ - ในอินสแตนซ์ฐานข้อมูลที่เปิดใช้ TDE
grepจะแสดงผลลัพธ์เป็น 0 เนื่องจากไฟล์ข้อมูล, ดัชนี, บันทึกการเขียนล่วงหน้า (WAL) และข้อมูลชั่วคราวทั้งหมดได้รับการเข้ารหัสอย่างสมบูรณ์ด้วยการเข้ารหัสแบบบล็อก AES ที่จัดเก็บไว้
8. การทำความสะอาดข้อมูล
หลังจากทำแบบฝึกหัดเสร็จแล้ว ให้ล้างข้อมูลทรัพยากรเพื่อป้องกันการเรียกเก็บเงินค่าคอมพิวเตอร์ที่ไม่ต้องการ
- ยกเลิกการเชื่อมต่อจากเซสชัน SSH ของ VM
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. ขอแสดงความยินดี
ขอแสดงความยินดี คุณทำ Codelab TDE บน AlloyDB Omni RPM เสร็จเรียบร้อยแล้ว
สิ่งที่เราได้พูดถึง
- วิธีจัดสรรดิสก์พื้นที่เก็บข้อมูล (
/data1,/obs), ตั้งค่า Swap และจัดรูปแบบระบบไฟล์ XFS - วิธีสร้างและจัดการคีย์การเข้ารหัสคีย์โดยใช้ File KMS
- วิธีเริ่มต้นและเริ่มคลัสเตอร์ AlloyDB Omni ที่เปิดใช้ TDE โดยใช้เครื่องมือ RPM
- วิธียืนยันการเข้ารหัสเมื่อไม่มีการเคลื่อนไหวโดยใช้การตรวจสอบดิสก์ดิบโดยตรง (
grep)
ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ AlloyDB Omni