เปิดใช้การเข้ารหัสข้อมูลโปร่งใส (TDE) ใน AlloyDB Omni RPM

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

  1. ใน คอนโซล Google Cloud บนหน้าตัวเลือกโปรเจ็กต์ ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud
  2. ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้ว

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

ไอคอนเพื่อเปิดใช้งาน Cloud Shell

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

เทอร์มินัล Google Cloud Shell แสดงสภาพแวดล้อมที่เชื่อมต่อ

3. สร้าง VM ของ Compute Engine

ในส่วนนี้ คุณจะสร้างเครื่องเสมือน (VM) ของ Compute Engine (GCE) ที่ใช้ Rocky Linux 9 พร้อมดิสก์ถาวรเฉพาะสำหรับข้อมูลฐานข้อมูล (/data1), ข้อมูลสำรอง/การตรวจสอบ (/obs) และพื้นที่ Swap

  1. กำหนดตัวแปรสภาพแวดล้อมสำหรับรหัสโปรเจ็กต์, ชื่อ 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. สร้างดิสก์ถาวรเพิ่มเติมสำหรับข้อมูลฐานข้อมูล, ข้อมูลสำรอง และพื้นที่ 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
    
  6. จัดสรรอินสแตนซ์ 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

  1. SSH เข้าสู่ VM ผ่าน Identity-Aware Proxy (IAP)
    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 ในดิสก์ 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
    
  4. กำหนดตัวแปรสภาพแวดล้อมสำหรับไดเรกทอรีฐานข้อมูลและไฟล์คีย์ 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>"
    
  5. สร้างไดเรกทอรีพื้นที่เก็บข้อมูลสำหรับฐานข้อมูลและพื้นที่เก็บข้อมูลคีย์ File KMS
    sudo mkdir -p $PGDATA
    sudo mkdir -p $KMS_DIR
    
  6. สร้างคีย์การเข้ารหัสคีย์ (KEK) ขนาด 32 ไบต์ที่ปลอดภัยด้วยการเข้ารหัสโดยใช้ OpenSSL สำหรับ File KMS
    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_REPOSITORY_URL ด้วย URL ของที่เก็บที่ได้รับทางอีเมลหลังจากกรอกแบบฟอร์มลงชื่อสมัครใช้ AlloyDB Omni RPM ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมของ AlloyDB Omni บน Linux

  1. สร้างไฟล์การกำหนดค่าที่เก็บ 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
    
  2. อัปเดตแคชที่เก็บ YUM และติดตั้งแพ็กเกจ AlloyDB Omni 18 Server RPM
    sudo yum makecache
    sudo dnf install -y alloydbomni18
    
  3. ติดตั้งที่เก็บ 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
    
  4. มอบหมายความเป็นเจ้าของ /data1 และไดเรกทอรีคีย์ KMS ให้กับผู้ใช้ postgres
    sudo 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")

  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. ตั้งค่าตัวแปรสภาพแวดล้อมของผู้ดูแลระบบและเริ่มต้นคลัสเตอร์ฐานข้อมูล TDE โดยใช้ alloydbomni18-setup initdb
    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. กำหนดค่าพอร์ตเซิร์ฟเวอร์ 5432 ใน postgresql.conf
    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. เชื่อมต่อกับฐานข้อมูล alloydbadmin โดยใช้ psql
    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. ค้นหาข้อมูลสถิติ TDE ภายในของ AlloyDB ในมุมมอง 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/
    

ประเด็นสำคัญในการยืนยันคีย์

  • ในอินสแตนซ์ฐานข้อมูลที่ไม่ใช่ TDE การเรียกใช้ grep กับไฟล์ความสัมพันธ์ของตารางจะแสดงสตริงข้อความธรรมดาบนดิสก์
  • ในอินสแตนซ์ฐานข้อมูลที่เปิดใช้ TDE grep จะแสดงผลลัพธ์เป็น 0 เนื่องจากไฟล์ข้อมูล, ดัชนี, บันทึกการเขียนล่วงหน้า (WAL) และข้อมูลชั่วคราวทั้งหมดได้รับการเข้ารหัสอย่างสมบูรณ์ด้วยการเข้ารหัสแบบบล็อก AES ที่จัดเก็บไว้

8. การทำความสะอาดข้อมูล

หลังจากทำแบบฝึกหัดเสร็จแล้ว ให้ล้างข้อมูลทรัพยากรเพื่อป้องกันการเรียกเก็บเงินค่าคอมพิวเตอร์ที่ไม่ต้องการ

  1. ยกเลิกการเชื่อมต่อจากเซสชัน SSH ของ VM
    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. ขอแสดงความยินดี

ขอแสดงความยินดี คุณทำ Codelab TDE บน AlloyDB Omni RPM เสร็จเรียบร้อยแล้ว

สิ่งที่เราได้พูดถึง

  • วิธีจัดสรรดิสก์พื้นที่เก็บข้อมูล (/data1, /obs), ตั้งค่า Swap และจัดรูปแบบระบบไฟล์ XFS
  • วิธีสร้างและจัดการคีย์การเข้ารหัสคีย์โดยใช้ File KMS
  • วิธีเริ่มต้นและเริ่มคลัสเตอร์ AlloyDB Omni ที่เปิดใช้ TDE โดยใช้เครื่องมือ RPM
  • วิธียืนยันการเข้ารหัสเมื่อไม่มีการเคลื่อนไหวโดยใช้การตรวจสอบดิสก์ดิบโดยตรง (grep)

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ AlloyDB Omni

10. แบบสำรวจ

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านคร่าวๆ อ่านและทำแบบฝึกหัดให้เสร็จ