1. מבוא
ב-Codelab הזה נדגים איך מגדירים ומפעילים הצפנת נתונים שקופה (TDE) ב-AlloyDB Omni באמצעות חבילות RPM. הצפנת TDE מצפינה קובצי נתונים, יומני WAL וקובצי נתונים זמניים במצב מנוחה, ומספקת הגנה על הנתונים מפני גישה לא מורשית למדיה פיזית בסיסית לאחסון.
ב-Codelab הזה תלמדו איך להקצות נפחי אחסון, לאתחל ולהפעיל אשכול AlloyDB Omni עם TDE באמצעות File KMS, ואיך לוודא שהנתונים במנוחה מוצפנים בקבצים בדיסק.
דרישות מוקדמות
- גישה לפרויקט ב-Google Cloud ול-Cloud Shell ממסוף Google Cloud.
- ה-SDK של Google Cloud (
gcloud) מותקן ומוגדר. פרטים על התקנת gcloud זמינים במאמר gcloud-install.
מה תלמדו
- איך יוצרים מכונה וירטואלית ב-Compute Engine עם מסד נתונים ייעודי, גיבוי ודיסקים להחלפה.
- איך מעצבים נפחי אחסון (XFS), מגדירים את
/etc/fstabומכינים נתיבי נתונים. - איך ליצור ולנהל מפתחות להצפנת מפתחות (KEK) באמצעות File KMS.
- איך להתקין חבילות AlloyDB Omni RPM וכלי לקוח של PostgreSQL.
- איך להפעיל אשכול AlloyDB Omni עם TDE באמצעות כלי ההגדרה של RPM (
alloydbomni18-setup) ו---tde-kek-url. - איך מאמתים הצפנה בדיסק באמצעות בדיקת קובץ גולמי (
grep).
מה תצטרכו
- כדי לקבל קישור לכתובת URL של חבילות RPM של AlloyDB Omni, ממלאים את טופס ההרשמה ל-AlloyDB Omni RPM או מעיינים בסקירה הכללית של AlloyDB Omni ב-Linux. כתובת ה-URL של המאגר תישלח לכתובת האימייל הרשומה שלכם.
- טרמינל פעיל עם גישה ל-Google Cloud (מומלץ להשתמש ב-Cloud Shell).
2. הגדרה ודרישות
הגדרת פרויקט
יצירת פרויקט ב-Google Cloud
- במסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים פרויקט ב-Google Cloud או יוצרים פרויקט.
- הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
מפעילים את Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל בשיעור Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

- פותחים את מסוף Google Cloud ולוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה. אפשר גם לפתוח את Cloud Shell על ידי הקשה על
Gואז עלSבמסוף, או על ידי מעבר לכתובת shell.cloud.google.com. - בדרך כלל חולפות כמה שניות עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, תוצג שורת פקודה במסוף שמוכנה לקלט.

3. איך יוצרים מכונה וירטואלית ב-Compute Engine?
בקטע הזה, יוצרים מכונה וירטואלית (VM) ב-Compute Engine (GCE) עם Rocky Linux 9, עם דיסקים לאחסון מתמיד (persistent disk) ייעודיים לנתוני מסד הנתונים (/data1), לגיבויים ולניטור (/obs) ולמרחב החלפה.
- מגדירים משתני סביבה למזהה הפרויקט, לשם המכונה הווירטואלית, לאזור ולמיקום.
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" - מכיוון שהמכונה הווירטואלית נוצרת ללא כתובת 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 - יצירת דיסקים נוספים של אחסון מתמיד (persistent disks) לנתוני מסד הנתונים, לגיבויים ולמרחב החלפה.
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. הכנת דיסקים, כוונון מערכת ומפתח KMS של קובץ
בקטע הזה מתחברים למכונה הווירטואלית, מפרמטים את אמצעי האחסון הקבועים ומטמיעים אותם, מגדירים את קובץ ההחלפה, מבצעים אופטימיזציה של SELinux ויוצרים את המפתח להצפנת מפתחות הצפנה (KEK) של TDE באמצעות File KMS.
- מתחברים ל-VM באמצעות SSH דרך שרת 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_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>" - יוצרים ספריות אחסון למסד הנתונים ולאחסון מפתחות 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. התקנת חבילות RPM של AlloyDB Omni
מגדירים מאגרי חבילות ומתקינים את שרת מסד הנתונים 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 ומתקינים חבילות RPM של שרת AlloyDB Omni 18.
sudo yum makecache sudo dnf install -y alloydbomni18 - מתקינים את מאגר ה-RPM הרשמי של PostgreSQL PGDG ומתקינים את חבילת הלקוח הרגילה של 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
מגדירים מכסות משאבים, פותחים יציאות בחומת האש של המארח ומפעילים את אשכול AlloyDB Omni עם הצפנת נתונים שקופה באמצעות מפתח 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 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 - מגדירים את יציאת השרת 5432 ב-
postgresql.conf.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) כדי להוכיח הצפנה במנוחה.
- מתחברים למסד הנתונים של
alloydbadminבאמצעותpsql.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; - מריצים שאילתה בתצוגת הנתונים הסטטיסטיים הפנימית של 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מחזירה אפס התאמות כי כל קובצי הנתונים, האינדקסים, יומני הרישום של פעולות הכתיבה (WAL) והנתונים הזמניים מוצפנים באופן מלא באמצעות צפנים של בלוקים מסוג AES במצב מנוחה.
8. הסרת המשאבים
אחרי שמסיימים את התרגילים, מוחקים את המשאבים כדי למנוע חיובים לא רצויים על מחשוב.
- מתנתקים מהסשן של SSH במכונה הווירטואלית.
exit - הסרה של מכונה וירטואלית ב-GCE ושל דיסקים של אחסון מתמיד (persistent disks) שמצורפים אליה.
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), מגדירים החלפה ומפרמטים מערכות קבצים מסוג XFS. - איך ליצור ולנהל מפתחות להצפנת מפתחות הצפנה באמצעות File KMS.
- איך מאתחלים ומפעילים אשכול AlloyDB Omni עם TDE באמצעות כלי RPM.
- איך מאמתים הצפנה של נתונים במנוחה באמצעות בדיקה ישירה של דיסק גולמי (
grep).
מידע נוסף זמין במאמרי העזרה בנושא AlloyDB Omni.